在DllMain()之前调用哪些函数?

时间:2013-08-21 20:08:16

标签: c dll windows-runtime dllmain

在DllMain()之前调用哪些函数?如果在C运行时初始化期间有多个,则顺序很重要。

3 个答案:

答案 0 :(得分:4)

来自source: -

  

如果您的DLL与C运行时库(CRT)链接,则为该条目   CRT提供的点调用构造函数和析构函数   全局和静态C ++对象。因此,这些限制   DllMain也适用于构造函数和析构函数以及任何代码   是从他们那里打来的。

答案 1 :(得分:2)

我认为只调用_DllMainCRTStartup(),它反过来调用全局C ++对象的所有构造函数(在C的情况下都没有)和(我不确定最后一个)调用DllMain()。

当然,它还调用一些Kernel32函数来初始化CRT(对于初学者,它需要分配一些内存和一个TLS插槽)。

答案 2 :(得分:2)

这非常依赖于编译器。

DllMain()与DLL的入口点具有完全相同的调用约定,因此对于某些编译器,DllMain() DLL的入口点!

其他编译器使用自己的入口点,在进入DllMain()之前完成一些DLL初始化。

与此相反,EXE文件的入口点没有任何参数,函数必须永远不会返回。因此,WinMain()或main()函数不能是EXE文件的入口点,但必须有一些在WinMain()或main()之前调用的准备代码。