20.3 DLL入口函数--《Windows核心编程》

如果在执行一些与进程或者线程有关的初始化或者销毁工作的时候,需要 DllMain。如果只需要创建一个包含资源的DLL,不需要这个函数。

B00L WINAPI DllMain(HINSTANCE hinstDll,DWORD fdwReason,PVOID fImpLoad)
{
	switch (fdwReason)
  { 
		case DLL_PROCESS_ATTACH:
			// 当DLL被初次映射到进程的地址空间中时,系统将调用该 DLL 的 DllMain 函数
			break;

		case DLL_THREAD_ATTACH:
			// 当在一个进程中创建线程时,系统要查看当前映射到该进程的地址空间中的所有 DLL 文件映像,
			// 并调用每个文件映像的带有 DLL_THREAD_ATTACH 值的 DllMain 函数。
			break;

		case DLL_THREAD_DETACH:
			// A thread is exiting cleanly.
			break;

		case DLL_PROCESS_DETACH:
			// The DlL is being unmapped from the process's address space.
			break;
	}
	return(TRUE);//Used only for DLL_PROCESS_ATTACH
}

(1)hinstDll:包含了DLL的实例句柄,这个值用于标识DLL的文件映像被映射到进程的地址空间中的虚拟内存地址。
(2)fImpLoad:如果DLL是隐含加载的,那么该参数将是个非0值,如果DLL是显式加载的,那么它的值是0。
(3)fdwReason:用于指明系统为什么调用该函数。该参数可以使用4个值中的一个。

 

posted @   人类观察者  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示