.net - 从处理器C代码调用.NET应用程序的回调函数

标签 .net c

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

最佳答案

在函数的 C 定义中,回调应表示为函数指针。为了简单起见,我们假设回调返回 void 并且没有参数。

void NativeMethod(void (*pCallback)(void)) { 
  ...
}

一旦调用此代码,C 代码将具有一个简单的函数指针。它可以在需要时调用它,并将转换为 .Net 代码。

在 .Net 方面,我们需要定义函数指针类型的委托(delegate)和用于调用 C 代码的 PInvoke stub 。

delegate void CallbackFunc();

[DllImport("the_native_dll")]
static extern void NativeMethod(
  [MarshalAs(UnmanagedType.FunctionPtr)] CallbackFunc cb)

现在,C# 代码可以使用标准委托(delegate)通过 NativeMethod 函数调用 native 代码

关于.net - 从处理器C代码调用.NET应用程序的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18395257/

相关文章:

c# - 有没有办法从代码隐藏中读取 System.Web.Optimization 内容?

.net - 使用 SmtpClient 和 MailMessage 时如何禁止电子邮件验证

c# - 如何在 C#/IL 中改变盒装值类型(原始或结构)

c - 如何在运行几个子进程后将控制权返回给父进程,而不等待它们退出()?

c - 我试图从正数倒数到零,然后使用负数从零向上数

c - 可变参数函数中的参数如何在堆栈上传递?

c - 指针和值

c# - Windows 7 上的 log4net EventLogAppender 问题

c# - 图形容器如何工作?

c - 管理负载的queque系统