c++ - 在dll和exe中使用全局变量

标签 c++ dll

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

commonHeader.h

int commonInt = 0;

我有 3 个 dll 项目,我想在其中使用它,所以我包含上面的标题,但它给我多次定义的错误符号,#pragma once 也不起作用。

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

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

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

我在 Windows 7 上使用 VS 2010 prof。

提前致谢。

最佳答案

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

但为了使它与 dll 一起工作,您还必须将其声明为由 exe 导出并由 dll 使用 __declspec(dllexport) 导入和 __declspec(dllimport) , 使用适当的宏来选择正确的 __declspec取决于您是编译 exe 还是 dll。

关于c++ - 在dll和exe中使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14197237/

相关文章:

c++ - ostringstream 的 HashMap ?

c++ - 最小/最大/步长函数和 "body of constexpr function ... not a return-statement"

c++ - 如何编辑默认的 makefile

c++ - 在 Visual Studio C++ 中设置 PYTHONPATH 环境变量

c# - 是否可以将用 c++ 编写的动态库导入到 c# 程序中

c++ - Qt/C++ QTableWidget : Doing something when a header is doubleclicked

c++ - 如何编译 C++ dll 以使用 Lua? (我收到错误加载模块)

debugging - 如何调试 DLL 加载失败 : Invalid access to memory location

c# - 在 x64 中从 C# 调用 C++ 代码,所有参数都移动 1

matlab - 在 C DLL 中使用 delphi 数据类型的问题