【发布时间】:2009-08-19 05:54:57
【问题描述】:
我是 C# 程序员,不介绍 Native。 我有一个本机 DLL,我将在我的项目中使用它,但导致某些类型在托管代码中不可行。 我将在 Native(C++) 中准备一个 DLL,并且我希望在发生事件时知道我的托管代码;我该怎么做?
【问题讨论】:
标签: c# c++ interop native managed
我是 C# 程序员,不介绍 Native。 我有一个本机 DLL,我将在我的项目中使用它,但导致某些类型在托管代码中不可行。 我将在 Native(C++) 中准备一个 DLL,并且我希望在发生事件时知道我的托管代码;我该怎么做?
【问题讨论】:
标签: c# c++ interop native managed
如果您的本地 DLL 的 API 允许您将函数指针注册为在引发事件时调用的回调,您可以将普通 C# 委托编组为函数指针 (Marshal.GetFunctionPointerForDelegate) 并注册托管委托通过 P/Invoke。
【讨论】:
如果你想在你的 C# 代码中处理 Native 事件,那么我认为你最好的办法是编写一个 C++/CLI DLL,它可以作为 C++ Native DLL 和 C# DLL 之间的中间层。这样您就可以处理中间库中的事件并将它们传递给托管 DLL 再次捕获。
另一种选择是将您的本机 DLL 编写为 COM DLL 并从那里引发 COM 调度事件。通过创建此 COM DLL 的互操作,您可以直接在 C# DLL 中捕获事件。但如果您是 COM 编程新手,这条路线的学习曲线会非常陡峭。
【讨论】: