Dot-Net
用 C++/CLI 包裝非託管 C++ - 一種正確的方法
如標題所述,我想讓我的舊 C++ 庫在託管 .NET 中工作。我想到了兩種可能:
1)我可能會嘗試使用 /clr 編譯庫並嘗試“It Just Works”的方法。
2)我可能會為非託管庫編寫一個託管包裝器。
首先,我想讓我的圖書館在非託管環境中快速執行。因此,我不確定第一種方法是否會導致性能大幅下降。但是,實施起來似乎更快(不是一個正確的詞:-))(假設它對我有用)。
另一方面,我想到了在編寫包裝器時可能出現的一些問題(例如,如何包裝一些 STL 集合(
vector例如)?)一個合理的方法(例如MyUnmanagedClass,MyManagedClass在同一個項目中,第二個包裝另一個)?你會在那個問題中提出什麼建議?哪種解決方案可以讓我獲得更好的結果程式碼性能?
提前感謝您的任何建議和線索!
乾杯
首先,忘記託管 C++。使用 C++/CLI。
不同之處在於 Managed C++ 是微軟首次嘗試將 C++ 擴展為與 .NET 一起使用,老實說,這真是太可怕了。
所以他們放棄了,轉而設計了 C++/CLI,效果更好。
其次,如果您將其編譯為 C++/CLI,則有效的 C++ 程式碼應該可以正常工作,因此這似乎是一種顯而易見的方法。
當然,為了將 C++ 類型公開給 .NET 程序集,無論哪種方式,您都必須編寫一些包裝器。對於 STL 類型,您可以查看 Microsoft 的STL/CLR庫。
但一般來說,只需添加 /cli 開關,將您的程式碼編譯為 C++/CLI,然後添加您需要的包裝器。您的程式碼沒有理由會神奇地變慢或發生任何事情。