C++/CLI自动包装生成器 我们的项目中有大量的本地C++代码,我们希望从一个全新的UI层中重用,这是在.NET中编写的。

C++/CLI自动包装生成器 我们的项目中有大量的本地C++代码,我们希望从一个全新的UI层中重用,这是在.NET中编写的。,.net,interop,c++-cli,.net,Interop,C++ Cli,我想使用C++/CLI来解决这个问题,我已经看到有一种非常直接而且技术性很强的方法可以做到这一点,即用瘦托管类包装本机类。 我希望能够找到一个工具,自动完成这项任务,因为在我看来,这确实是一个技术问题,不需要太多的“人类”思维 有这样的工具,它使用显式的p/invoke来实现这一点-请参阅。问题是显式p/invoke更麻烦,性能也更差 有没有人熟悉这种工具 这样的工具还不可用,有什么内在原因吗?p/invoke效率较低的原因是,它必须是任何函数的一个非常通用的接口,只知道签名。假设的包装器生成器

我想使用C++/CLI来解决这个问题,我已经看到有一种非常直接而且技术性很强的方法可以做到这一点,即用瘦托管类包装本机类。 我希望能够找到一个工具,自动完成这项任务,因为在我看来,这确实是一个技术问题,不需要太多的“人类”思维

有这样的工具,它使用显式的p/invoke来实现这一点-请参阅。问题是显式p/invoke更麻烦,性能也更差

有没有人熟悉这种工具


这样的工具还不可用,有什么内在原因吗?

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

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

所以,这并不是说这样的工具是不可能的,它几乎没有什么好处。如果您关心性能,您可以编写自己的包装器,包括生命周期管理智能指针等

当然,p/invoke只提供对裸函数的访问。这就是SWIG应该有帮助的地方,通过裸露的函数公开任何C++类接口。 我确实在一个工具上找到了一条线索,这可能是您正在寻找的,尽管它的焦点听起来很窄:

  • 示例输出:

显式p/invoke并不一定是坏的。这要看情况而定。以下链接包含您可能感兴趣阅读的其他信息。正如他们在具体示例中所经历的那样,具有抑制安全性的P/Invoke比任何其他调用本机DLL的方法(包括C++/CLI)都要快

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

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

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


(我是该工具的作者)

尝试安装。。。没有注册就不能测试。网站上没有关于许可证费用的信息:-(@Beachwalker我们很抱歉您在安装过程中遇到问题。安装过程实际上只要求提供任何非一次性电子邮件地址,以便向您发送激活码。任何来自yahoo、hotmail、gmail的电子邮件都可以。至于许可费,如果您愿意,我们将很乐意向您发送所有定价和许可文件u在我们的网站上联系我们。我们正在使XNETOP成为C++与.NET世界之间的一个桥梁,这意味着它还可以为任何.NET组件创建C++包装器,除了为本地C++ DLL创建C语言包装器。希望您理解。@ XeNoop--您所陈述的显然不是真的。我已经尝试安装您的工具,它确实如此。es不接受基于网络的电子邮件,因此无法在独立项目中试用。@Flot2011,我在写它时说的是真的,我写它已经快3年了。我们现在已经改变了政策,只接受非免费电子邮件帐户。gmail、yahoo、hotmail等免费电子邮件帐户不再被接受。我对任何不同意的情况感到抱歉nience.告诉我几乎没有什么好处。我现在正在编写一个C++/CLI包装程序,刚刚花了一个小时来复制和粘贴枚举类型,并将
LONGLONG
更改为
Int64
LPWSTR
转换为
String^
,等等。。。