我的主板上有.NET应用程序和C代码。 .NET应用程序将以回调函数作为参数调用C函数(要监视按钮是否按下?)并结束其任务。我的C应用程序将观看按钮,当按下按钮时,必须调用回调函数(.NET)。 如何从我的C代码中调用回调函数(.NET)?
答案 0 :(得分:1)
在函数的C定义中,回调应表示为函数指针。为简单起见,我们假设回调返回void
并且没有参数。
void NativeMethod(void (*pCallback)(void)) {
...
}
调用此代码后,C代码将具有一个简单的函数指针。它可以在需要时调用它,它将转换为.Net代码。
在.Net方面,我们需要定义函数指针类型的委托和用于调用C代码的PInvoke存根。
delegate void CallbackFunc();
[DllImport("the_native_dll")]
static extern void NativeMethod(
[MarshalAs(UnmanagedType.FunctionPtr)] CallbackFunc cb)
现在,C#代码可以使用标准委托通过NativeMethod
函数调用本机代码