4

在 DllMain() 之前调用了哪些函数?如果在 C 运行时初始化期间不止一个,那么顺序很重要。

4

3 回答 3

5

来源: -

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

于 2013-08-21T20:14:17.433 回答
3

我认为只有 _DllMainCRTStartup() 被调用,它依次调用全局 C++ 对象的所有构造函数(在 C 的情况下没有)并且(我不确定最后一个)调用 DllMain()。

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

于 2013-08-21T20:11:54.503 回答
3

这非常依赖于编译器。

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

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

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

于 2013-08-21T20:32:23.157 回答