2009-04-01 4 views
8

C++/CLIは非常に強力な言語です。これは、管理コードと非管理コードをシームレスに組み合わせることができる唯一のCLR言語です。この言語を使用しているソフトウェア開発者は何人ですか?どのようなプロジェクトで使っていますか?それは、レガシーコードまたは元のソフトウェアの作成に適合していますか?古いManaged C++と新しいC++/CLIを比較できますか?現在の品質とC++/CLIの将来についてどう思いますか?Microsoft C++/CLIを使用している経験を記述してください。

答えて

5

私はシミュレーションプロジェクトにC++/CLIを使用しました。実際の計算を行う私のシミュレーションエンジンは、C++で書かれた既存のコードベースでした。私はGUIのフロントエンドを必要としました。これはC++/CLIでうまくコード化されています。

私の見解では、文法上のぎこちなさにもかかわらず、C#のように簡単にコーディングすることができます。つまり、構文は、Microsoftが以前に思いついたManaged Extensionsよりもはるかに単純です。

C++/CLIの最も強力な機能の1つは、既存のネイティブC++コードを単にMSILに再コンパイルする機能だけです。もちろん、しゃっくりがあるかもしれませんが、ほとんどのアプリケーションにとって問題のない練習でなければなりません。

C++/CLIの適合性については、C++との相互運用性のための厳密な言語として残されていると思います。全く新しいアプリケーションを書いているのなら、C#/ CLIをC#で選ぶ理由はまったくありません。私が言ったように、で、後者より少し厄介です。

3

C++/CLIは、CLR into FreeSWITCHをもたらすために非常に簡単でした。ホスティングAPIやMonoを使用するよりもずっと簡単です。

私がマネージC++を使用する前の最後の時間は2003年前後でした。多少の痛みがあり、シームレスに動作しないことを覚えています。

+1

私はクロスプラットフォームアプリケーションで管理コードと非管理コードを混在させるのにC++/CLI機能を使用するのは難しいですか?または、Windows版でのみ可能ですか? – macropas

+0

最後に確認しましたが、Monoはそれをサポートしていません。 – MichaelGG

8

私はこれを使用して、マネージコードとネイティブコードの間の統合の薄い層を作成しました。それはすべてだ。

最もよく知られているのは、非管理コードをシームレスに掘り下げ、プロセス全体で書き込み可能なメモリを変更(または誤って破損)する能力です。これは一般的なプログラミングでは利点がありませんが、 、 それは素晴らしい。しかし、私はそれがますます必要になると思う。/pureフラグを付けてC++/CLIをコンパイルできますが、まったく新しい言語になります。

しかし他の二つの大きなユニークな機能があります。便利な何かを

  • デストラクタ。 C#では、デストラクタはファイナライザです。 C++では、それは決定論的に呼ばれる適切なデストラクタです。これは、C++/CLIがIDisposableで作業するための最も完全なインフラストラクチャを持っていることを意味します。 C#は(ステートメントを使用してを使用して)クライアントに役立ちますが、C++/CLIだけでも実装者の手助けをします。おそらく一日C#がこの機能を吸収することを期待しています。

  • ダックタイピングテンプレート。CLIジェネリックと一緒に使用できます。 C#で非常に便利なもう一つのことですが、歴史的な手荷物がなくても、よりシームレスに作ることができます。

しかし、C#が、私は一般的にC++/CLIを使用するように誘惑いないよ、最後の二つのことのない十分です。

+1

C++はGCをより多く制御でき、すぐにメモリを解放することはできますか? – macropas

+2

C++/CLIでは、従来のC++と同様にメモリを割り当て、解放することができ、C++デストラクタはDispose()としてCLRに自動的に公開されます。つまり、.NETオブジェクトで実際のC++ RAIIを実行できます。しかし、あなたはGCをもっとコントロールすることはできません。どこで使われているのか、どこにはないのかを指定するだけです。 – OregonGhost

+1

@macropas - OregonGhostは正しいです。 GCによってCLRのGCを意味する場合、C++/CLIは他のどの言語よりもそれ以上の制御をしません。 –

4

私たちはC++/CLIを広く使用しています。私たちは古くなったMFCアプリケーションを.Net時代にドラッグするために使用しました。これで、C#でほとんどの新機能を作成し、C++/CLIを使用して従来のMFCコードと統合し、ネイティブクラスをラップし、 。以前のアセンブリでは、C++/CLIで新しい機能を記述しています。

「マネージドC++」の経験はありませんが、C++/CLIはMFCやVisual C++に比べて使い勝手が良いです。それは管理されたC++またはVisual C++よりもはるかに洗練された構文を持っており、私たちはそれに遅れをとらないようにジュニアdevsを取得することに全く問題はありませんでした。

ネイティブオブジェクトをマネージクラスのメソッドに渡すときのように、C++/CLIでは面白い動作がほとんどありません。ネイティブオブジェクト(開発者には見えません)の周りに薄いマネージラッパーを置くだけですそのシムは控えめにプライベートなので、外から呼び出すことはできません。いつものようにこれを回避する方法がありますが、それは早いうちに数回私たちを捕まえました。

リファクタリングサポート(受け入れ可能)にはVisual Assist X、マネージドクラス用のユニットテスト用のMbUnit/Gallio、モックフレームワーク用のNMockまたはRhinoMockを使用します。

全体的に言えば、この言語は当社の製品を救ったと私は、開発の世界で起こっているすべての新しいエキサイティングなものを利用できると言います。 Visual C++/MFCを単独で使用していた場合は、開発者を募集するのが難しく、COTSの選択肢が.Netを使用するよりはるかに制限されています。

関連する問題