現在、オーディオストリーマーを構築しており、WPF C#GUI内の関数を使用するCPP .dllを持っています。
プログラムは、次のようなイベントを処理する必要があります
ここまでは、名前付きイベントを使用してこの問題に対処しました。 GUIから.dllへのこれらすべてのイベントを処理するより良い方法は何でしょうか?私が使用するイベントシステム(.dllは、WaitForMultipleObjectsを実行しているスレッドを生成します)、または代わりに名前付きパイプを使用する方が良い/賢い/より有益であるか、それともより良い方法でしょうか?
P/Invokeと呼ばれるテクノロジーを使用して、C#からC/C++に直接呼び出すことができます。 P/Invokeを使用すると、C++関数をC#関数のように見せることができます。
これは、MSDNマガジンのこの記事 の簡単な例です :
BOOL MessageBeep(
UINT uType // beep type
);
[DllImport("User32.dll")]
static extern Boolean MessageBeep(UInt32 beepType);
MessageBeep(0);
さて、それはシンプルでクリーンではありませんか? .NETベースクラスライブラリの多くは、P/InvokeラッパーとC#ファサードを備えたC/C++コードとして実装されます。 .NETチーム自体は、このタイプの相互運用にCOMではなくP/Invokeを使用しており、シンプルで効率的です。
P/Invokeメソッド定義の記述方法を見つけるための優れたリソースは、 pinvoke.net です。