2011-03-28 43 views
3

我正在創建一個CLI項目以環繞現有的本地C++項目(同一解決方案文件中的兩個獨立項目)。我想包含一個指向本地類的指針,作爲託管類中的成員。從我在線閱讀的文檔中可以看出,如果託管代碼和非託管代碼都在同一個項目中,就可以完成此操作。如果本機代碼和託管代碼位於不同的項目中,則唯一的選擇是在兩個項目之間使用dllimport和dllexport屬性,並將本機代碼類功能作爲靜態函數導出。將本地C++類導入CLI項目

這些是我唯一的選擇,還是我可以在兩個單獨的項目之間導入和導出整個本機類?我問,因爲這決定了我如何設計我的託管包裝。提前致謝。

回答

5

那麼單詞「指針」扔了我一分鐘。你的意思是你想在你的C++/CLI代碼中使用一些沒有P/Invoke的本地代碼?當然。只需包含標題,鏈接到lib。如果他們都是本地人,你會怎麼做。現在它被稱爲C++ Interop - 我更喜歡舊名稱(It Just Works Interop)。

你當然可以在任何地方包含一個頭文件,並且可以從任何地方添加一個鏈接器輸入,因此它們在技術上不必處於相同的.sln中,但是如果它們是Visual Studio 。

+2

如果本地項目設置爲構建靜態.lib而不是DLL,它也會有所幫助。否則,您可能會很容易遇到問題,如從一個CRT堆分配並嘗試釋放另一個CRT堆。有時候,值得激活「鏈接庫源」選項,因爲鏈接到靜態庫不會在不需要的對象中運行全局構造函數。 「它工作正常(如果你很小心」,但比p/invoke要容易得多) – 2011-03-28 23:08:30

+0

這很好,我的本地代碼是一個dll而不是靜態庫 – John 2011-03-29 14:05:18

+0

你可以讓VS讓你成爲一個「便利庫「,你可以鏈接到調用項目 – 2011-03-29 14:06:27