C++/CLI混合模式不允许文件结构? [英] C++/CLI Mixed Mode does not allow FILE struct?

查看:129
本文介绍了C++/CLI混合模式不允许文件结构?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个旧的Visual Studio C++6.0 DLL,我正试图在托管C++/CLI代码中调用它。

以下是我使用的项目设置:

  1. 为非托管代码添加其他头目录
  2. 为非托管代码添加其他库目录
  3. 指定非托管代码的lib文件名
  4. 将clr选项设置为/clr
  5. 已删除预编译头
  6. 我使用的是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。

您从.NET使用此DLL的唯一希望是编写一个用Visual C++6.0编译的包装器,该包装器公开一个更合理的公共接口。该包装DLL可以从p/Invoke或C++/CLI调用。

这篇关于C++/CLI混合模式不允许文件结构?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆