天天看點

Delphi中的參數傳遞方式

.參數傳遞方式:

         Delphi中有自己的參數傳遞方式,而Windows API也有自己的參數傳遞方式,那麼他們之間有什麼不同呢,要如何做到相容呢,尤其是在編寫動态庫時?

  (1)cdecl:

     通常是C/C++所使用的參數傳遞方式,它的傳遞方式是由右到左,而且當被調用的函數結束之後,将會由調用函數本身來清除堆棧上的參數資料.

  (2)stdcall:

     參數傳遞方式,也是由右到左,但是當被調用的函數結束之後,則是由被調用函數來清除堆棧上的參數資料,Win32API所有的輸出函數都是采用此中參數傳遞方式

  (3)pascal:

     是Delphi1.0與win16API所使用的參數傳遞方式,它的傳遞方式是由左到右,而且由被調用函數來清除堆棧上的參數資料.

  (4)fastcall:

     是Delphi預設所使用的參數傳遞方式,此種方式在傳遞參數時把前三個參數放在CPU的EAX,EDX,ECX三個緩存器種,剩下的參數則會由左到右地被取出放到堆棧中,而當被調用的函數結束之       後,則是由被調用函數來清除堆棧上的參數資料.

   注:是以在引用C++動态庫中的函數時,要注意參數的傳遞方式,一般使用stdcall.還要注意字元串類型,C++在傳遞字元串時,都是采用字元指針的類型(Char *),是以你在Delphi的程式中就必      須使用PCHAR類型,而不是string類型.