gpt4 book ai didi

.net - 使用 C++/CLI 包装非托管 C++ - 一种正确的方法

转载 作者:可可西里 更新时间:2023-11-01 17:39:45 24 4
gpt4 key购买 nike

如标题所述,我想让我的旧 C++ 库在托管 .NET 中工作。我想到了两种可能:

1) 我可能会尝试使用/clr 编译库并尝试“它只是工作”的方法。

2) 我可能会为非托管库编写一个托管包装器。

首先,我想让我的库快速运行,因为它在非托管环境中。因此,我不确定第一种方法是否会导致性能大幅下降。但是,实现起来似乎更快(不是一个正确的词:-))(假设它对我有用)。

另一方面,我想到在编写包装器时可能出现的一些问题(例如,如何包装一些 STL 集合(例如 vector)?)我想编写一个包装器驻留在与非托管 C++ 所在的项目相同 - 这是一种合理的方法吗(例如 MyUnmanagedClassMyManagedClass 在同一个项目中,第二个包裹另一个)?

在那个问题中你有什么建议?哪种解决方案可以提高生成代码的性能?

提前感谢您提供任何建议和线索!

干杯

最佳答案

首先,忘记托管 C++。使用 C++/CLI。

不同之处在于,Managed C++ 是 Microsoft 首次尝试扩展 C++ 以与 .NET 一起工作,老实说,它非常糟糕。

所以他们放弃了,转而设计了 C++/CLI,效果更好。

其次,如果您将有效的 C++ 代码编译为 C++/CLI,那么它应该正常工作,所以这似乎是显而易见的方法。

当然,为了将您的 C++ 类型公开给 .NET 程序集,您将不得不以任何一种方式编写一些包装器。对于 STL 类型,您可以查看 Microsoft 的 STL/CLR图书馆。

但一般来说,只需添加/cli 开关,将代码编译为 C++/CLI,然后添加所需的包装器。没有理由让您的代码神奇地变慢或发生任何事情。

关于.net - 使用 C++/CLI 包装非托管 C++ - 一种正确的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4642702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com