2013-01-13 184 views
1

我有一個導出到一個Win32 DLL中的本地C++類:橋接非託管和託管類

class __declspec(dllexport) Manager { ... } 

DLL被成功創建。我們稱之爲Unmanaged.dll

我想在.Net應用程序中使用這個類。因此,我決定創建託管C++包裝類。所以我創建了一個新的CLR類庫,其中我設置了Unmanaged.dll作爲鏈接器的輸入。

當編譯託管的DLL我得到以下錯誤:

fatal error LNK1107: Invalid or corrupt file: cannot read at 0x318. (Unmanaged.dll in project ManagedBridge)

兩個項目都設置編譯到x64。 DLL Export Viewer顯示類的構造函數和方法。所以Dll似乎很好。

有什麼我失蹤?

回答

2

您不能將DLL傳遞給鏈接器,它不知道如何處理它。 DLL通常不適合幫助鏈接程序確定DLL包含您調用的函數。從DLL導出可以是多個名稱。它是一個數字(「序數」)是一個問題,鏈接器不會知道如何將數字映射到標識符名稱。名稱也不一定要匹配,名稱通常會被簡化,並刪除其名稱。

你必須告訴鏈接器關於DLL的導入庫。其中包含更多信息,包括序號名稱映射和編譯器使用的原始裝飾名稱。導入庫是鏈接DLL時創建的.lib文件。你會發現它回到DLL項目的構建目錄中。將其路徑添加到鏈接器的附加依賴關係設置。