因為c++要支援函式過載功能,所以實際編譯時會對函式的名稱進行改寫。
所以我們要加extern "c"來修飾乙個函式,讓該函式不被重寫。
但是,如果使用標準呼叫方式__stdcall來修飾的函式即使使用了extern "c"來限定,仍然會把名字進行改寫,這個時候可以使用def模組定義檔案來限定函式的名稱,不讓編譯器進行改寫。
幾種情況:
1 名字被改寫
void
fun(
void);
2 名字不被改寫
"__declspec(dllexport)
void
fun(
void);
3 名字會被改寫
"__declspec(dllexport)
int__stdcall fun(
void);
4 加入了def模組定義檔案: 名字不被改寫
名字改寫問題主要出現在dll被其他編譯器編譯的程式呼叫,或者使用loadlibrary和getprocaddress指定函式名稱的時候。
c 建立dll匯出函式名稱
extern c 的作用是宣告以c語言的格式編譯當前 上 兩個函式,分別以c和c 格式編譯,看看效果是什麼 extern c 與 預設c 方式的區別 extern c declspec dllexport void func1 c declspec dllexport void func1 cpp ...
DLL匯出函式名稱改編的解決方法
分類 c c 程式設計學習 vc ms 2011 05 26 15 04 1437人閱讀收藏 舉報dll delphi api編譯器 pascal winapi 1.dll編譯後匯出函式名稱改編 在編寫乙個dll後,為了能被別的程式呼叫,需要將被使用的函式匯出 但是一般的編譯器都會將到處函式名稱改編...
DLL匯出函式名稱改編的解決方法
1.dll編譯後匯出函式名稱改編 在編寫乙個dll後,為了能被別的程式呼叫,需要將被使用的函式匯出 但是一般的編譯器都會將到處函式名稱改編 例如 在vc中新建乙個空的win32 dll工程,然後新增下面的檔案 cpp view plain copy ifdef dll api declspec dl...