DllMain
函数是DLL模块的默认
入口点。当Windows加载DLL模块时调用这一
函数。系统首先调用全局对象的
构造函数,然后调用
全局函数DLLMain。DLLMain
函数不仅在将DLL链接加载到进程时被调用,在DLL模块与进程分离时(以及其它时候)也被调用。下面是一个框架DLLMain
函数的例子。
如果我们在DllMain中写入下面的代码(在原来的gan
dll.c中添加下面的代码):
BOOL APIENTRY DllMain(HANDLEhModule, DWORD ul_reason_for_call, LPVOIDlpReserved)
{
printf("hModule.%p lpReserved.%p \n", hModule,lpReserved);
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
printf("Process attach. \n");
break;
case DLL_PROCESS_DETACH:
printf("Process detach. \n");
break;
case DLL_THREAD_ATTACH:
printf("Thread attach. \n");
break;
case DLL_THREAD_DETACH:
printf("Thread detach. \n");
break;
}
return (TRUE);
}
同时将
dlltest\dlltest.c修改为:
#include<stdio.h>
#include"dlltest.h"
int
main(int argc, char**argv)
{
printf("Simple DLL test start. \n");
printf("Call DLL function: \n");
printf("Test DLL values: %d \n", add2(1, 2));
printf("Call DLL function end. \n");
printf("Simple DLL test end. \n");
return (0);
}
我简单的测试一下输出结果为:
C:\gan
dll\dlltest>dlltest
hModule.10000000lpReserved.0012FD30
Process attach.
Simple DLL teststart.
Call DLLfunction:
Test DLL values:3
Call DLL functionend.
Simple DLL testend.
hModule.10000000lpReserved.00000001
Process detach.
也就是说DLL加载和应用程序退出的使用都会调用该
函数(DllMain)的哦,是应用程序一上来就调用的,不是用到该函数时才调用的!