DreamDev

http://dreamdev.co.bokee.net

企业介绍

欢迎访问DreamDev的企业博客,感受我们的企业文化、品牌理念;与我们互动交流,发表见解;与我们一起分享开放、自由交流的喜悦。 更详细
  • 行业:电脑/数码/软件
  • 地区:武漢
  • 电话:02787434100
  • 传真:02787434100

企业博客信息

创建者

成员列表

暂时没有相关信息!

_stdcall释疑

字体大小: - - zmdxyboyandy   发表于 07-03-30 10:17     阅读(1520)   评论(1)     分类:

一个__stdcall 函数的参数按从右到左的顺序压栈,并在它返回前将这些参数出栈.

C++编译时函数名修饰约定规则:

2 __stdcall调用约定: 1、以“?”标识函数名的开始,后跟函数名; 2、函数名后面以“@@YG”标识参数表的开始,后跟参数表; 参数表以代号表示: X--void , D--char, E--unsigned char, F--short, H--int, I--unsigned int, J--long, K--unsigned long, M--float, N--double, _N--bool, .... PA--表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,以“0”代替,一个“0”代表一次重复; 4、参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针标识在其所指数据类型前;5、参数表后以“@Z”标识整个名字的结束,如果该函数无参数,则以“Z”标识结束。 其格式为“?functionname@@YG*****@Z”或“?functionname@@YG*XZ”,例如 int Test1(char *var1,unsigned long)-----“?Test1@@YGHPADK@Z” void Test2() -----“?Test2@@YGXXZ”

2 __cdecl调用约定: 规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的“@@YG”变为“@@YA”。

2 __fastcall调用约定: 规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的“@@YG”变为“@@YI”。 VC++对函数的省缺声明是"__cedcl",将只能被C/C++调用。 CB在输出函数声明时使用4种修饰符号 //__cdecl cb的默认值,它会在输出函数名前加_,并保留此函数名不变,参数按照从右到左的顺序依次传递给栈,也可以写成_cdecl和cdecl形式。 //__fastcall 她修饰的函数的参数将尽肯呢感地使用寄存器来处理,其函数名前加@,参数按照从左到右的顺序压栈; //__pascal 它说明的函数名使用Pascal格式的命名约定。这时函数名全部大写。参数按照从左到右的顺序压栈; //__stdcall 使用标准约定的函数名。函数名不会改变。使用__stdcall修饰时。参数按照由右到左的顺序压栈,也可以是_stdcall;

返回文章列表标签:   張毛迪  

分享到:

下一篇:kademlia研究 上一篇:股市动荡-股民何去何从

发表评论评论 (1)
发表评论

登录名   密码   游客无须输入密码     注册企博网帐号

验证码