HWNDを受け入れるdllがあります(dllのコード)。
void VideoCapture::SetVideoWindow(HWND VidWind)
{
VideoWindow = VidWind;
}
参照にdllを追加して、サンプルのc#.netアプリケーションで上記のdllを呼び出しています。c#.netにPanelのフォームがありますが、そのパネルをdllに渡すことはできますか?私はc#で以下のようなコードを与えました
VidCapWrapper.ManagedVideoCapture cc = new VidCapWrapper.ManagedVideoCapture();
cc.SetVideoWindow( panel1);
次のようなエラーが発生します:'エラー2'VidCapWrapper.ManagedVideoCapture.SetVideoWindow(HWND__ )'に最適なオーバーロードされたメソッドには、無効な引数がいくつかありますD:\ DirectShow_Capture_GUI \ DirectShow_Capture_GUI \ Form1.cs 44 13 DirectShow_Capture_GUIエラー3引数1:変換できません'System.Windows.Forms.Panel'から'HWND__ 'へD:\ DirectShow_Capture_GUI \ DirectShow_Capture_GUI \ Form1.cs 44 32 DirectShow_Capture_GUI`
パネルをdllに渡す方法を教えてもらえますか(どの例でもよいでしょう)。(申し訳ありませんが、私は.netを初めて使用しますが、統合されたWebカメラなどの利用可能なデバイスを表示するサンプルアプリを作成しようとしています...その後、c#.netフォームパネルにプレビューを表示します)
編集:@Blachshmaと@Hans Passantの両方に感謝します。これで、c#Windowsフォームのパネルをc++dllに渡すことができます。
dllの関数を次のように変更しました
void VideoCapture::SetVideoWindow(IntPtr windowHandle)
{
VideoWindow = (HWND)windowHandle.ToPointer();
}
そしてc#ではそれをcc.SetVideoWindow(panel1.Handle);と呼んでいます。