2008-10-08 98 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和解析器。