这是函数参数的压栈方式。Delphi缺省的是register,C缺省的是cdecl。
除了写DLL,一般都用stdcall,其他时候就不用考虑了。

解决方案 »

  1.   

    register指示编译器从左到右读取参数,通过寄存器
    pascal 指示编译器从左到右读取参数,不通过寄存器
    cdecl 指示编译器从右到左读取参数,不通过寄存器
    stdcall 指示编译器从右到左读取参数,不通过寄存器
    safecall 指示编译器从右到左读取参数,不通过寄存器
      

  2.   

    trainbox()“左-右”“右-左"有什么不同!这样申明有什么作用!
      

  3.   

    function DispatchMessageW(const lpMsg: TMsg): Longint; stdcall
    这里的stdcall有什么用呢?
      

  4.   

    这是为了和c兼容,因为c采取右—左的方式。在发送消息时,由于Windows也采取右—左的方式,所以Delphi中涉及到消息的方法一般要加关键字stdcall
      

  5.   

    stdcall的作用是
    比如
    调用SubRouting(Var1,Var2,Var3),编译后的最终代码为
    push Var3
    push Var2
    push Var1
    call SubRouting
    add esp,12
    也就是说,调用者首先把参数压入堆栈,然后调用子程序,在完成后,由于堆栈中先前压入的数不再有用,调用者或者被调用者必须有一方把堆栈指针修正到调用前的状态。
    如声明了stdcall,则由被调用者负责清除堆栈,否则由调用者清除堆栈
    --这是从罗云彬的编程乐园看到的,