使用要注意DLL的调用方式:
register, pascal, cdecl, stdcall,safecall等,我手边没有具体的资料,只能这样解释一下了
所谓的调用方式就是说传函数参数的方式,比如有一个函数:
function MyFunction(X, Y: Real): Real; 
如果使用register调用方式时参数的传递顺序为先X后Y,同时参数是通过CPU的EAX等寄存器传递的,而使用stdcall调用方式时(Window API的调用方式)参数是Right-to-left传递的,
好像是除了 register调用方式以外,其它的调用方式都是通过堆栈传递的

解决方案 »

  1.   

    使用堆栈传递参数这个涉及参数的清除问题,就是堆栈的pop问题,在cdecl调用方式下是由调用者pop 堆栈,其它是由被调用者pop堆栈.说的太多了,怕你不明白,简单的讲,你用delphi调用api就用stdcall,调用c写的dll一般情况下就用cdecl,但你还是先看一下dll的调用约定的好。以上说的都是dll的调用方式问题,操作Dll还是注意是静态调用还是动态调用,静态调用就是在程序先声明要用到该dll中的函数,如
    function SetWindowText; external user32 name 'SetWindowTextA';
    以程序中就可以直接使用setwindowtext了,动态调用就不用说了吧,简单的很,自己试试吧。
      

  2.   

    多谢。可惜本人未触碰过DLL问题,以上的内容似乎多我没有太大的帮助,能否请大侠告诉我网上那里可以找到这样的资料,最好可以是从入门开始的。