tiDLL參數調用約定
——————————————————————
令 傳遞順序 參數刪除
stdcall 從左到右 函數方面
cdecl 從右到左 調用方面
pascal 從左到右 函數方面
register 從左到右 函數方面
━━━━━━━━━━━━━━━━━━━━━━
退出過程編譯時必須關閉stack_checking,因而需設置編譯指示 {$S-} 。
━━━━━━━━━━━━━━━━━━━━━
//——————————dll的創建
brary mydll
{$S-}
//————————uses單元
uses
classes,stdsys, form in form.pas{form};
//—————————變量聲明
var
love:string;
baby:integer;
SaveExit: Pointer;
//—————————函數和過程
procedure myinnerproc();stdcall; //內部使用過程
begin
{添入代碼}
end;
procedure myproc(var love:string);stdcall;export; //輸出可以調用過程
begin
{添入代碼}
end;
function myfunction(baby:integer):integer;stdcall;export;//可調用函數
begin
{添入代碼}
end;
procedure LibExit; far;
begin
if ExitCode = wep_System_Exit then
begin
{ 系統關閉時的相應處理 }
end
else
begin
{ DLL卸出時的相應處理 }
end;
ExitProc := SaveExit; { 恢復原來的退出過程指針 }
end;
//——————————輸出說明
exports
myproc name myproc index 1,
myfunction name myfuntion index 2 risdent;//輸出信息始終保持在內存中{risdent}
//——————————初始化工作
begin
{DLL的初始化工作 }
SaveExit := ExitProc; { 保存原來的退出過程指針 }
ExitProc := @LibExit; { 安裝新的退出過程 }
End.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表10.1 ExitCode的取值與意義 :取 值 意 義
—————————————————————
WEP_System_Exit Windows關閉
WEP_Free_DLLx DLLs被卸出
━━━━━━━━━━━━━━━━━━━━━
//--------------調用dll
1。靜態調用
在靜態調用一個DLLs中的過程或函數時,external指示增加到過程或函數的聲明語句中。
被調用的過程或函數必須采用遠調用模式。這可以使用far過程指示或一個{$F +}編譯指示。
Delphi全部支持傳統Windows動態鏈接庫編程中的三種調用方式,它們是:
● 通過過程/函數名
● 通過過程/函數的別名
● 通過過程/函數的順序號
//————————————————————靜態調用舉例
unit windows