2010-03-24 59 views
4

我有一個DLL,它導出的函數...GCC出口裝飾功能名稱只能從DLL

extern "C" 
int __stdcall 
MP_GetFactory(gmpi::IMpUnknown** returnInterface) 
{ 
} 

我與代碼:: Blocks的GCC編譯器(V3.4.5)編譯此。問題:產生DLL導出函數裝飾名稱...

[email protected] 

此加載失敗,應該是普通的老...

MP_GetFactory 

我研究這個約4小時。我認爲--add-stdcall-alias是解決這個問題的選項。我的代碼:: Blocks的日誌顯示...

的mingw32-G ++ EXE -shared -Wl, - 出IMPLIB =斌\調試\ libGainGCC.a輪候冊, - DLL OBJ \調試\ se_sdk3 \ mp_sdk_audio.o obj \ Debug \ se_sdk3 \ mp_sdk_common.o obj \ Debug \ Gain \ Gain.o obj \ Debug \ Gain \ gain.res -o bin \ Debug \ GainGCC.sem --add -stdcall -alias -luser32

..所以我認爲那是正確的選擇呢?但沒有運氣。 Dependancy Walker僅顯示正在輸出的裝飾名稱。 我得到它通過使用__cdecl而不是__stdcall工作,名稱然後導出正常,但函數調用時調用堆棧(因爲調用者期望其他調用約定)。

回答

5

對不起回答我自己的問題,終於搞明白了。

項目/編譯選項/連接/其他連接器選項 輪候冊, - 殺 - 在

...殺死裝飾符號 '@' 等

1

我想應該是-Wl , - add-stdcall-alias和「kill-at」技巧會使生成的導入庫文件不可用。