2008-10-08 96 views

回答

22

我们没有用于C++/CLI的编译器,它对于非常小的用户群来说是一个非常大的工作。还要考虑到C++/CLI规范本质上是有缺陷的并且是不可移植的,所以能够编译它在一般情况下不会有太大帮助。

可以编译使用MS .NET编译器和在单用这些限制运行:

  1. 与任何系统上的单声道运行,如果C++/CLI应用程序是纯管理(但然后,为什么要使用这样的一个丑陋的语言,而不是C#?)

  2. 在其他情况下在Windows上使用mono运行(C++/CLI应用程序通常不可移植并包含本机代码,因此它们只能在Windows上运行,并且对单声道的主要目标是在Linux上运行托管程序)

请注意,MS本身最终会放弃C++/CLI,所以不要投入太多,并切换到C#。

+20

“MS本身最终会丢弃C++/CLI” 你能解释一下为什么你这么想吗?这对我来说似乎不太可能。 – 2008-10-11 12:43:21

+8

托管C++已经不受支持并停止使用,不需要很长时间就可以这样做。现在去计算一两年前与C++/CLI相关的新闻,博客文章,公告。将点连接。 – lupus 2008-10-12 08:59:57

+0

计算与C++(来自Microsoft)相关的新闻项目,博客文章,公告,并与C#,ASP.NET等进行比较。这是否意味着MS将删除C++? – 2008-10-12 23:23:34

0

go here并在“缺少语言”下查找。但只是因为你不能编译并不意味着你不能运行。您可以使用框架sdk编译您的C++代码并尝试使用mono运行它。无论如何值得尝试。

9

Mono能够运行由C++/CLI生成的“纯”程序集,即。不包含任何本机代码。 C++编译器支持的各种/ clr选项记录在MSDN中。

目前不支持编译C++/CLI。已经有一些修改GCC发射IL的工作,但它并不完整(并且看起来不活跃)。看到这个article

我不相信微软记录在程序集中包含本地代码的格式,所以支持这种方法很困难。

1

不,C++/CLI是在Mono下的not supported,可能永远不会,尽管使用MS编译器生成纯粹的IL将允许完全托管的代码在Mono下运行。

作为一种互操作语言,C++/CLI的存在使得调用非托管代码成为可能。另一种替代方法是使用P/Invoke,即使有问题,它也是well-documented

2

在Mono 2.4上,您可以运行在C++/CLI下编译的C++/CLI应用程序。带有/ clr:安全开关的Visual Studio 2008。

17

Mono最近在CXXI的C++互操作性方面取得了一些很大的进展。

From this posting,短故事是,新CXXI技术允许C#/ NET开发者:

  • 轻松消耗从C#或任何其他现有的C++类。NET 语言
  • 实例化C++从C#
  • 调用C++用C从C#代码方法++的类的对象
  • 调用C++内联从C#代码的方法(前提是您的库编译-fkeep内联函数或您提供替代 库)
  • 子类C++从与C#方法C#
  • 覆盖C++方法的类
  • 揭露的C++类或混合的C++/C#类的实例于C#代码和C++,好像他们是本机代码。

CXXI是谷歌夏季法典的两个夏季工作的结果,旨在提高Mono与C++语言的互操作性。

7

这是一个非常古老的问题,几年后会有非常有趣的答案。
截至目前tritao/CppSharpmono/cxxi最积极开发叉子将其移回mono库在2013年,因为正在积极地开发,目前树可以在mono/CppSharp

他们的自述是here和被发现为 '发生器' 的特点是:

  • 多个后端:C++/CLI和C#P /调用
  • 多的ABI:安腾,MS,ARM,iOS和iOS64
  • 个多平台:Windows,Mac OS X和Linux
  • 多重继承的支持
  • 通过用户易于扩展的语义传递
  • 为STL工作进行中支持
  • 虚拟表覆盖的支持(仅适用于C++/CLI)
  • 强类型的自定义API和类型映射

它还配备了很多很酷的东西,AST和解析器。