0

我的板上有 .NET 应用程序和 C 代码。.NET 应用程序将以回调函数作为参数调用 C 函数(监视按钮是否按下?)并结束其任务。我的 C 应用程序将监视按钮,当按下按钮时,必须调用回调函数(.NET)。如何从我的 C 代码调用该回调函数(.NET)?

4

1 回答 1

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使用标准委托通过函数调用本机代码

于 2013-08-23T05:27:54.853 回答