2

我们有本机 Win32 C++ 代码和一组我们希望从 C++ 代码调用的 C# 程序集。我将我们的选项总结为:

  1. 使用 COM。C# 代码需要使用其他属性(GUID、COMVisible)进行修饰。C# 程序集需要注册 regasm,然后通过 COM 可用于本机 C++ 代码。

  2. 使用 C++/CLI(以前托管的 C++)包装类。可以将 C++ 类添加到本机 C++ 项目中。该类将使用 /clr 编译。本机 C++ 代码将调用 C++/CLI 类,然后再调用 .Net 代码。不涉及 COM。CLR 由 C++/CLI 扩展处理的编组所需的魔法启动。

  3. 在本机 C++ 代码中托管 CLR 的实例。

我将打折选项 3,因为除了我们不再需要包装类之外,我看不到选项 2 的好处。所以问题是,选项 1 与选项 2 的优缺点是什么?

提前致谢。

4

3 回答 3

3

选项 2 将表现最好,并且是最无缝和可维护的,IMO。

我发现的选项 1 确实没有任何优势。使用 C++/CLI 似乎运行得更好,工作更快,而且总体上更简单。

顺便说一句,您也可以直接使用 C# 程序集而无需包装类。这确实需要编译任何想要与 /CLR 一起使用的文件,但它工作得很好。

于 2009-07-01T15:25:36.723 回答
1

使用选项 2,您还可以通过一种非常直接的方式将整个应用程序随后转换为 C++/CLI,以避免您将获得托管/非托管转换。转换可能是一个问题,具体取决于您如何使用引用的程序集,即获得性能影响。

到目前为止,我只对 C++/CLI 有过积极的体验,可以推荐走这条路。

于 2009-07-02T05:24:18.847 回答
1

对于选项 1,您的主要专业人员将不必编写可能会根据您的项目变得多毛的包装类。

对于选项 2,您不必修改托管库以促进非托管使用,这有时不是一个选项。

对我来说,它归结为您想要更改代码的位置。

于 2009-07-01T15:30:36.540 回答