其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

Delphi 中动态链接库(dll)的建立和使用[2]


发布日期:2018年11月20日
 
Delphi 中动态链接库(dll)的建立和使用[2]

三 DLL库的访问

访问DLL库有两种方式一种是静态引用另一种是动态引用

用静态引用这种方法装入DLL要做两件事情为DLL 库创建一个输入单元以及

用USES把输入单元连接到要使用DLL 函数的程序模块中为DLL库创建的输入单元与普通的单元的区别仅在于在它的接口处声明的过程函数并不在它的实现部分给出真正的实现代码而是用external关键字把过程函数的实现细节委托给外部DLL模块

external命令的使用语法如下

procedure /function 过程/函数名;external DLL模块名;

下面给出为上面创建的minmaxDLL库写的输入单元源文件testdll pas从中可看出输入单元 与一般 单元的一些差别代码如下所示

以下是引用片段

unittestdll;

interface

uses

functionMin(XY:Integer):Integer;

functionMax(XY:Integer):Integer;

implementation

functionMin;externalminmaxDLL;

functionMax;externalminmaxDLL;

end

一个应用程序若想调用minmaxDLL中的函数只须在其uses语句中加入testdll 单元即可

动态装入DLL要用到Windows的三个API函数LoadlibraryFreelibrary和GetprocAddress loadlibrary函数用来装入DLL库其调用格式如下

function loadlobrary (DLLfileNamePchar): THandle:

当不再需要一个DLL库时应调用FreeLibrary函数将其释放以空出宝贵的内存资源其调用格式如下

procedure FreeLibrary (Libmodule:THandle)

Libmodule 为由LoadLibrary调用得到的DLL库句柄在用loadlobrary 函数装入某个DLL库和调用FreeLibrary释放该DLL库之间的程序段中 可以使用该DLL库中的过程和函数具体使用方法是用GetprocAddress函数把DLL库中函数的地址传递给程序中某个函数变量再用该变量实现DLL函数的调用GetprocAddress函数声名如下

以下是引用片段

function GetprocAddress (Libmodule:THandle:procname:pchar):TFarProc:

如下例所示

type

TTimeRec=record

Second:Integer;

Minute:Integer;

Hour:Integer;

end;

TGetTime=procedure(varTime:TTimeRec);

THandle=Integer;

var

Time:TTimeRec;

Handle:THandle;

GetTime:TGetTime;

begin

Handle:=LoadLibrary(DATETIMEDLL);

ifHandle<>then

begin

@GetTime:=GetProcAddress(HandleGetTime);

if@GetTime<>nilthen

begin

GetTime(Time);

withTimedo

WriteLn(ThetimeisHour:Minute:Second);

end;

FreeLibrary(Handle);

end;

end;

在调用动态链接库时应注意 所需动态链接库须与应用程序在同一目录或Windows System 目录下

动态链接库是 Windows下程序组织的一种重要方式使用动态链接库可以极大地保护用户在不同开发工具不同时期所做的工作提高编程效率

[] []

               

上一篇:利用Delphi开发网络数据库应用

下一篇:Delphi 中动态链接库(dll)的建立和使用[1]