当前位置:编程学习 > Delphi >>

dll的创建与调用

 

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

补充:软件开发 , Delphi ,

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,