创建本机DLL

时间:2009-08-19 05:54:57

标签: c# c++ interop native managed

我是C#程序员,不介绍Native。 我有一个原生DLL,&我将在我的项目中使用它,但是因为某些类型在托管代码中是不切实际的。 我将在Native(C ++)中准备一个DLL,我想在事件发生时,然后知道我的托管代码;我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

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

另一种选择是将您的Native DLL编写为COM DLL并从那里引发COM Dispatch Events。通过创建此COM DLL的Interop,您可以直接在C#DLL中捕获事件。但是,如果您不熟悉COM编程,这条路线的学习曲线非常陡峭。

答案 1 :(得分:1)

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