特殊说明:版权归个人所有,请勿转载,谢谢合作。
一个标准的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连接时发送 |
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。