windows dll 的符号名称

1. dll文件中的符号名称

1.1. __declspec(dllexport)

以 int func(int, int) 为例
C++ __stdcall ?func@@YGHHH@Z  
C++ __cdecl ?func@@YAHHH@Z  
C __stdcall _func@8  
C __cdecl func  

1.2. export

与export名称相同

2. lib文件中的符号名称

2.1. __declspec(dllexport)

以 int func(int, int) 为例
C++ __stdcall ?func@@YGHHH@Z __imp_?func@@YGHHH@Z
C++ __cdecl ?func@@YAHHH@Z __imp_?func@@YAHHH@Z
C __stdcall _func@8 __imp__func@8
C __cdecl _func __imp__func

lib文件中每个符号有两个名字,不带__imp_前缀,不带__imp_前缀。

对于 C 语法的 __cdecl 调用方式,lib中的名称与dll中不一样,前面多了个下划线。

2.2. export

与export名称相同,同样有带__imp_前缀

3. 其他

3.1. export 方式

def文件格式

http://msdn.microsoft.com/en-us/library/28d6s79h.aspx

#pragma comment(linker, "/export:func=_func@8")

3.2. 链接过程

在链接时,以lib中的名称为准

3.3. arm 和 x64 体系

在 arm 和 x64 体系下,所有 调用方式都被忽略,dll 文件中的符号名称上与 __cdecl 一样, 但是 lib 文件中的符号名称没有前面的下划线
http://msdn.microsoft.com/en-us/library/zxk0tw93.aspx

3.4. 工具

dumpbin,查看 .obj .lib 文件
http://msdn.microsoft.com/en-us/library/c1h23y6c.aspx


你可能感兴趣的:(windows dll 的符号名称)