2013-04-08 68 views
1

我試圖通過編寫包裝器從C#運行未託管的本機C++類代碼。我的C++代碼編譯爲靜態庫(.lib),沒有問題。代碼依賴於其他代碼,我相信它們都被編譯爲靜態庫。由於鏈接器錯誤,我無法將其編譯爲DLL。C#用於C++的包裝器,但只編譯爲靜態庫

我剛剛瞭解到,包裝需要編譯爲DLL,以便它可以從C#中調用。這是真的?我能否將我的包裝器編譯爲靜態庫以用於C#中?

+0

聽起來像你在引用[P/Invoke](http://en.wikipedia.org/wiki/Platform_Invocation_Services)。據我所知,這隻適用於DLL。如何用您的本地C++創建託管C++ DLL?這將允許直接在您的C#項目中添加引用並訪問您的託管C++類。 – 2013-04-08 15:31:01

+1

我會建議您創建一個託管的C++ DLL。你有一個很好的教程,解釋如何將未管理轉換爲管理? – 2013-04-08 15:38:08

+0

我曾經爲Html Tidy創建了一個Managed C++ DLL。 [這是我的代碼項目文章](http://www.codeproject.com/Articles/17124/A-managed-wrapper-for-the-HTML-Tidy-library),也許這對你有一些幫助。 – 2013-04-08 15:45:26

回答

0

C#無法加載.lib文件。

P/Invoke只能加載.DLL文件(它們不必被命名爲.DLL,但它們必須是正確的文件格式)。