.參數傳遞方式:
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類型.