Windows下动态库符号命名规则

本文详细解析了C和C++语言中函数名称的修饰规则,包括C调用协议、快速调用协议和标准调用协议下函数名称的修饰方式,以及C++中类方法、构造函数、析构函数和运算符重载的名称修饰规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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是后缀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值