首页 > 解决方案 > 从 dll Visual C++ 导出外部变量

问题描述

基本上我在visual studio中有一个dll项目。我成功地将这个 dll 项目链接到第二个项目,但是一旦我尝试使用外部变量,事情就会出错。我已将我的外部变量从其他所有内容中分离到一个单独的头文件和源文件中,这样我就可以隔离问题和潜在的解决方案。我已经在互联网上浏览了几个小时,我觉得我已经尝试了一切。我开始认为它可能是一个编译标志?无论如何,这是我的代码。

宏.h

#pragma once    

// dll management
#ifdef TOAST_EXPORT
#ifdef _MSC_VER
#define TAPI __declspec(dllexport)
#else
#define TAPI __attribute__((visibility("default")))
#endif
#else
#ifdef _MSC_VER
#define TAPI __declspec(dllimport)
#else
#define TAPI
#endif
#endif

全局变量.h

#pragma once

#define TOAST_EXPORT
#include "macros.h"

namespace toast
{
    TAPI extern const char c;
}

全局变量.c

请注意,我在没有 const 的情况下尝试了这个,并且在这里没有分配

#pragma once
#include "globals.h"

namespace toast
{
    const char c = 'a';
}

main.c(从编译为 exe 的项目)

#include <globals.h>

int main()
{
    char c = toast::c;
    return 0;
}

到目前为止,我已经尝试进行了很多细微的更改,例如重新排序 extern 和 const 等。我也只用 extern 和 const 完成了它。仍然产生相同的unresolved external symbol "char const toast::c"错误。请记住,我可以创建类的实例并成功地从 dll 调用它们的方法,这就是诸如此类的事情class TAPI logger...

标签: c++dllc++20dllexport

解决方案


推荐阅读