当一个新线程创建时,系统将分配进程的地址空间,然后将.exe文件映像和所有需要的DLL文件映像映射到进程的地址空间中。然后它创建进程的主线程,并使用该线程调用每个DLL的带有DLL_PROCESS_ATTACH值的DllMain函数。当已经映射的所有DLL都对通知信息作出响应后,系统将使进程的主线程开始执行可执行模块的C/C++运行期启动代码...
//一个线程正在被创建 break; case DLL_THREAD_DETACH: //线程终结 break; case DLL_PROCESS_DETACH: //这个DLL从进程的地址空间中解除映射 break; } return(TRUE); } 参数说明: hinstDLL包含DLL句柄。该值表示DLL被映射到进程地址空间内的虚拟地址。 fImpLoad当隐式加载时该参数非零,当DL...
dll_process_attach是DllMain函数的一个调用原因(reason),用于指示一个DLL(动态链接库)被首次映射到进程的地址空间时的情况。具体来说,当系统加载一个DLL到进程中时,它会调用该DLL的DllMain函数,并传入DLL_PROCESS_ATTACH作为fdwReason参数。这是DLL进行初始化操作的理想时机,例如分配资源、创建必要的线程或事件等。
<1>利用Unit的 Initalization与Finalization这两个小节 可以在Unit的这两个小节中安排Unit的进入和退出,但是Program与 Library并没有这两个部分,所以只能写在Unit中。 <2>利用ExitProc变量 在Library的begin..end.中间是可以写代码的, 这里可以放置 DLL初始化代码。如果想要做善后工作,则可以利用ExitProc变量。 我们...