2008년 03월 03일
명시적 DLL 연결
명시적 링킹
-함수 포인터 변수 선언 (예, void (*MyFuc) (char *); )
-hDLL=LoadLibrary("dll 이름")
-pF=GetProcAddress(hDLL,"함수이름")
-함수 포인터 변수 할당 (예, MyFuc=(void (*) (char *))(pF); )
-함수 실행 (예,MyFuc("DLL TEST"); )
-FreeLibrary(hDLL);
DLL 프로그램 빌드(c 프로그램)
// mydll.h header file 내용
#define LIBSPEC __declspec (dllexport)
LIBSPEC void MyPrintf(char *);
// mydll.c source file 내용
#include <stdio.h>
#include "mydll.h"
LIBSPEC void MyPrintf(char * tmp)
{
printf(tmp);
}
==> 빌드하면 mydll.dll, mydll.lib 생성됨.
응용프로그램 빌드(c, c++ 프로그램)
#include <stdio.h>
#include <windows.h>
int main(int argc, char* argv[])
{
HINSTANCE hDLL;
FARPROC pF;
void (*MyFuc) (char *); // 함수포인터 선언
hDLL=LoadLibrary("mydll.dll");
if(hDLL==NULL)
{
printf("\nFailed to load dllc.dll");
return 1;
}
pF=GetProcAddress(hDLL,"MyPrintf"); // DLL파일에서 불러올 함수의 포인터를 얻어온다
if(pF==NULL)
{
printf("\nFailed to find entry point");
return 1;
}
MyFuc=(void (*) (char *))(pF); // 함수포인터와 DLL 함수와의 연결
MyFuc("DLL TEST"); // 일반 함수 사용하듯이 사용
FreeLibrary(hDLL);
return 0;
}
==> mydll.dll 파일만 카피하여 실행.
이 경우 dumpbin 명령을 사용하면 쉽게 값을 얻어올 수 있다.(dumpbin은 커맨드 명령어이다.)
ex) dumpbin /exports 사용할dll파일명.dll
결국 dll 파일을 명시적으로 사용할때 가장 중요한 부분은 불러올 함수의 함수 포인터를 선언하고
연결하는 부분이다. 일단 그렇게 연결만 시킨다면 일반 함수 사용하듯이 사용할 수 있다.
# by | 2008/03/03 14:48 | 프로그래밍 | 트랙백 | 덧글(0)






![발트뷔네 콘서트 Vol. 2 박스세트 [dts]](http://image.aladdin.co.kr/coveretc/dvd/coveroff/3732430369_1.jpg)

☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]