Windows下動態庫符號命名規則

2021-09-22 02:07:29 字數 971 閱讀 9030

c的名稱修飾規則

1. 對於使用c呼叫協議(__cdecl)的函式,在函式名稱前加一下劃線,不考慮引數和返回值

2. 對於使用快速呼叫協議(__fastcall)的函式,在函式名稱前後各加一@符號,後跟引數的長度,不考慮返回值。例如extern "c" int __fastcall test(int n)的修飾名稱為@test@4

3. 對於使用標準呼叫協議(__stdcall)d的函式,在函式名稱前加一下劃線,名稱後加一@符號,後跟引數的長度,不考試返回返回值extern "c" int __stdcall test(int a, int b)的修飾名稱為_test@8

c++名稱修飾規則

1. 都是以?開始,以字元z結束,中間由@符號分割為多個部分。整個名稱最長為2048(遇到模板展開時,名稱會非常長)

2. 對於類的函式,基本結構為:?方法名@類名@@呼叫協議 返回型別 引數列表 z

3. 對於不屬於任何類的函式,其基本結構為:?函式名@@y 呼叫協議 返回型別 引數列表 z

4. 類的建構函式和析構函式比較特殊,分別是?0和?1,運算子過載也有特殊的名稱,例如new、delete、=、+和++名稱分別為?2,?3、?4,?h,?e

5. 如果是類方法,由所屬類開始依次加上類名和父類名,每個類名後面加乙個@符號,所有類名加好後,在加乙個@符號和字元q或s(靜態方法),如果不是類的方法,直接加上@符號和字元y.

6. 對於不屬於任何類的函式,c呼叫約定**為a,__fastcall為i,標準呼叫約定為g,對於類方法,呼叫協議前加乙個字元a,this呼叫協議為e。

7. 返回值編碼:h表示整形

8. 字尾z

9. 引數列表以@符號結束。

以int __cdecl testfunc(int, int)為例,它的修飾名為?testfunc@@yahhh@z。其中,@y表明這不是類的方法,其後的a代表c呼叫約定,第乙個h表示返回值為整數,後兩個hh分別代表兩個整數引數,之後@表示引數列表結束,最後的z是字尾

windows 下 curl動態庫編譯

2 在curl master同級目錄下新建deps資料夾,3 把openssl的庫檔案放在deps資料夾下 需要支援zlib的把zlib庫也放在deps資料夾下。沒有openssl可以自己用vcpkg編譯一下。4 接下來編譯64位的curl庫 開啟vs的命令列,順序執行以下命令 5 來編譯32位的c...

Windows下動態庫的編譯以及呼叫

1.mfc下生成動態庫 1 顯式呼叫 在.cpp檔案裡新增介面函式 1 int sum int a,intb 2 56int sub int a,intb 7 在.def檔案裡標示匯出介面 1 sum 1 2 sub 2 編譯即可生成動態庫 在.exe裡呼叫 在標頭檔案裡新增 1 pragma co...

windows下DLL庫里如何獲取動態庫檔名稱

windows給我們提供了另乙個api可以獲取到這個dll庫的hmodule,即 getmodulehandleex。該函式原型如下 winbaseapi bool winapi getmodulehandleexa in dword dwflags,in opt lpcstr lpmodulena...