2011-11-15 80 views
3

我已經提供了一個包含幾個類的非託管C++ DLL。我應該爲非託管C++ DLL創建一個C++/CLI包裝器DLL嗎?

我需要能夠在C#中使用這些類中的一些。根據我迄今爲止的研究,聽起來好像我需要創建一個C++/CLI包裝器DLL來處理託管和非託管類型之間的轉換。我已經看到了一些例子,其中有些人基本上會爲每個類創建一個C++/CLI版本,並且它將包含一個非託管C++類型的實例。實施我在這裏嘗試做什麼的最佳方式是什麼?非託管DLL中可能提供了10-15個類。現在我只需要使用其中的一些,但未來可能需要使用更多。謝謝!

+0

如果DllMain就是這樣,你可以把它扔掉,因爲它什麼都不做。除此之外,亞歷克斯是正確的。另一種選擇可能是swig(http://www.swig.org/),但是學習它如何工作和修正所有注意事項的時間可能比編寫10個包裝器的時間要長,並且生成的代碼將會是醜陋的,可能難以閱讀。 – stijn

+0

[C++/CLI混合模式DLL創建]的可能的重複(http://stackoverflow.com/questions/2691325/c-cli-mixed-mode-dll-creation) –

回答

5

是的,你需要爲這個庫創建C++/CLI包裝器,並在這個包裝器內部使用非託管類。對於公開C風格API的非託管庫,還有PInvoke選項,但它不適用於C++類。

你也可以考慮製作COM包裝器,它想在本地COM客戶端和.NET中使用這個庫。但是我認爲,製作C++/CLI包裝器是更簡單的任務。

+0

個人而言,我會爲C++/CLI包裝。像stijn一樣,我也很想知道是否可以很容易地將swig用於此目的。這是我們稍後可能希望做的事情。將來,看看是否可以使用swig自動生成WinRT類也可能很有趣。 –