2
我有我需要從C#使用的第三方C庫。系統的其餘部分是用C#編寫的,因此使用C++/CLI只是包裝器的選項。使用C++/CLI而不是C#來封裝(第三方)C庫(dll)有什麼好處?
使用C++/CLI包裝C庫而不是C#有什麼優勢?創建C#包裝器有什麼優勢嗎?
這些庫包含一些結構,幾個枚舉和許多函數。
編輯:是否有可能在C#中使用C結構和枚舉而不包裝它們?
我有我需要從C#使用的第三方C庫。系統的其餘部分是用C#編寫的,因此使用C++/CLI只是包裝器的選項。使用C++/CLI而不是C#來封裝(第三方)C庫(dll)有什麼好處?
使用C++/CLI包裝C庫而不是C#有什麼優勢?創建C#包裝器有什麼優勢嗎?
這些庫包含一些結構,幾個枚舉和許多函數。
編輯:是否有可能在C#中使用C結構和枚舉而不包裝它們?
使用C++/CLI的優點是您可以在同一個程序集中編寫本機代碼和託管代碼。
當使用C++/CLI時,與C庫交互更容易,您可以正常使用您的庫,並且仍然可以公開完全託管的.NET接口或類。但是,當然C++/CLI增加了一些複雜性。
另一方面,在C#中,您需要重新聲明所有結構並使用DllImport在C#中再次聲明您的C函數。
我想說的簡單的互操作任務(如只是一些功能和幾個結構),使用C#和PInvoke就好了。如果使用完整的API,需要大量的結構重定義,固定,轉換等等,C++/CLI可能是更好的選擇。
所以它基本上是一個圖書館複雜性的問題。對於更復雜的庫使用C++/CLI,但您可以使用簡單的庫來避開C#。 –
@HåkonK.Olafsen是的,基本上。當然,這也取決於你想要對結果做什麼。如果他們需要大量的「C++東西」來處理,比如memcpy,reinterpret_cast等,C++/CLI也可能是這種情況。 – Botz3000