访问一个DLL中的全局variables

我如何访问一个全局variables,在我的应用程序的main()函数中初始化一个dll?

我的全局variables包含一个临界区对象,我需要locking在一个DLL

我试图导出它在我的应用程序,并将其导入到DLL使用

__declspec(dllexport)__declspec(dllimport)但是当我试图locking关键部分,我得到了一个runtineexception,这让我觉得我的dll访问的variables没有正确初始化。

该DLL在运行时使用LoadLibrary加载。

任何提示,将不胜感激。

Solutions Collecting From Web of "访问一个DLL中的全局variables"

通常,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在需要时可以使用自己的指针副本。

这是一个非常糟糕的主意,因为它违反了模块化的原则:(

我真的不知道如何强制编译器和链接器做你想做的,如果你必须,我宁愿传递一个参考/指针到这样一个全局变量在dll初始化。