首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ /CLI自动包装生成器

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

Stack Overflow用户
提问于 2012-12-24 21:40:26
回答 2查看 10.6K关注 0票数 12

在我们的项目中,我们有大量的原生C++代码,我们希望在用.Net编写的全新UI层中重用这些代码。

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

有这样的工具,它使用显式的p/invoke来实现这一点--参见http://www.swig.org/Doc1.3/CSharp.html。问题是,显式的p/invoke在性能上更麻烦,效率也更低。

有没有人熟悉这样的工具?

这样的工具还不能使用,有没有内在的原因?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-25 10:50:45

p/invoke效率较低的原因是,它必须是任何函数的一个非常通用的接口,只知道签名。您假设的包装器生成器的性能也不会更好。

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

因此,这并不是说这样的工具是不可能的,只是它几乎没有好处。如果您关心性能,您可以编写自己的包装器,并使用生命周期管理智能指针等来完成。

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

我确实在一个工具上找到了一个线索,这可能就是你正在寻找的,尽管它的关注点听起来相当狭窄:

  • http://www.ogre3d.org/addonforums/viewtopic.php?f=8&t=4071
  • example输出:http://extramegablob.googlecode.com/svn/trunk/MOIS/MOIS/include/auto/MOISEffect.h
票数 7
EN

Stack Overflow用户

发布于 2013-04-19 13:28:46

显式的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++动态链接库的C#包装器生成器。仅支持VS编译的C++ DLL。

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

请在下面的链接中阅读详细信息。

C#/.NET PInvoke Interop SDK

(我是该工具的作者)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14022131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档