C#とC++の両方で、GUIプログラミングに関する多くのコメントを読みました。また、Microsoftの.NETフレームワークがGUIプログラミングにとって強力であることに気付きました。それでは、C++および.NETフレームワークを使用することは可能ですか?
私が読んだように、C++は強力な言語であり、.NETフレームワークはWindowsでのGUIプログラミングに適しているため、これは素晴らしい組み合わせになると思います。 C#でGUIを記述し、C++で機能を記述することは可能ですか?
はい、以前は Managed C++ と呼ばれていましたが、現在は C++/CLI と呼ばれています。他の3つのバンドルされたマネージ言語であるC#、F#、およびVB.NETからアクセスする場合と同様に、.NET Framework全体(GUI:WinForms、GDI +など)にアクセスできます。
最も柔軟でシンプルなオプション、Unixの世界では一般的ですが、何らかの理由でWindowsでは一般的ではないことを忘れないでください。GUIとロジックを異なるプロセスに分割し、適切な形式のRPCを介して通信します(たとえば、パイプでも作業)。できれば、人間が読めるシンプルなテキストプロトコルを使用してください。
このように、ファンシーなテクノロジーでGUI(またはさまざまなGUI)を実装し、ニーズに適したもの(C++、スクリプトなど)からロジックコンポーネントを構築できます。
私は、Windowsの世界からのモノリシックデザインアプローチのany合理的な利点を認識していません。
これは、数年前、マネージC++の時代に一度行いました。 UManaged DLLにいくつかのビジネスロジックがあり、C#で記述されたウィザードスタイルのGUIに組み込みたいと考えました。これを行うために、Managed C++アセンブリを作成して、Managed GUIアプリの間に配置しましたまた、アンマネージDLLであり、そのアセンブリ内でSystem :: Runtime :: InteropServices :: Marshalを使用して、マネージタイプ(System :: Int32)からアンマネージタイプ(int)に、またはその逆に値を変換します。
Managed C++は非推奨になっているようですが、同じ原則がC++/CLIにも適用される可能性があります。
あんまり。ハイブリッド言語のC++/CLIがありますが、それは相互運用(Microsoftの公式ポリシー)にのみ適しています。 .NETフレームワークの設計方法により、CLRでの実行には実際には適合しない多くの言語セマンティクスがあり、C++はそれらの多くを示しています。
C++/CLIの角度はこれまでのところ多くの回答でカバーされていますが、これを行う別の方法はPInvokeを使用することです。これにより、C#プログラムは、C++で作成されたdllに含まれる関数を呼び出すことができます。 PInvokeの利点は、dllが.Netから呼び出されるという事実にまったくとらわれないことです。これは、ソースコードがないDLLを呼び出すことができ、ソースコードを実行した場合でも、/ clrオプションを使用して再コンパイルする必要がないことを意味します。つまり、このdllを他のC++プログラムやC#プログラムで使用できます。すばらしいC/C++ライブラリがいくつかあります。PInvokeを使用すると、これらを利用できます。 Win32ライブラリは、.Netでは利用できない関数を提供する場合があります。PInvokeを使用すると、それらを使用できます。
PInvokeを使用する際の最も難しい部分の1つは、アンマネージシグネチャをマネージシグネチャに変換する方法を知ることです。しかし、それを助ける cheatsheet があります。
COM(コンポーネントオブジェクトモデル)を介してC#ディルを操作することもできます。 Visual Studio 2010にはマネージC++のインテリセンスがないため、私にとってCOMはマネージC++を使用するよりも優れていました。私の場合、すでに大きなC++アプリケーションがありますが、MFCからWinFormsまたはWPFに移行したいと考えていました。