繁体   English   中英

在dll和exe中使用全局变量

[英]using global variable in dll and exe

我在公共头文件中有一个全局变量。 例如

commonHeader.h

int commonInt = 0;

我有3个dll项目要在其中使用,因此我包含上面的标头,但是它给了我多次定义的错误符号,#pragma一次也行不通。

如果我使上述变量extern,并在我的exe中定义它,我的dll中会出现链接器错误。

我所有的dll需要上面的标头。 我的一个dll需要其他2个dll的头文件(可能使syombol包含多个)

我如何解决上述问题,我只希望跨dll和exe一个变量。

我在Windows 7上使用VS 2010专业版。

提前致谢。

您只应在标头中声明全局变量。 它们应该在实现(源)文件中定义

在标题中,您应该具有:

// commonHeader.h

extern int commonInt;    // global *declaration*

然后在您的一个实现文件中,您应该具有:

// some_file.cpp

int commonInt = 0;       // global *definition* (and initialisation)

当然,应尽可能避免使用全局变量-过度使用全局变量是一种“代码异味”,但有时无法避免。

通过在头文件中使用该全局变量定义,您违反了一个定义规则(第3.2节)。 相反,只在带有extern的头文件中声明它,然后在单个实现文件中具有定义是正确的。

但是,为了使dll能够正常工作,您还必须将其声明为由exe导出,并由__declspec(dllexport)__declspec(dllimport)的dll导入,并使用适当的宏来选择正确的__declspec具体取决于您是否编译exe或dll。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM