3. Implementation/COM & ActiveX
DllMain 함수
SSKK
2008. 10. 3. 12:47
Dll이 처음 메모리에 로드되면 DllMain()이라고 하는 진입점(entry-point) 함수가 호출된다.
DllMain() 함수는 다음과 같은 구조를 갖는다.
BOOL APIENTRY DllMain( HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved) { switch(dwReason){ case DLL_PROCESS_ATTACH: // DLL 이 프로세스의 주소 영역에 매핑됨 // DLL 초기화 코드 break; case DLL_THREAD_ATTACH: // 스레드가 생성됨 break; case DLL_THREAD_DETACH: // 스레드가 종료됨 break; case DLL_PROCESS_DETACH: // DLL 이 프로세스의 주소 영역에서 매핑이 해제됨 // DLL 종료 처리 코드 break; } } |
흥미로운 것은 DLL을 로드한 프로세스가 새로운 스레드를 생성할 때도 DllMain() 함수가 호출된다. 이 경우에는 dwReason 인수에 DLL_THREAD_ATTACH 값이 전달된다. 마찬가지로 DLL을 로드한 프로세스가 생성된 스레드를 소멸시킬 때도 DllMain() 함수가 호출되면 이 경우에는 DLL_THREAD_DETACH 값이 dwReason 인수에 전달된다.
참고 : 전병선의 Component Development with Visual C++ & ATL