C ++ / CLI自动包装生成器

时间:2012-12-24 13:40:26

标签: .net interop c++-cli

在我们的项目中,我们有大量的本机C ++代码,我们希望从一个用.Net编写的全新UI层重用它。

我想在这个问题上使用C ++ / CLI,我已经看到通过使用瘦托管类包装本机类,有一种非常直接且相当技术性的方法。 我希望能够找到一个自动完成这项任务的工具,因为在我看来,如果没有很多必要的“人类”思考,我真的会觉得这是一个技术问题。

有这样的工具使用显式p / invoke - 请参阅http://www.swig.org/Doc1.3/CSharp.html。问题是显式p / invoke更麻烦,性能效率更低。

有没有人熟悉这种工具?

这种工具还没有固有的原因吗?

2 个答案:

答案 0 :(得分:7)

p / invoke效率较低的原因是因为它必须是任何函数的非常通用的接口,只知道签名。你假设的包装器生成器没有更好的表现。

另一方面,编写自定义包装类的开发人员有更多关于一起使用的函数的信息等等,因此可以避免很多缓慢和不必要的转换,例如通过将值直接存储在包装器,而不是将它们转换为某种.NET友好格式。

所以这并不是说这样的工具是不可能的,它只有很少甚至没有好处。如果你关心性能,你可以编写自己的包装器,包括生命周期管理智能指针等。

当然,p / invoke只提供对裸函数的访问。这就是SWiG应该有用的地方,通过裸导出函数公开任何C ++类接口。

我确实在一个可能正在寻找的工具上找到了一个潜在客户,虽然听起来非常狭窄:

答案 1 :(得分:1)

显式p / invoke不是必需的。这真的取决于。以下链接包含您可能有兴趣阅读的其他信息。正如他们在特定示例中所经历的那样,具有抑制安全性的P / Invoke比调用本机DLL的任何其他方法(包括C ++ / CLI)更快。

http://rogue-modron.blogspot.com/2011/11/invoking-native.html

http://ybeernet.blogspot.com/2011/03/techniques-of-calling-unmanaged-code.html

我们有一个您可能有兴趣使用的工具。它是C ++ DLL的C#包装器生成器。仅支持VS编译的C ++ DLL。

使用该工具,您可以直接从DLL文件和C ++头文件生成C#包装器库。它生成一个包含所有C#类文件的Visual Studio项目。支持所有标准c ++类,模板类和您自己的类。您不必编写一行代码。

请阅读以下链接的详细信息。

C#/.NET PInvoke Interop SDK

(我是该工具的作者)