我想在我的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) );
答案 0 :(得分:29)
您想使用与“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);
答案 1 :(得分:1)
我不确定什么是正确的方法,但我不认为使用ref IntPtr来实现功能和结构......
请点击此处获取帮助:C# P/Invoke: Marshalling structures containing function pointers