본문 바로가기

C++/DLL use

C++ DLL use example

VC++에서 DLL을 사용하는 프로젝트                              DLL을 생성하는 프로젝트 설정하기 참조


예를들면, 한개의 프로젝트는 DLL을 생성하기 위한 프로젝트이고 다른 한개의 프로젝트는 생성된 DLL을 사용하는 프로젝트일 경우, 서로다른 솔루션에 이들 2개의 프로젝트가 속해 있다면 DLL을 생성하고 작동을 테스트하는 절차가 매우 번거로운 작업이 될 것이다.


다행히 VC++에서는 한개의 솔루션 안에 2개 이상의 프로젝트를 포함하게 할 수 있어서 매우 간편하게 DLL을 생성하고 테스트할 수 있다. 한개의 프로젝트에서 생성된 DLL을 다른 프로젝트의 폴더에 복사하는 과정이 필요 없기 때문에 DLL을 생성하고 테스트하는 일은 마치 동일 프로젝트를 사용하는 것과 같이 간편하다

여기서는 생성된 DLL 파일을 로드하여 사용하는 프로젝트를 소개하고자 한다.


아래 그림과 같이 동일 솔루션 안에 DLL 생성 프로젝트와 DLL 사용 프로젝트를 생성한다

DLL 생성 프로젝트는 MFC DLL 프로젝트를 설정한 것이고, DLL 사용 프로젝트는 콘솔 프로젝트를 선택해서 생성하면 된다.




사용된 예제 소스

#include <stdio.h>

#include <windows.h>

#include <tchar.h>


int useDLL()

{

HMODULE hDll = NULL;

int(*lpfnCheckSN)(char*, char*) = NULL;                    // 사용하려는 DLL의 함수 포인터 선언

hDll = LoadLibrary(TEXT("MyDLL.dll"));                      // DLL 파일로드, 가장먼저 현재 디렉토리에서 제시된 이름의 DLL을 찾는다

if(hDll == NULL) 

{

printf("LoadLibrary() 실패\n");

return 0;

}

lpfnCheckSN = (int(*)(char*,char*))GetProcAddress(hDll,"CheckSerial");        // DLL안의 함수명을 이용하여 함수 포인터를 얻는다

if(lpfnCheckSN == NULL)

{

printf("GetProcAddress() 실패\n");

FreeLibrary(hDll);

return 0;

}

int bPass = lpfnCheckSN("A가나다B", "133985280A923761320F780540247");           // DLL의 함수포인터를 이용하여 그 함수를 호출한다

printf("리턴값=%d\n", bPass);

FreeLibrary(hDll);

return bPass;

}