34

Mono .NET は C++ / CLI をサポートしてコンパイルしますか?

そうでない場合、彼らがそれをサポートする計画があるかどうか知っていますか?

4

7 に答える 7

26

私たちは C++/CLI 用のコンパイラを持っていません。非常に小さなユーザーベースにとっては非常に大きな仕事になるでしょう。また、C++/CLI 仕様には本質的に欠陥があり、移植性がないことも考慮してください。そのため、コンパイルできても、一般的なケースではあまり役に立ちません。

MS .NET コンパイラを使用してコンパイルし、次の制限付きで mono で実行できます。

  1. C++/CLI アプリが純粋に管理されている場合、どのシステムでも mono で実行できます (しかし、なぜ C# ではなく、このような醜い言語を使用するのでしょうか?)

  2. それ以外の場合は、Windows で mono を使用して実行します (C++/CLI アプリは一般に移植性がなく、ネイティブ コードが含まれているため、Windows でのみ実行でき、Linux でマネージド プログラムを実行するという mono の主な目的には興味がありません)。

MS 自体は最終的に C++/CLI を廃止することに注意してください。

于 2008-10-11T11:13:04.490 に答える
17

Mono は最近、 CXIでの C++ 相互運用性に関してかなり大きな進歩を遂げました。

この投稿から、短い話として、新しい CXI テクノロジにより、C#/.NET 開発者は次のことができるようになります。

  • C# またはその他の .NET 言語から既存の C++ クラスを簡単に使用
  • C# から C++ オブジェクトをインスタンス化する
  • C# コードから C++ クラスの C++ メソッドを呼び出す
  • C# コードから C++ インライン メソッドを呼び出す (ライブラリが -fkeep-inline-functions でコンパイルされているか、サロゲート ライブラリを提供している場合)
  • C# から C++ クラスをサブクラス化する
  • C# メソッドで C++ メソッドをオーバーライドする
  • C++ クラスまたは混合 C++/C# クラスのインスタンスを、ネイティブ コードであるかのように、C# コードと C++ の両方に公開します。

CXI は、Mono と C++ 言語との相互運用性を改善するために、Google の Summer of Code からの 2 つの夏の作業の結果です。

于 2012-01-29T10:25:46.980 に答える
11

Monoは、C ++/CLIによって生成された「純粋な」アセンブリを実行できます。ネイティブコードを含まないものC++コンパイラでサポートされているさまざまな/clrオプションは、MSDNに記載されています。

現在、C ++/CLIのコンパイルはサポートされていません。ILを放出するようにGCCを変更する作業がいくつかありましたが、完全ではありません(アクティブに見えません)。この記事を参照してください。

Microsoftがアセンブリにネイティブコードを含めるための形式を文書化しているとは思わないので、これをサポートすることは困難です。

于 2008-10-08T15:43:34.490 に答える
10

これは非常に古い質問で、数年後に非常に興味深い回答が得られます。
現在、tritao/CppSharpはmono/cxxiの最も活発に開発されているフォークであり、2013 年にmonoリポジトリに戻され、それ以来活発に開発されています。現在のツリーはmono/CppSharpにあります。

彼らの readme はここにあり、「ジェネレーター」の機能は次のとおりです。

  • 複数のバックエンド: C++/CLI および C# P/Invoke
  • 複数の ABI: Itanium、MS、ARM、iOS、iOS64
  • 複数のプラットフォーム: Windows、OS X、Linux
  • 仮想テーブルのオーバーライドのサポート
  • 多重継承のサポート
  • ユーザーパスを介して簡単に拡張可能なセマンティクス
  • STL の進行中のサポート (C++/CLI のみ)
  • 厳密に型指定されたカスタマイズ API と型マップ

また、多くのクールな AST とパーサーも付属しています。

于 2015-07-05T16:57:52.043 に答える
2

いいえ、C++/CLI はMonoではサポートされておらず、今後もサポートされない可能性がありますが、MS コンパイラを使用して純粋な IL を生成すると、完全に管理されたコードを Mono で実行できます。

相互運用言語として C++/CLI が存在し、アンマネージ コードを呼び出すことができます。他の代替手段は、問題はあるものの十分に文書化されている P/Invoke を使用することです。

于 2009-01-26T05:40:48.700 に答える
0

ここに行き、「MissingLanguages」の下を見てください。しかし、コンパイルできないからといって、実行できないという意味ではありません。フレームワークSDKを使用してC++コードをコンパイルし、monoを使用して実行してみることができます。とにかく試す価値があります。

于 2008-10-08T15:41:53.603 に答える