首页 > 解决方案 > 使用 __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

标签: cdeclspec

解决方案


推荐阅读