form <windows核心编程>为什么Microsoft要创建FreeLibraryAndExitThread这个函数。其原因与下面的情况有关:假定你要编写一个DLL,当它被初次映射到进程的地址空间中时,该DLL就创建一个线程。当该线程完成它的操作时,它通过调用FreeLibrary函数,从进程的地址空间中卸载该DLL,并且终止运行,然后立即调用ExitThread。但是,如果线程分开调用FreeLibrary和ExitThread,就会出现一个严重的问题。这个问题是调用FreeLibrary会立即从进程的地址空间中卸载DLL。当调用的FreeLibrary返回时,包含对ExitThread调用的代码就不再可以使用,因此线程将无法执行任何代码。这将导致访问违规,同时整个进程终止运行。但是,如果线程调用FreeLibraryAndExitThread,该函数调用FreeLibrary,使DLL立即被卸载。下一个执行的指令是在Kernel32.dll中,而不是在刚刚被卸载的DLL中。这意味着该线程能够继续执行,并且可以调用ExitThread。ExitThread使该线程终止运行并且不返回。
{
....//
case DLL_PROCESS_ATTACH //加载DLL的时候新建个线程
HANDLE handle=CreateThread(...);
...
CloseHandle(handle);
break;
....//
}