Chinaunix首页 | 论坛 | 博客
  • 博客访问: 77470
  • 博文数量: 32
  • 博客积分: 1440
  • 博客等级: 上尉
  • 技术积分: 375
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-25 16:03
文章分类

全部博文(32)

文章存档

2010年(12)

2008年(20)

我的朋友

分类: C/C++

2008-10-25 17:51:57

其实就是在函数声明的时候多加一个关键字,比如很多API函数就是象这样声明的:  
  int   WINAPI   MessageBoxA(HWND,LPCSTR,LPSTR,UINT);  
  而WINAPI实际上就是__stdcall.  
  大多数API都采用__stdcall调用规范,这是因为几乎所有的语言都支持__stdcall调用.相比之下,__cdecl只有在C语言中才能用.但是__cdecl调用有一个特点,就是能够实现可变参数的函数调用,比如printf,这用__stdcall调用是不可能的.  
  __fastcall这种调用规范比较少见,但是在Borland   C++   Builder中比较多的采用了这种调用方式.  
  如果有共享代码的需要,比如写DLL,推荐的方法是用__stdcall调用,因为这样适用范围最广.如果是C++语言写的代码供Delphi这样的语言调用就必须声明为__stdcall,因为Pascal不支持cdecl调用(或许Delphi的最新版本能够支持也说不定,这个我不太清楚).在其他一些地方,比如写COM组件,几乎都用的是stdcall调用.在VC或Delphi或C++Builder里面都可以从项目设置中更改默认的函数调用规范,当然你也可以在函数声明的时候加入__stdcall,__cdecl,__fastcall关键字来明确的指示本函数用哪种调用规范.  
  __declspec一般都是用来声明DLL中的导出函数.这个关键字也有一些其他的用法,不过非常罕见.
阅读(1381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~