QLibrary Visual C++ 全局变量

Posted

技术标签:

【中文标题】QLibrary Visual C++ 全局变量【英文标题】:QLibrary Visual C++ global variables 【发布时间】:2014-05-27 16:56:27 【问题描述】:

我在使用 QLibrary 的 Qt 项目中使用 Visual C++ DLL。功能一切正常,但我也可以直接访问由 DLL 导出的全局变量吗?如果我尝试这样做,我的程序会崩溃,但是,解决方法似乎有效。

全局变量像函数一样导出,extern "C"extern __declspec (dllexport)。这甚至可能吗,还是我需要先编写一个函数来返回变量?如果可能,您能否提供一个类似 Qt 助手中的功能的示例?

【问题讨论】:

【参考方案1】:

您可以定义一个函数来访问全局变量。共享库的代码如下:

int myVariable;

extern "C" Q_DECL_EXPORT int get_myVariable()

     return myVariable;

在您的 Qt 应用程序中,您可以调用函数并访问变量:

#include <QLibrary>

typedef int (*get_myVariable_func)();

int main(int argc, char *argv[])

    QCoreApplication a(argc, argv);

    QLibrary library( "./dynamic_library" );
    library.load();
    if( !library.isLoaded() )
    
        qDebug() << "Cannot load library.";
        return 0;
    

    get_myVariable_func get_variable = (get_myVariable_func)library.resolve( "get_myVariable" );
    if( get_variable )
    
        int var= get_variable();

        qDebug() << "my variable = " << var;

    

    return a.exec();

【讨论】:

感谢 Nejat,我相信您的回答会对其他人有所帮助。不幸的是,在某些情况下,DLL 的变量不是类成员而是全局变量,我编辑了我的问题以使其更清楚。 我问是否可以直接访问它们。根据你的帖子,我猜答案是否定的,我需要修改 DLL 并将它们放入一个函数中。

以上是关于QLibrary Visual C++ 全局变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 的监视窗口(用于 C++)上列出和查看所有全局变量?

C++,Visual Studio 2017:从加载的 .dll 中访问 .exe 的全局变量 [重复]

Visual C++变量命名规则

在 Visual Studio 调试器中查看命名空间的全局变量?

全局挂钩在 Visual C++ 中不起作用

有关MFC的afx_module_state类的作用,visual c++