__cdecl、__fastcall、__stdcall是VC的三种调用规范: 
 
调用规范决定从左至右或从右至左的参数传递,有何负责清空堆栈以及函数名称的解释
调用规范      传送顺序  堆栈清除执行者           解释风格 
__cdecl        右->左      调用程序            _functionName 
__fastcall     右->左      被调用程序          @functionName@nnn 
__stdcall      右->左      被调用程序          _functionName@nnn 
__fastcall改进了__cdecl的缺省情况,但用在所调用C函数至少有一个参数时,选中该项编译器将前两个参数送到寄存器ECX  DEX,而不是用堆栈,其他参数缺省传入到__cdecl堆栈 

解决方案 »

  1.   

    __stdcall由被调用者清理参数栈。
    __cdecl由调用者清楚参数栈,这是c,c++缺省调用模式。可以实现可变参数函数。
      

  2.   

    __stdcall用于调用win32 API。被调用者负责清除堆栈等工作。参数传递是由右向左。
    __cdecl是C/C++默认的函数调用方式,由调用者负责清除堆栈,因此可以实现变长参数列表。它产生的可执行体要大于__stdcall产生的可执行体。参数传递也是由右向左。
      

  3.   

    _stdcall,参数由右到左依次入栈,且函数执行完毕由被调用者清理堆栈;
    _cdecl,参数也是由右到左入栈,但由调用者清理堆栈
      

  4.   

    上面说得很清楚,加一点
    _fastcall intel处理器的调用方法,delphi(pascal)用的
    在c/c++调用用其他的语言时,入 fortran / basic ,加extern "C" 相当如那种方式若是pascal(delphi)用_fastcall