c++ - 从 DLL 导出全局变量

标签 c++ visual-studio dll dllimport

我正在尝试从 DLL 导出全局变量。

Foo.h

class Foo
{
public:
    Foo()
    {}
};

#ifdef PROJECT_EXPORTS
    #define API __declspec(dllexport)
#else
    #define API __declspec(dllimport)
#endif

API const Foo foo;

Foo.cpp

#include "Foo.h"

const Foo foo;

当我编译上述代码时,Visual Studio 报错:

foo.cpp(3) : 错误 C2370: 'foo' : 重新定义;不同的存储类别 1> foo.h(14) : 见 'foo' 的声明

如果我使用:

external const Foo foo;

在 Foo.h 中,编译器很高兴,但 DLL 不导出符号。我设法导出有问题的函数,但变量的工作方式似乎不同......有什么想法吗?

最佳答案

在您的标题中:

API extern const Foo foo;

在您的源文件中:

API const Foo foo;

如果您没有 extern 关键字,您的 C 编译器会假定您要声明一个局部变量。 (它并不关心你碰巧包含了头文件中的定义。)当你在源文件中实际声明变量时,你还需要告诉编译器你打算导出它。

关于c++ - 从 DLL 导出全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3097548/

相关文章:

C# 使用库创建 ".exe"

c++ - Visual Studio Code : C++ syntax highlighting for classes

c++ - Visual C++ 2012 和 PCRE

sql-server - Visual Studio 2008 无法连接到 SQL Server 2008

visual-studio-2010 - vs2010 中的 native /混合模式 dll 链接错误

带有 Main() 的 C++ 库分发

c++ - istream 和 cin.get()

c++ - 使用单个删除运算符删除多个指针

c++ - 如何使用正则表达式从QT C++中的字符串中获取子字符串值

c# .NET - 标签页边距