从c++访问c# DLL的正确模式是什么?

本文关键字:模式 是什么 c++ 访问 DLL | 更新日期: 2023-09-27 18:16:39

我通常在Android/Java上工作,但现在我在Windows Phone 8.1上工作。我在库中有c++代码,需要能够访问提供的c#汇编DLL中的功能。

c# DLL有一个接口,需要实现它来接收来自DLL的回调。

我试过了:

  1. 我尝试使用Windows运行时组件来包装DLL,但随后它抱怨该接口不能与Windows运行时组件一起使用。
  2. 我可以将DLL包装在一堆c#代码中,并在其中提供一个接口来转发从DLL到任何实现(c++)的任何回调,但c++代码不希望将命名空间识别为现有的命名空间。

缺失的部分是什么?

从c++访问c# DLL的正确模式是什么?

我能够使用c# Windows运行时组件访问DLL。来自DLL的回调接口是用c#实现的,并且会回调到c# Windows运行时组件来完成工作。

要做的工作是调用一个c++ Windows运行时组件,该组件将与c# Windows运行时组件进行通信。然后,c++ Windows运行时组件可以成为我们拥有的c++代码库的门户。

c++/c#的互操作性可以通过两种方式实现:通过Win32 dll或通过COM组件。

如果你打算使用Win32方法,你将不得不提供所有CLR类型的元数据,然后托管编译器将元数据编译到程序集中,JIT编译器将构建执行c#/Win32转换的存根。

如果你打算使用COM组件,你将不得不使用运行时可调用包装器,它将负责实例化,类型导航,错误处理和内存管理。

关于RCW的更多信息在这里:http://msdn.microsoft.com/en-us/library/8bwh56xe(v=vs.110).aspx