DLL编写入门级,我最近也因使用HOOK的原因刚学起来。
动态链接库(DLL)是Windows中最重要的部分之一,Windows中的运
行程序可以共享DLL中的子例程,从而使应用程序可以共享代码,减少
内存占用。本文简要介绍用Delphi创建及使用DLL。
一、创建动态链接库
1.建立一个新的工程文件
由于此工程只是个库文件,因此并不需要Form。首先选择主菜单V
iew|Project Manage, 将自动生成的Unit1及Form1移去,然后选择Fil
e|Save Project As,将此工程取名为 Mydl.d pr存盘(命名可任意 ),
当系统提问是否保存Unit1时回答‘NO’,再选择View|Projectourc
e,将其代码修改如下:
library Mydll;
uses WinTypes;
begin
end.
此文件与一般工程文件主要不同之处在于将标识符"program"改
为"library"。
2.向动态链接库中加入被多个应用程序公用的子例程(过程及函
数 )
建立一个新的Unit,将被多个应用程序公用的子例程在这里声明
及实现。注意在这个Ui t的Interface部分声明的例程尾部要加关键
字"export",表示此例程能够被"引出",也就是能被其它应用程序调用
。例如:有一个公用函数Plus,其作用是将两个整数求和,此Unit的代
码如下:
Unit Content;
{公用例程单元,命名可任意}
interface
function plus (a,b:integer):integer;export;
implementation
function plus (a,b:integer):integer;
begin
Result:=a+b;
end;
end.
3.引出公用例程
选择View|Project Source,在Mydll.dpr的uses部分之后加入:
exports
plus;
{将公用例程引出}
完整的工程文件如下:
library Mydll;
uses WinTypes,
Content in ‘CONTENT.PAS’;
exports
plus;
begin
end.
以上就完成了DLL库的创建,选择Compile将其编译。
二、使用动态链接库
DLL中的资源可以被多个EXE文件公用,现在可以用Delphi建立多
个应用程序,共同使用y dll.dll中的函数Plus:
1.建立一个新的工程文件 Usedll.dpr, 移去所有的Unit及Form
。
2.为引用 Mydll.dll 中的函数Plus,建立一个新的Unit,其目的
是为了说明要引用的例程存在于哪个DLL库中(用关键字"external"),
此Unit的代码如下:
Unit useunit;
{这是使用DLL的单元}
interface
function plus (a,b:integer):integer;
implementation
function plus;
external ‘Mydll’;
{说明这个函数是在外部Mydll.dll库中实现的}
end.
可以看出,对于外部例程,在interface部分的声明与普通例程一
样,但是在implementai on部分要使用关键字"external",表示此例程
是在程序外部实现的。
3.在需要使用函数Plus的Unit中,只要在其Implementation部分
用Uses将useunit包含进来即可。
例如:新建一Form,加入Edit及Button控件,为Button增加OnClick
事件,此Form对应Uni的implementation代码如下:
implementation
{$R *.DFM}
uses useunit;
{包含useunit单元}
procedure TForm1.Button1Click(Sender: TObject);
{Button1的OnClick事件}
begin
Edit1.Text:=IntToStr (Plus (10,20));
{使用DLL库中的函数}
end;
end.
将此工程编译,生成Usedll.exe,运行时按下Button即可看到Edit
控件的Text变成了30。
依上例可以建立多个EXE文件,共同使用Mydll中的函数Plus,由此
可以看出动态链接库的优越性,特别是在开发大型软件时,动态链接库
经常使用。
以上程序在Delphi 1.0/Win3.2、Delphi2.0/Win95上运行通