【问题标题】:Access a global variable in a dll访问 dll 中的全局变量
【发布时间】:2010-12-15 15:52:35
【问题描述】:

如何访问在 dll 中的应用程序的 main() 函数中初始化的全局变量?

我的全局变量包含一个关键部分对象,我需要将其锁定在一个 dll 中。

我尝试在我的应用程序中将其导出并使用

将其导入到 dll 中

__declspec(dllexport)__declspec(dllimport) 但是当我尝试锁定关键部分时,我得到一个运行异常,这让我认为我的 dll 访问的变量没有正确初始化。

dll 在运行时使用 LoadLibrary 加载。

任何提示将不胜感激。

【问题讨论】:

    标签: c windows dll global-variables


    【解决方案1】:

    通常从应用程序访问 DLL 中的变量,但看起来您正试图以相反的方式进行访问。而且您从应用程序导出并在 DLL 中导入的方式似乎有点 hackish。

    如何在 DLL 中创建一个函数,该函数从应用程序中获取指向临界区对象的指针并将其存储在 DLL 自己的全局变量中?

    DLL:

    CRITICAL_SECTION *gCS;
    
    __declspec(dllexport) void MyDLL_SetCS(CRITICAL_SECTION *cs) {
      gCS = cs;
    }
    

    应用:

    CRITICAL_SECTION cs;
    // initialize cs here
    MyDLL_SetCS(&cs);
    

    然后 DLL 可以在需要时使用它自己的指针副本。

    【讨论】:

      【解决方案2】:

      这是一个非常糟糕的主意,因为它违反了模块化原则:(

      老实说,我不知道如何强制编译器和链接器做你想做的事,如果你必须这样做,我宁愿在 dll 初始化中传递一个指向这样一个全局变量的引用/指针。

      【讨论】:

        猜你喜欢
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-15
        • 2014-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多