-1

以下の例を見つけてください

void ExitLibrary(); // C++ function

以下のようにC#に変換できます

[DllImport("VisualFOD.dll", CharSet = CharSet.Ansi)]
public static extern void ExitLibrary();

このメソッドは、ライブ キャプチャを開始するために使用されます

bool StartLive(DShowLib::Grabber* f_Grabber, HDC f_hHdc, RECT f_WindowRect);

このメソッドは、ライブ キャプチャを開始するために使用されます

[DllImport("TIS_UDSHL09_vc71.dll", CharSet = CharSet.Ansi)]
public static extern bool StartLive(IntPtr f_Grabber, IntPtr f_hHdc, Rectangle f_WindowRect);

2 番目のステートメント C++ 関数で述べたように、実際のクラス DShowLib::Grabber にアクセスできません。

ライブラリクラス名を宣言して取得する方法はありますか?

この dll は、C# 環境への参照として含める COM/.Net dll ではありません。

4

3 に答える 3

0

C#/C++ の相互運用を容易にするための多くの試みがありましたが、Microsoft の管理された C++ がおそらく最高です (ただし、C++ 標準の一部ではありません)。

別の有望なオプションは、Mono の CXI です。

http://tirania.org/blog/archive/2011/Dec-19.html

これは、標準に準拠したアプローチを提供します。

まだハッキングが必要ですが (おそらく Google Summer of Code 2012)、最終的には Visual C++ と Windows をサポートするはずです。

于 2012-04-06T08:52:52.980 に答える
0

はい。PInvoke を介して独自の C# コードから直接 C++ クラス オブジェクトをインスタンス化してアクセスできますが、これは非常に複雑で多くの作業が必要です。ここにアクセスして、C++ PInvoke Interop SDK で何ができるかを読んでください。

http://www.xinterop.com/index.php/2013/04/13/introduction-to-c-pinvoke-interop-sdk/

(商用ソフトですが、私は作者です)

于 2013-04-13T05:19:42.073 に答える