回 帖 发 新 帖 刷新版面

主题:winapi

       大家好,下面是我的一些小分享,详情请http://www.bdqn1.cn 

     WINAPI见windef.h这个头文件

  #define WINAPI __stdcall
  默认情况下,我们的函数调用都是遵循__stdcall这个规则的。当然,也有诸如__cdecl、__pascal等规则。
  使用__stdcall还是__cdecl或__pascal,在纯Windows编程下并非特别需要。
  __stdcall:
  1、进行函数调用,函数参数的入栈方式是最右边先入栈。
  2、同时__stdcall规定,子函数负责栈的回收(调用者只负责压栈). 题外话:__pascal的调用规则是从左到右,正好与__stdcall相反。
  3、C调用约定(即用__cdecl关键字说明)(The C default calling convention)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数vararg的函数(如printf)只能使用该调用约定)当然,这些工作是应用程序自己完成的,不需要编写者动手。汇编语言另当别论(POP SP POP BP等) 。另外,在函数名修饰约定方面也有所不同。 _cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。VC将函数编译后会在函数名前面加上下划线前缀。

 本文摘自http://www.bdqn1.cn 

回复列表 (共1个回复)

沙发

选择千锋 选择卓越 千锋3G 手机软件开发培训第一品牌

[url=http://www.mobiletrain.org/]iphone培训[/url]
[url=http://www.mobiletrain.org/]千锋iphone培训[/url]

我来回复

您尚未登录,请登录后再回复。点此登录或注册