代码将显式调用ExitProcess()函数,终止进程的运行。
如果因为进程中的线程调用FreeLibrary()或FreeLibraryAndExitThread()函数而将DLL 卸
载,那么调用函数的线程将负责执行DllMain()函数的代码。如果使用FreeLibrary,那么要等
到DllMain()函数完成对DLL_PROCESS_DETACH 通知的执行后,该线程才可以从对
FreeLibrary 函数的调用中返回。
3.DLL_THREAD_ATTACH 通知
当在一个进程中创建线程时,系统查看当前映shè到该进程的地址空间中的所有DLL 文件
映像,并调用每个带有DLL_THREAD_ATTACH 值的DllMain()函数文件映像。这样,DLL
就可以执行每个线程的初始化cāo作。新创建的线程负责执行DLL 的所有DllMain()函数中的
代码。只有当所有的DLL 都有机会处理该通知时,系统才允许新线程开始执行它的线程函数。
当一个新DLL 被映shè到进程的地址空间时,如果该进程内已经有若干个线程正在运行,
那么系统将不为现有的线程调用带有DLL_THREAD_ATTACH 值的DDL 的DllMain()函数。
只有当新线程创建时, DLL 被映shè到进程的地址空间中, 它才可以调用带有
DLL_THREAD_ATTACH 值的DLL 的DllMain()函数。
另外要注意,系统并不为进程的主线程调用带有DLL_THREAD_ATTACH 值的任何DllMain()
函数。进程初次启动时映shè到进程的地址空间中的任何DLL 均接收DLL_PROCESS_ATTACH 通
知,而不是DLL_THREAD_ATTACH 通知。
4.DLL_THREAD_DETACH 通知
让线程终止运行的首选方法是使它的线程函数返回。这使得系统可以调用ExitThread()
函数来撤消该线程。如果ExitThread()函数要终止运行该线程,系统不会立即将它撤消,而是
取出这个即将被撤消的线程, 并让它调用已经映shè的DLL 中所有带有
DLL_THREAD_DETACH 值的DllMain()函数。这个通知告诉所有的DLL 执行每个线程的清
除cāo作。例如,DLL 版
松语文学免费小说阅读_www.16sy.com