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混合模式不允许文件结构?
基础教程推荐
- 全局 ASAX - 获取服务器名称 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01
- 如何动态获取文本框中datagridview列的总和 2022-01-01
