C#とC ++の両方で、GUIプログラミングに関する多くのコメントを読みました。そして、Microsoftの.NETフレームワークがGUIプログラミングに強力であることに気付きました。C ++と.NETフレームワークを使用することは可能ですか?
私が読んだように、C ++は強力な言語であり、WindowsでのGUIプログラミングには.NETフレームワークが好まれるので、素晴らしい組み合わせになると思います。GUIをC#で作成し、機能をC ++で作成することはできますか?
C#とC ++の両方で、GUIプログラミングに関する多くのコメントを読みました。そして、Microsoftの.NETフレームワークがGUIプログラミングに強力であることに気付きました。C ++と.NETフレームワークを使用することは可能ですか?
私が読んだように、C ++は強力な言語であり、WindowsでのGUIプログラミングには.NETフレームワークが好まれるので、素晴らしい組み合わせになると思います。GUIをC#で作成し、機能をC ++で作成することはできますか?
回答:
はい、以前はManaged C ++として知られており、現在はC ++ / CLIとして知られています。バンドルされている他の3つのマネージ言語、C#、F#、VB.NETからアクセスできるように、.NET Framework全体(GUI:WinForms、GDI +など)にアクセスできます。
マネージドC ++の時代に数年前にこれを行いました。umanaged DLLには、C#で記述されたウィザードスタイルのGUIに組み込みたいビジネスロジックがいくつかありました。これを行うには、マネージC ++アセンブリを作成してマネージ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の利点は、.Netから呼び出されるという事実についてDLLが完全に不可知であることです。つまり、ソースコードがないDLLを呼び出すことができ、ソースコードを作成した場合でも、/ clrオプションを使用して再コンパイルする必要はありません。これは、このdllをC#プログラムだけでなく他のC ++プログラムでも使用できることを意味します。素晴らしいC / C ++ライブラリがいくつかあります:PInvokeを使用すると、これらを利用できます。Win32ライブラリは、.Netで利用できない機能を提供する場合があります。PInvokeを使用すると、それらを使用できます。
PInvokeを使用する最も難しい部分の1つは、アンマネージシグネチャをマネージシグネチャに変換する方法を知ることです。しかし、それを支援するチートシートがあります。