c++ - 从 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...
。
解决方案
推荐阅读
- xml - Spring Batch:处理大量 XML 文件
- ssh - srun:错误:Slurm 控制器没有响应,正在休眠并重试
- c - 这个错误是什么意思?“预期的标识符或'('”
- javascript - 如何在angular8中制表后使用shift + tab时选择整个值
- c - 为什么下面的代码打印 b =5 而不是 b =4 因为它在操作后递减?
- bixby - 如何使用 dates.getHour 从当前时间获取小时
- autocomplete - 输入键时 Material-ui 自动完成移动到下一个元素
- machine-learning - 在文本分类中使用基于多列的类
- amazon-web-services - SageMaker - CloudFormation 中 SageMaker 实体的说明
- android - 有没有办法在后台启动位置管理器?