C ++调用C#选项

时间:2009-07-01 15:07:29

标签: c# com c++-cli com-interop managed-c++

我们有原生的Win32 C ++代码和一组C#程序集,我们希望从C ++代码中调用它们。我总结了我们的选择:

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

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

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

  4. 我打算对选项3进行折扣,因为除了我们不需要包装类之外,我没有看到超过选项2的好处。所以问题是,选项1与选项2的优缺点是什么?

    提前致谢。

3 个答案:

答案 0 :(得分:3)

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

我找到的选项1确实没有优势。使用C ++ / CLI似乎功能更好,工作更快,并且通常更简单。

你也可以直接使用C#程序集而不需要包装类。这需要编译任何想要将它与/ CLR一起使用的文件,但它运行良好。

答案 1 :(得分:1)

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

对于选项2,您不必修改托管库以方便非托管使用,这有时不是一种选择。

对我而言,它取决于您希望更改代码的位置。

答案 2 :(得分:1)

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

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