c - 使用 __declspec 会导致“错误 C2370 'In1':重新定义;不同的存储类”
问题描述
我有一个使用 MSVC 创建的 dll。头文件和 .def 文件也存在。这是从 dll (simple.def) 导出的内容:
EXPORTS
simple_initialize
simple_step
simple_terminate
In1
Gain
Increment
我有一个简单的应用程序,它试图访问 dll 中的函数和变量(也有 .lib 文件)。MSVC 项目文件提供了必要的文件,并且应用程序可以正确构建。这是应用程序代码:
#include <stddef.h>
#include <stdio.h>
#include "simple.h"
#include "rtwtypes.h"
void main(void)
{
int i;
simple_initialize();
for (i = 0; i < 10; i++)
{
simple_step();
}
simple_terminate();
}
这段代码似乎工作正常,但是,如果我尝试从 dll 写入任何全局变量(In1、Gain 或 Increment),则会导致崩溃。
经过研究,我意识到我可以让它工作的唯一方法是添加
__declspec(dllimport) real_T In1;
并从头文件中注释掉这一行:
extern real_T In1;
如果我不评论这一行,那么我会收到以下错误:
错误 C2370 'In1':重新定义;不同的存储类 SimpleTest \SimpleTest.c 8
解决方案
推荐阅读
- json - 丰富的评论片段未显示
- r - 如何使用 Trycatch 跳过 R 中数据下载中的错误
- flutter - 如何使用 bloc 侦听器中的 blocprovider.value 包装导航
- flutter - Flutter:错误:[firebase_storage/object-not-found] 所需参考处不存在对象
- c# - 在 UWP 中重新排序 ListView 项目会弄乱内容
- udp - UDP广播到所有节点
- oracle - 在 Cypress 中使用 oracle visual builder 的 Oracle jet 组件进行测试
- c# - Amazon EventBridge 规则无法触发 Lambda 函数
- javascript - 如何使用键作为值和值作为内容在 Javascript 中使用数组填充选项?
- html - html输入框在一行中,但第二个文本框不在同一行中