1

我是 C# 程序员,不介绍 Native。我有一个本机 DLL,我将在我的项目中使用它,但导致某些类型在托管代码中不可行。我将在 Native(C++) 中准备一个 DLL,并且我希望在发生事件时知道我的托管代码;我怎样才能做到这一点?

4

2 回答 2

1

如果你想在你的 C# 代码中处理 Native 事件,那么我认为你最好的办法是编写一个 C++/CLI DLL,它可以作为 C++ Native DLL 和 C# DLL 之间的中间层。这样,您可以处理中间库中的事件并将它们传递给托管 DLL 再次捕获。

另一种选择是将您的本机 DLL 编写为 COM DLL 并从那里引发 COM 调度事件。通过创建此 COM DLL 的互操作,您可以直接在 C# DLL 中捕获事件。但是,如果您是 COM 编程新手,那么这条路线的学习曲线非常陡峭。

于 2009-08-19T06:22:20.980 回答
1

如果您的本机 DLL 的 API 允许您将函数指针注册为要在引发事件时调用的回调,您可以将普通 C# 委托编组为函数指针 ( Marshal.GetFunctionPointerForDelegate),并通过 P/Invoke 注册托管委托。

于 2009-08-19T06:43:43.653 回答