[winAPI] DllMain 정의
레퍼런스/API 2013. 9. 2. 10:30 |DLL 코드 작성
DLL 코드에는 winMain 함수처럼
DllMain 콜백 함수가 정의 된다.
DllMain을 정의하지 않더라도 컴파일이 되는데, 이는 컴파일러가 내용이 텅 빈(empty) dummy code를 삽입하기 때문이다.
반드시 필요하지만 정의하지 않을경우 컴파일러가 Default DllMain을 삽입해준다는 소리다.
DllMain 함수의 모양은 아래와 같다.
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
일단 첫 번째 인자는 winMain의 hInstance와 같은 역할을 하는 DLL자신의 인스턴스이다.
두 번째 인자 dwReason은 DLL이 호출된 이유를 담고 있다. 위 Switch 문이 그 값에 해당한다.
DLL_PROCESS_ATTACH: DLL파일이 처음 프로세스에 로딩되었을 때 (ex : LoadLibrary() 호출)
DLL_PROCESS_DETACH: DLL파일이 프로세스에서 해제 되었을 때 (ex : FreeLibrary() 호출)
이 외에도 스레드 관련 값이 2개 더 있다. (MSDN 참조)
'레퍼런스 > API' 카테고리의 다른 글
[JSP] java.lang.NoClassDefFoundError: javax/el/ELResolver 에러 (0) | 2013.12.17 |
---|---|
[winAPI] ReadProcessMemory (1) | 2013.09.14 |
[winAPI] ProcessToken, AccessToken (0) | 2013.09.12 |
[winAPI]GetModuleFileName 함수 (0) | 2013.09.02 |
[winAPI] ListBox 여러개 삭제, 멀티 셀렉트 삭제 (0) | 2012.05.30 |