【问题标题】: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 初始化中传递一个指向这样一个全局变量的引用/指针。