2015-08-24 141 views
1

我在VS2010創建了一個簡單的dll用下面的函數:32位和64位庫裝飾

extern "C" 
{ 
    __declspec(dllexport) int myFunc() 
    { 
    return 1; 
    } 
} 

我比較了生成的DLL和lib文件既x64和Win32平臺,我發現的結果我不明白。

使用Dependency Walker我看到兩個dll都會顯示未裝飾的「myFunc」。 雖然在Notepad ++中同時打開兩個lib文件,但當x64僅顯示「myFunc」時,Win32 lib顯示「_myFunc」。

有人可以解釋爲什麼lib簽名不同嗎?是否可以刪除32位lib文件中的下劃線?

+0

http://stackoverflow.com/a/15664100/17034 –

+0

那麼我完全是新名字裝飾,所以你的鏈接是有趣的漢斯。我做了一些進一步的研究,並在此頁面上找到(https://en.wikipedia.org/wiki/Name_mangling),「Windows上的64位慣例(Microsoft C)沒有引領下劃線」。 –

回答

-1

簽名是什麼是,你不能(或不應該)用編輯器

的庫是diferent改變它,因爲一個爲32位,另一個爲64

Remenber一個DLL生成.lib但它只用於編譯時使用,重要的部分是dll本身,你可以刪除.lib文件執行.exe沒有問題

+0

我不相信這真的會回答這個問題。 –

+0

你正在談論.lib和.lib根本就沒有mather,重要的部分是DLL,你看到,32位和64位都具有相同的簽名,所以.exe不會因爲使用而失敗32或64位DLL。爲什麼botther關於它是不相關的東西? VS會爲你鏈接它,也許下劃線意味着其他優化選項和依賴於.lib的其他編譯器選項 – Juan