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 文件中的符号名称没有前面的下划线
3.4. 工具
dumpbin,查看 .obj .lib 文件