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 참조)





Posted by $Zero
: