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

Jam*_*mie 8 .net c++ unmanaged managed wrapper

如标题中所述,我希望我的旧C++库在托管.NET中运行.我想到了两种可能性:

1)我可能尝试使用/ clr编译库并尝试"It Just Works"方法.

2)我可能会将托管包装器写入非托管库.

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

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

你会在那个问题上提出什​​么建议?哪种解决方案能够让我更好地了解生成的代码?

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

干杯

jal*_*alf 6

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

不同之处在于托管C++是微软首次尝试将C++扩展到与.NET协同工作,老实说,它是各种可怕的.

所以他们放弃了,并设计了C++/CLI,效果更好.

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

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

但一般来说,只需添加/ cli开关,将代码编译为C++/CLI,然后添加所需的包装器.没有理由为什么你的代码会神奇地变得更慢或什么.