Dot-Net

用 C++/CLI 包裝非託管 C++ - 一種正確的方法

  • January 10, 2011

如標題所述,我想讓我的舊 C++ 庫在託管 .NET 中工作。我想到了兩種可能:

1)我可能會嘗試使用 /clr 編譯庫並嘗試“It Just Works”的方法。

2)我可能會為非託管庫編寫一個託管包裝器。

首先,我想讓我的圖書館在非託管環境中快速執行。因此,我不確定第一種方法是否會導致性能大幅下降。但是,實施起來似乎更快(不是一個正確的詞:-))(假設它對我有用)。

另一方面,我想到了在編寫包裝器時可能出現的一些問題(例如,如何包裝一些 STL 集合(vector例如)?)一個合理的方法(例如MyUnmanagedClassMyManagedClass在同一個項目中,第二個包裝另一個)?

你會在那個問題中提出什麼建議?哪種解決方案可以讓我獲得更好的結果程式碼性能?

提前感謝您的任何建議和線索!

乾杯

首先,忘記託管 C++。使用 C++/CLI。

不同之處在於 Managed C++ 是微軟首次嘗試將 C++ 擴展為與 .NET 一起使用,老實說,這真是太可怕了。

所以他們放棄了,轉而設計了 C++/CLI,效果更好。

其次,如果您將其編譯為 C++/CLI,則有效的 C++ 程式碼應該可以正常工作,因此這似乎是一種顯而易見的方法。

當然,為了將 C++ 類型公開給 .NET 程序集,無論哪種方式,您都必須編寫一些包裝器。對於 STL 類型,您可以查看 Microsoft 的STL/CLR庫。

但一般來說,只需添加 /cli 開關,將您的程式碼編譯為 C++/CLI,然後添加您需要的包裝器。您的程式碼沒有理由會神奇地變慢或發生任何事情。

引用自:https://stackoverflow.com/questions/4642702