如何在main()获得控制权之前编写要执行的代码?

klu*_*udg 2 c++

我正在将一个类移植到C++,并且需要在创建我的类的第一个实例之前执行一些初始化代码; 在main()获得控制之前执行代码适合我.如何在C++中做到这一点?

wil*_*ilx 10

初步答复

您可以在namespace范围内使用对象的构造函数.

namespace {
struct Init
{
    Init()
    {
        // Initialization code here.
    }
} init_;
} // namespace
Run Code Online (Sandbox Code Playgroud)

请注意,这有一些限制,特别是在Windows上.在Windows上,在保持加载程序锁的情况下调用ctor,因此您无法执行任何需要加载DLL等的操作.这包括WinSock的初始化,因为它可以尝试加载外部DLL.

更新

根据一些消息来源,您可以通过使用来解决此限制QueueUserAPC.这种技术也有局限性,尽管不同.我已经使用了这个,我的实验表明,只有当你使用Visual Studio及其C库作为DLL,即MSVCRT.DLL,MSVCR100.DLL等(/MD/MDd开关)时,这才有效.

更新2

这是一个类似问题链接(我的,实际上)有一个重要的位:

经过一些测试后,如果我从DllMain()排队APC,似乎APC方法有效,但如果我从一个类的静态全局实例的ctor排队APC,它就不起作用.