我们有原生的Win32 C ++代码和一组C#程序集,我们希望从C ++代码中调用它们。我总结了我们的选择:
使用COM。 C#代码需要使用其他属性(GUID,COMVisible)进行修饰。 C#程序集需要注册regasm,然后通过COM可用于本机C ++代码。
使用C ++ / CLI(以前称为托管C ++)包装类。可以将C ++类添加到本机C ++项目中。该类将使用/ clr编译。本机C ++代码将调用C ++ / CLI类,然后调用.Net代码。没有涉及COM。 CLR由C ++ / CLI扩展处理的编组所需的魔术启动。
在本机C ++代码中托管CLR的实例。
我打算对选项3进行折扣,因为除了我们不需要包装类之外,我没有看到超过选项2的好处。所以问题是,选项1与选项2的优缺点是什么?
提前致谢。
答案 0 :(得分:3)
选项2将表现最佳,并且是最无缝和可维护的IMO。
我找到的选项1确实没有优势。使用C ++ / CLI似乎功能更好,工作更快,并且通常更简单。
你也可以直接使用C#程序集而不需要包装类。这需要编译任何想要将它与/ CLR一起使用的文件,但它运行良好。
答案 1 :(得分:1)
对于选项1,您的主要专业人员不必编写一个包装类,根据您的项目,它可能变得毛茸茸。
对于选项2,您不必修改托管库以方便非托管使用,这有时不是一种选择。
对我而言,它取决于您希望更改代码的位置。
答案 2 :(得分:1)
使用选项2,您还可以通过一种非常直接的方式将整个应用程序转换为C ++ / CLI,以避免您将获得托管/非托管转换。转换可能是一个问题,具体取决于您如何使用引用的程序集,即获得性能。
到目前为止,我对C ++ / CLI只有积极的经验,可以推荐这条路线。