2010-05-23 70 views
5
  • 我在想,如果我可以使用a library - 用C++編寫 - 在C#
  • 的問題是,圖書館有它自己的結構和類.. 我是否能夠在C#中使用它?

感謝C#和C++庫

編輯
這個庫是開源..
所以如果我的要求,需要一些特別的東西在C++代碼,我就能做到這一點...

回答

3

您不能直接在託管代碼中使用C++類。主要問題是無法使用與C++代碼所使用的相同的內存分配器,並且無法輕鬆地調用構造函數和析構函數。一位微軟員工發佈了a blog post以表明這不是不可能的。我不會推薦這樣做。

COM是一個解決方案,但總是需要一個相當大的重寫和良好的COM編程技巧。 C++/CLI語言中的managed class wrapper通常是最佳解決方案。你可以看看SWIG tool來考慮自動生成那些包裝類。但要小心,這個工具可以輕鬆創建比解決問題更多的問題。

3

有兩種方式,都使用適配器(將C++類映射到.NET類):

  • C++/CLI
  • COM

前者避免了通過COM去,大部分的C++代碼的可能是能夠簡單的編譯與正確的開關。

附加說明:理論上P/Invoke可能是可能的,但所有C++語義都會丟失,您需要手動處理C++對象生命週期(並且實例引用爲IntPtr)。另外當然你需要調用重名的名字......

3

另一種選擇是在C++/CLI中編寫一個託管包裝器。我更喜歡使用P/Invoke而不是使用P/Invoke。