本文介绍了C++/CLI混合模式不允许文件结构?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个旧的Visual Studio C++6.0 DLL,我正试图在托管C++/CLI代码中调用它。
以下是我使用的项目设置:
- 为非托管代码添加其他头目录
- 为非托管代码添加其他库目录
- 指定非托管代码的lib文件名
- 将clr选项设置为/clr
- 已删除预编译头
- 我使用的是VS2012,所以我尝试将工具降低到VS2008 我刚刚在托管C++/CLI代码中添加了非托管代码的主头。
问题是它一直在结构定义中得到C2143错误。
代码如下
// logs struct
typedef struct FilesLog {
FILE *fpSender ; // <- Error in this line
FILE *fpReceiver ; // <- Error in this line
int SendCount , ReceiveCount ;
} FilesLog_t ;
它在文件行上获取C2143,也在类定义内的另一个文件行中获取。(这意味着错误不仅仅发生在结构上)
我已尝试混合和匹配项目设置,但仍不起作用。有什么想法吗?
下面是注释中建议的整个令牌错误。根据我的理解,这意味着它不能识别文件,这就是为什么它说它在*之前需要一个分号。
error C2143: syntax error : missing ';' before '*'
推荐答案
除了您收到的编译器错误外,您正在尝试的内容永远不会起作用。
FILE*
与C++运行时的内部数据结构相关联。DLL将只接受来自它自己的Visual C++6.0运行时的FILE*
值,可以将其视为FILEVC6MD*
。如果您在C++/CLI DLL中使用fopen
,您将从编译它所用的Visual C++版本中获得FILE*
,您应该将其视为FILEVC9MD*
(当使用Visual Studio 2008工具进行编译时)。它是完全不同的数据类型。它们一点也不相容。
一般情况下,在DLL的公共API中包含FILE*
不是一个好主意。只有在使用/MD
编译为运行时库使用共享DLL的情况下,才能使用现有的Visual C++6.0 DLL,然后只能由使用相同运行时库的调用方完成,这意味着要么是Visual C++6.0,要么是mingw。这就排除了C++/CLI。
这篇关于C++/CLI混合模式不允许文件结构?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!