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 的全局变量 [重复]