首页 > 解决方案 > 在全局变量的初始化/取消初始化中使用隐式加载的 DLL 中的函数

问题描述

考虑一个使用导入库logging.lib的 Windows 程序,以便在运行时自动加载/卸载logging.dll 。

另外,考虑主程序的一个翻译单元定义了一个类类型的全局变量,如下所示:

struct InitGuard
{
    InitGuard()
    {
        logging::initialize();
    }

    ~InitGuard()
    {
        logging::deinitialize();
    }
};

InitGuard g_initGuard;

除了更好的方法是InitGuard在函数内实例化之外main

标签: c++windows

解决方案


是否保证 在调用 c'tor 时已经加载了 logging.dllInitGuard  ?

是的。在任何 EXE 代码开始运行之前,对静态链接 DLL 的所有引用都由 OS Loader 解析。

更重要的是,是否保证 在 d'tor 的返回之前还不会卸载 logging.dllInitGuard  ?

是的。在 EXE 的代码完成运行之前,操作系统不会释放静态链接的 DLL。


推荐阅读