我们在VC中使用一些API函数时, windows采用的是__stdcall的调用方式
而我们自己写的函数默认是__cdecl的调用方式那为什么在我们写的函数中调用API函数不会报错呢?上次发帖没有得到很好的答复,现在重发!
而我们自己写的函数默认是__cdecl的调用方式那为什么在我们写的函数中调用API函数不会报错呢?上次发帖没有得到很好的答复,现在重发!
解决方案 »
- DDNS可以用在内网中的机子吗?
- 借人气问一个总题:访问其它计算机共享文件不弹登录框
- 关于VC7 应用 MSXML 的问题
- 特急!!哪里找这种电影插件?
- 如何在需要登陆的smtp服务器上发邮件??????????????????????
- 为什么程序link后,并不执行
- 关于Windows Media Player!
- 分虽少,但很重要!怎么在自己创建的类使用在对话框中输入的数据?
- AfxGetApp怎么获得theApp的地址?
- 哪位大侠知道哪儿可下载<vc++4.0开发人员指南>(机械)电子书或者配套光盘?
- 请问一个从SDK转到MFC时遇到的问题,高手帮下忙!
- 如何除去mschart中曲线上的数字?在线等
1、__stdcall调用约定相当于16位动态库中经常使用的PASCAL调用约定。在32位的VC++5.0中PASCAL调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal外,__fortran和__syscall也不被支持),取而代之的是__stdcall调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。 2、C调用约定(即用__cdecl关键字说明)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用__stdcall函数的大。函数采用从右到左的压栈方式。VC将函数编译后会在函数名前面加上下划线前缀。是C、C++和MFC程序的缺省调用方式。