13

C#コードでこの関数にアクセスしたいのですが、これは可能ですか?したがって、最終的にc ++コードは私の関数を呼び出し、「sFrameofData」と呼ばれる構造体も適用します。

C ++コード:

//The user supplied function will be called whenever a frame of data arrives.
DLL int Cortex_SetDataHandlerFunc(void (*MyFunction)(sFrameOfData* pFrameOfData));

これはおそらく機能しますか?

C#コード:

[DllImport("Cortex_SDK.dll")]
public extern static int Cortex_SetDataHandlerFunc(ref IntPtr function(ref IntPtr pFrameOfData) );
4

2 に答える 2

33

「MyFunction」C++ メソッドのメソッド シグネチャに一致するデリゲートを使用したいと考えています。

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void MyFunctionDelegate(IntPtr frame);

[DllImport("Cortex_SDK.dll")]
public extern static int Cortex_SetDataHandlerFunc(
[MarshalAs(UnmanagedType.FunctionPtr)]MyFunctionDelegate functionCallback);
于 2011-03-08T16:48:20.730 に答える
1

何が適切な方法かはわかりませんが、関数と構造体に ref IntPtr を使用するには十分ではないと思います...

ヘルプについては、こちらを参照してください: C# P/Invoke: 関数ポインタを含む構造体のマーシャリング

于 2011-03-08T16:50:51.497 に答える