2009-11-18 51 views
1

我想知道什麼是最好的方法來包裝用C++編寫的海量庫,使其可以在C#中訪問。C++ Wrapper原生Interop企業規模

我已經完成了interop之前的工作,而且我很喜歡IJW。但我不確定如何用一個巨大的庫實現這種方法。我想知道是否有任何模式可以使用,否則我只需要在C++庫中存在的每個類中編寫一個封裝器,這個類是不可管理的。另外,我不能僅僅提供一個單一的門面進入圖書館,因爲它又是非常大的,而且在這一點上壓倒性的,所以任何想法都將不勝感激。

回答

0

如果表現是最關心的問題,請留下IJW。如果您必須編寫包裝類或在代碼中使用更多的可讀性,我建議您創建COM包裝器,因爲IDE嚮導可以幫助您生成代碼,COM也可以被本機客戶端使用。這就是微軟公開其Office和IE的API。

0

我已經經歷了一個類似於你描述的過程。在我們的情況中,沒有簡單的方法來包裝這些類(IJW不是一個適用於大型C++庫的可行解決方案),所以我們做了包裝每個類。

我們首先編寫了一個封裝器,用於在我們的應用程序中使用我們需要的核心類,並根據需要爲其他類添加封裝。這些東西特別對我們有所幫助:

  • 在我們的包裝層中,我們使用大量的宏來轉換C++代碼和.NET概念之間的轉換。例如,宏被用於將'屬性'類型方法轉換爲真正的.NET屬性。
  • 我們總是使用「property IntPtr NativeObject {get();}」將本機C++類作爲IntPtr公開。這允許我們將包裝器拆分爲多個組件,同時仍允許包裝器對象將本地對象傳遞給另一個。
  • 一個徹底的nunit測試套件來驗證一切按預期工作。

有很多參與工作,但寫身邊的每類的包裝是管理,但(顯然)只值,而如果你得到足夠的益處。 「手動」編寫包裝也給了我們對互操作的精細控制,這對我們項目的成功至關重要。