对于每个dll来说,都要有一个入口点,就像普通的函数要有main函数一样,进程装载或脱离dll时系统都要调用入口点函数。
当发生任何一种事件时,都会调用dll的入口函数。
1
一个进程装载dll时,对于使用装载是连接的进程,当进程初始化时,动态链接库开始装载,对于使用运行是连接的进程,动态链接库在LoadLibrary或LoadLibrary
Ex函数返回之前调用。
2
一个进程脱离动态链接库时,当进程终止或调用FreeLibrary函数是参考数变为0时,动态链接库开始卸载。如果是调用了TerminateProcess和TerminateThread函数而导致的进程终止,则系统不会调用动态链接库的入口点函数。
3 装载了动态链接库的进程创建了另外的线程。
4 装载了动态链接库的进程中的一个线程正常终止。
动态链接库的入口点的DllMain函数结构如下:
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD
fdwReason,LPVOID lpReserved)
{
switch(fswReason)
case DLL_PROCESS_ATTACH
......
case DLL_THREAD_ATTACH
.....
case DLL_THREAD_DETACH
.....
case DLL_PROCESS_DETACH
....
}