|
빌더에서 DLL Wizard 기능을 이용하여 DLL을 하나 만들었습니다.
만들당시 옵션은 "C++ Source type, Use VCL, VC++ Style DLL"을 선택하였습니다.
근데 이렇게 해서 생성한 DLL이라는 놈을 응용프로그램에서 불러서 사용하는데 DLL 로딩과 내부함수 호출은 정상적으로 이루어집니다.
헌데 DLL이 "Attach"되거나 "Detach"되는 시점에 특정한 작업을 수행하기 위해 DllMain 함수내에 코드를 넣었지만 실상 DLL이 Attach되거나 Detach될 때 삽입된 코드가 수행이 되질 않습니다.
그런데 DllMain을 DllEntryPoint 로 바꿔주면 원하는 작업이 수행됩니다.
무슨 이유인가요?
DllMain 형태로 삽입된 코드를 동작시키기 위해서는 다른 방법이 있는건가요?
궁금합니다. 조언부탁드립니다.
아래에 사용되어진 코드를 간단히 적어봅니다. 참고하시기 바랍니다.
/////////////////////////////////////////////////////////////////////////////////////
#include <vcl.h>
#include <windows.h>
TForm1 *MainForm;
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
switch(fwdreason){
case DLL_PROCESS_ATTACH :
case DLL_THREAD_ATTACH :
Application->MessageBoxA("Dll Attach", "Message", MB_OK);
if(MainForm == NULL){
MainForm = new TForm1(NULL);
}
break;
case DLL_PROCESS_DETACH :
case DLL_THREAD_DETACH :
Application->MessageBoxA("Dll Detach", "Message", MB_OK);
if(MainForm != NULL){
delete MainForm;
MainForm = NULL;
}
break;
}
return 1;
}
//---------------------------------------------------------------------------
|