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混合模式不允许文件结构?
- C# 中多线程网络服务器的模式 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 如何用自己压缩一个 IEnumerable 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- 输入按键事件处理程序 2022-01-01
