본문 바로가기

전체 글296

C#에서 DllImport를 사용해서 C++ DLL 함수를 호출할 때 진입점 못찾는 문제 관련 dumpbin 사용법 System.EntryPointNotFoundException 예외는 C#에서 DllImport로 호출하려는 함수의 "진입점(entry point)"—즉, DLL 안에 해당 함수 이름으로 내보낸(exported) 심볼이 존재하지 않을 때 발생합니다. 이건 네이티브 DLL과 C# 선언이 정확히 일치하지 않을 경우 흔히 생기는 오류예요. 🔍 원인 분석: 왜 진입점을 못 찾을까?원인설명❌ DLL에 함수가 Export되지 않음__declspec(dllexport) 없이 빌드됐거나, MFC 함수가 자체적으로 숨겨져 있음🧨 함수 이름이 맹글링(mangling) 됨C++에서는 함수 이름에 인자 정보가 포함되어 이름이 변경됨 (C#에서는 찾지 못함)🔀 함수 이름을 잘못 썼음DllImport에서 함수 이름 오타 또.. 2025. 7. 21.
QT v4.x QElapsedTimer 경과 시간 측정 방법 QElapsedTimer는 Qt 4.7부터 도입된 클래스로, 두 이벤트 사이의 경과 시간을 빠르게 측정할 수 있도록 설계되었습니다. QTime과 유사한 API를 제공하지만, 가능한 경우 단조(monotonic) 시계를 사용한다는 점에서 더 정확하고 안정적인 시간 측정이 가능합니다.주요 특징빠른 시간 측정: 밀리초 단위로 경과 시간을 측정할 수 있습니다.단조 시계 사용: 시스템 시간이 변경되어도(예: 사용자 수동 조정) 영향을 받지 않습니다.사람이 읽을 수 있는 시간으로 변환 불가: QElapsedTimer는 디버깅이나 성능 측정용으로 적합하며, 시각 표시에는 적합하지 않습니다.QElapsedTimer timer;timer.start();// 시간 소모가 큰 작업slowOperation();qDebug().. 2025. 6. 30.
QT v4.x 기반 TcpClient 예제 다음은 Qt 4.x 환경에서 동작하는 QTcpSocket 기반의 간단한 TCP 클라이언트 예제입니다. 앞서 제공한 서버 코드와 통신할 수 있도록 구성되어 있어요:#include #include #include class TcpClient : public QObject { Q_OBJECTpublic: TcpClient(QObject *parent = 0) : QObject(parent) { socket = new QTcpSocket(this); connect(socket, SIGNAL(connected()), this, SLOT(onConnected())); connect(socket, SIGNAL(readyRead()), this, SLOT(onReadyR.. 2025. 6. 30.
QT v4.x 기반 TcpServer 예제 Qt 4.x에서도 QTcpServer와 QTcpSocket을 사용하는 기본 구조는 Qt 5/6과 유사하지만, 람다 표현식과 일부 시그널/슬롯 연결 방식이 다릅니다. 아래는 Qt 4.x 호환 TCP 서버 예제입니다:.#include #include #include #include class TcpServer : public QObject { Q_OBJECTpublic: TcpServer(QObject *parent = 0) : QObject(parent) { server = new QTcpServer(this); connect(server, SIGNAL(newConnection()), this, SLOT(onNewConnection())); if (serve.. 2025. 6. 30.
싱글샷 타이머 사용 싱글샷 타이머 사용QTimer::singleShot(3000, this, SLOT(onSingleShot())); 이렇게 하면 3초 후에 onSingleShot() 슬롯이 한 번 호출됩니다. 2025. 6. 30.
QT v4.x를 기반으로 startTimer, killTimer 예제 Qt 4.x에서 startTimer()와 killTimer()를 사용하는 기본적인 예제를 소개할게요. 이 방식은 QObject의 기능을 직접 활용하는 저수준 타이머 방식으로, timerEvent()를 재정의해서 타이머 이벤트를 처리합니다.#include #include #include #include class MyWidget : public QWidget { Q_OBJECTpublic: MyWidget(QWidget *parent = nullptr) : QWidget(parent), timerId(0) { // 1초 간격으로 타이머 시작 timerId = startTimer(1000); // 1000ms }protected: void timerEvent(Q.. 2025. 6. 30.
QT v4.x Queue 사용 Qt 4.x에서는 QQueue 클래스를 사용해 선입선출(FIFO) 방식의 큐를 쉽게 구현할 수 있어요. 이 클래스는 QList를 기반으로 하며, 큐에 데이터를 추가하고 꺼내는 데 특화된 메서드를 제공합니다.#include #include #include int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QQueue queue; // 데이터 추가 queue.enqueue(10); queue.enqueue(20); queue.enqueue(30); // 큐에서 데이터 꺼내기 while (!queue.isEmpty()) { int value = queue.dequeue(); .. 2025. 6. 30.
C# Throw 발생 방법 C#에서 throw 키워드는 예외(Exception)를 발생시키는 데 사용됩니다. 특정 조건이 만족되지 않을 경우 예외를 던져 프로그램이 예외 처리 로직을 수행하도록 할 수 있습니다. 1. 기본적인 throw 사용 방법throw new Exception("에러가 발생했습니다!"); 2. 조건부 예외 발생 특정 조건을 검사하고, 필요할 때만 예외를 발생시키는 방법입니다.void ValidateAge(int age){ if (age 📌 throw new ArgumentException("메시지")를 사용하여 잘못된 인수에 대한 예외를 던질 수 있습니다. 3. 사용자 정의 예외 클래스 C#에서는 표준 예외 유형 외에도 사용자 정의 예외를 만들 수 있습니다.public class CustomExcepti.. 2025. 5. 13.
C# 폴더 내부 파일을 다른 폴더로 복사 C#에서 특정 폴더 내부의 파일을 다른 폴더로 복사하려면 System.IO 네임스페이스의 Directory 및 File 클래스를 사용할 수 있습니다. 다음은 폴더 내의 모든 파일을 복사하는 방법입니다. 1. 파일만 복사 (Directory.GetFiles 사용)using System;using System.IO;class Program{ static void Main() { string sourceFolder = @"C:\SourceFolder"; string destinationFolder = @"C:\DestinationFolder"; // 대상 폴더가 없으면 생성 if (!Directory.Exists(destinationFolder)) .. 2025. 5. 13.