社区
VC.NET
帖子详情
关于“_stdcall”关键字的定义问题
Cash0627
2005-07-21 08:25:45
我在《visual c++.net语言参考手册》一书中看到“_stdcall”关键字,其中有些描述不太懂,希望高手帮忙解释一下:
1、堆栈维护责任:
被调用的函数从堆栈中弹出自己的参数
2、命名修饰约定:
在名称前加上下划线:将@符号以及后面的参数列表的字节数(十进制)加到名称后。因此,声明为int func(int a,double b)的函数经过修饰后变为:_func@12
...全文
86
1
打赏
收藏
关于“_stdcall”关键字的定义问题
我在《visual c++.net语言参考手册》一书中看到“_stdcall”关键字,其中有些描述不太懂,希望高手帮忙解释一下: 1、堆栈维护责任: 被调用的函数从堆栈中弹出自己的参数 2、命名修饰约定: 在名称前加上下划线:将@符号以及后面的参数列表的字节数(十进制)加到名称后。因此,声明为int func(int a,double b)的函数经过修饰后变为:_func@12
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
vrace
2005-07-22
打赏
举报
回复
这个只是众多调用方式中的一种。如果你不用汇编,或者你不搞破解,没必要研究它。
比如说,一个 stdcall 的函数 MessageBox
/* C code */
MessageBox(0, "Hello", "Hi", MB_OK);
用汇编就是(类似哈,用汇编当然不是这样写的)
push MB_OK
push offset szHi
push offset szHello
push 0
call MessageBox
再如, printf 函数,是另一种调用方式
/* c code */
printf("Test %s", aaa);
; asm
push 0
push offset szTest
call printf
add esp, 4 *2
自己看看
siphello sdk
使用时,可以使用Demo程序中的静态用法,也可以用LoadLibrary等函数的动态方法。另外,只需要加载协议...DLL中公共函数接口使用的都是
std
call,函数指针也是,所以如果往Dll函数中传递函数指针,务必加上
关键字
std
call
__
std
call
关键字
调用约定__
std
call被用来调用Win32 API(32位Windows应用平台接口)函数。由于该调用会清理栈,所以编译器使用vararg函数__cdecl。函数在使用这个调用约定需要指定一个函数原型。 return-type __
std
call function...
【C/C++】关于修饰函数
关键字
__declspec,__cdecl,__
std
call,__declspec
_cdecl 是C Declaration的缩写,表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些... _
std
call 是Standard Call的缩写,是C++的标准调用方式:所有参数从右到左依次入栈,如果是调用类成员的话,最后
_
std
call,_cdecl,_fastcall 详细说明
1) _
std
call调用 ...WIN32 Api都采用_
std
call调用方式,这样的宏
定义
说明了
问题
: #define WINAPI _
std
call 按C编译方式,_
std
call调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如_fun
C/C++中什么时候需要使用__
std
call?
鄙人使用的是C++,最近在接触到__
std
call这种调用方式,就上网查了一下,结合自己理解,记录下来. 调用方式有不少,如__
std
call,__cdecl,__fastcall…等等. 调用方式主要(不是全部)约定的是两件事情: 1.参数传递的顺序. ...
VC.NET
7,540
社区成员
27,673
社区内容
发帖
与我相关
我的任务
VC.NET
.NET技术 VC.NET
复制链接
扫一扫
分享
社区描述
.NET技术 VC.NET
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章