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 @ 2022-11-23 11:35  人类观察者  阅读(65)  评论(0编辑  收藏  举报