PInvoke C#:Function将指针作为参数

时间:2011-03-08 16:41:17

标签: c# pinvoke param

我想在我的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) );

2 个答案:

答案 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