dll可以有一个入口点函数,系统会在不同的时候调用这个入口函数。
这个调用是通知性质的,通常被dll用来执行一些与进程或线程有关的初始化和清理工作
如果将dll的入口点函数命名为DllMain之外的其他名称,那么虽然代码仍可以编译和链接成功,但入口函数将永远不会被
调用
DllMain函数执行的时候可能同一地址空间中的其他dll还没有执行他们的DllMain
创建新进程时:系统分配进程地址空间
映射exe,dll的文件映像
创建主线程
主线程调用每个dll的DllMain函数
主线程执行可执行模块的C/C++运行时的启动代码
主线程执行可执行程序的入口点函数
LoadLibrary: 定位dll
映射dll到进程的地址空间
该线程调用dll的DllMain函数传递DLL_PROCESS_ATTACH
DllMain返回true,线程继续执行
DllMain范回false,系统自动从进程的地址空间撤销对dll文件的映射
BOOL WINAPI DllMain(INSTANCE hInstDll,DWROD fdwReason,PVOID fImpLoad)
hInstDll表示一个虚拟内存地址,dll的文件映像就被映射到进程地址空间中的这个位置
fdwReason表示系统调用入口点函数的原因
fImpLoad表示dll是不是隐式载入的
相关文章
- 11-29关于winform打包后,显示 CefSharp.core.dll 找不到指定的模块的解决方案。
- 11-29异常加载CEFSHARP.CORE.DLL
- 11-29错误模块名称: KERNELBASE.dll
- 11-29查看应用程序使用的所有dll
- 11-29获取当前运行dll文件的路径
- 11-29在 Windows 下用 TDM-GCC(MinGW)开发 DLL 涉及到数据同步锁及 DLL 初始化终止化函数的问题
- 11-29安装sklearn时出现 "ImportError: DLL load failed" 的解决方法
- 11-29未能加载文件或程序集Microsoft.SharePoint.Sandbox.dll
- 11-29ueditor .NET版本提示uploader、Config类同时存在于两个dll中
- 11-29labview调用opencv 如何封装dll labview图像转到opencv图像