C++/CLI Mixed Mode does not allow FILE struct?(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混合模式不允许文件结构?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C++/CLI混合模式不允许文件结构?
基础教程推荐
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- WPF 模态进度窗口 2022-01-01
- C# 从 List<List<int>> 中删除重 2022-01-01
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
