DLL的入口函数

一个DLL可以有一个入口点函数。

-系统会在不同的时候调用这个入口点函数,这些调用是通知性的,通常被DLL用来执行一些与进程线程有关的初始化和清理工作。

-如果DLL不需要这些通知,则可以不在源码中实现这个入口点函数。

实现代码:

BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        //第一次将一个DLL映射到进程的地址空间中,之后再Loaibrary不再调用这个入口函数
        break;
    case DLL_THREAD_ATTACH:
        break;
        //进程创建一个线程时,DLL执行与线程相关的初始化
    case DLL_THREAD_DETACH:
        //ExitThread让线程终止
        break;
    case DLL_PROCESS_DETACH:
        //将一个DLL从进程的地址空间中撤销时调用。(即最后一次FreeLibrary或FreeLibraryAndExitThread)
        //调用的是FreeLibrary时,在DllMain处理完DLL_PROCESS_DETACH通知之前,线程不会从该调用中返回。
        //DLL可能会阻碍进程的终止。
        break;
    }
    return TRUE;
}

DLL的序列化调用

你可能感兴趣的:(DLL的入口函数)