E D R S I H C RSS
ID
Password
Join
눈여겨 볼 때와 눈감아 줄 때를 아는 아내가 良妻. ―A.H.

플러그인 시스템을 구축하는 중에 플러그인을 DLL로 작성하는 데 있어서 DLL에서 core EXE로부터 어떤 함수를 호출하고자 할 때가 있습니다. 이럴때 유용한 팁입니다. DLL을 로딩하는 원본 EXE에서는 다음과 같이 작성했다고 가정합니다.
// DLL에서 export하는 것처럼 작성합니다.
extern "C"
{
  EXPORT void __callback_print(char * lpszMessage) {
    MessageBox(NULL,lpszMessage,"From Exe",MB_OK);
  }
}

DLL에서는 이렇게 합니다.
// 이 DLL을 로딩한 EXE의 핸들을 얻어내어 그 모듈로부터 함수포인터를 얻어냅니다.
FnPtrT FnPtr = (FnPtrT)::GetProcAddress(GetModuleHandle(NULL), "__callback_print");
if (FnPtr) 
 (*FnPtr)("Message From The DLL");

핵심은 GetModuleHandle(NULL) API 함수인데 이를 사용하면 현재 EXE에 대한 모듈 인스턴스 핸들을 가져옵니다. 잊을만한 내용이라 적어둡니다.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.0396 sec