12.1 DLL入口函数

特殊说明:版权归个人所有,请勿转载,谢谢合作。

一个标准的DLL,需要一个DEF文件或输出接口声明,告诉对外公开了哪些代码或函数,所有代码将从入口函数DllMain开始。需要注意的是DLL不能独立执行,只能被动装入执行。如下所示,为标准的DLL入口函数。

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
           )
{
  switch (ul_reason_for_call)
  {
  case DLL_PROCESS_ATTACH:
  case DLL_THREAD_ATTACH:
  case DLL_THREAD_DETACH:
  case DLL_PROCESS_DETACH:
    break;
    }//end switch

    return TRUE;
}

 

参数hModule,是动态库被调用时所传递的一个指向自己的句柄。

参数ul_reason_for_call,是一个说明动态库被调用原因的标志,当进程或线程装入或卸载动态链接库时,

参数lpReserved,保留参数。

DllMain是入口函数,也是出口函数。该函数能使动态链接库被调用时得到正确的初始化。如果应用程序的DLL需要分配额外的内存或资源,或者需要对每个进程或线程进行初始化和清除操作时,就需要对入口函数中操作,具体位置可能是如下表12.1中的任意一项。

 

  • 表12.1 加载标识
标识 描述
DLL_PROCESS_ATTACH DLL首次装入进程地址空间时发送
DLL_THREAD_ATTACH 只要在连接DLL的进程中生成一个新线程时发送
DLL_THREAD_DETACH 只要在连接DLL的进程中终止一个线程时发送
DLL_PROCESS_DETACH 应用程序终止或断开DLL连接时发送

 

转载请附上原文出处链接及本声明
李老师的博客 » 12.1 DLL入口函数

发表评论

提供最优质的文章集合

立即查看 了解详情