访问dll中的全局变量

时间:2010-12-15 15:52:35

标签: c windows dll global-variables

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

我的全局变量包含一个临界区对象,我需要在dll中锁定它。

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

将其导入到dll中

__declspec(dllexport)__declspec(dllimport) 但是当我试图锁定临界区时,我得到了一个runtine异常,这让我觉得我的dll访问的变量没有正确初始化。

使用LoadLibrary在运行时加载dll。

任何提示都将不胜感激。

2 个答案:

答案 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初始化中传递一个引用/指针到这样一个全局变量。