如何访问在dll中应用程序的main()函数中初始化的全局变量?
我的全局变量包含一个临界区对象,我需要在dll中锁定它。
我尝试在我的应用程序中导出它并使用
将其导入到dll中 __declspec(dllexport)
和__declspec(dllimport)
但是当我试图锁定临界区时,我得到了一个runtine异常,这让我觉得我的dll访问的变量没有正确初始化。
使用LoadLibrary在运行时加载dll。
任何提示都将不胜感激。
答案 0 :(得分:6)
通常,DLL中的变量是从应用程序访问的,但看起来你正试图以相反的方式进行操作。你在DLL中从应用程序和导入导出的方式似乎有些过时。
如何在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可以在需要时使用自己的指针副本。
答案 1 :(得分:3)
这是一个非常糟糕的主意,因为它违反了模块化原则:(
老实说,我不知道如何强制编译器和链接器做你想做的事情,如果必须,我宁愿在dll初始化中传递一个引用/指针到这样一个全局变量。