写调用动态链接库DLL的应用程序

众所周知,Windows的可执行文件可以划分为两种形式:程序和动态链接库(DLL)。而在什么时候需要使用动态链接库呢,动态链接库又有一些什么样的好处呢:
1、一个DLL可以提供给不同的程序使用,而这个DLL只需要在内存中加载一次,这样就节省了系统的内存。
2、我们可以提供DLL的不同版本来更新我们的程序,而不需要重新编译我们的程序。
3、使用了DLL组件包可以大大减小可执行文件的规模。
4、如果应用程序是基于同一个组件包,我们将接生许多内存和代码分配。
从上面看来,DLL是独立于编程语言的;在Windows编程环境下,我们可以在不同的编程语言中调用相互编写的动态链接库,从而满足不同的需要,并且大大的提高了更新效率。
下面我就讲讲使用在Delphi 5.0中如何编写调用动态链接库的应用程序。

首先,我们要创建一个DLL,在Delphi的菜单中选择File->New,选中DLL,然后点击OK。

这时可以出现编写环境,请注意那里的英文说明,大概讲述了编写DLL时需要注意的地方,其中有一个非常重要的就是尽量避免使用string类型而采用pchar或者shortstring类型,否则传递的参数将出现乱码。
然后,将第一行的Library Project1;改成Lirbrary MyDLL;,同时保存文件,并编译,这就产生了一个DLL;当然这个DLL现在还什么都没有。现在我们给他加上一些功能。

uses
SysUtils,Windows,Registry,Regstr;

Function ChkBoolean():Boolean;stdcall;
Begin
Result:True;
End;

procedure WriteReg(UserName:pchar);stdcall;
var
Reg: TRegistry;
begin
Reg:=TRegistry.Create;
errFind:=False;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
If Reg.OpenKey(''SOFTWARE\MyDLL\''+UserName,True) then
Reg.WriteString(''Name'',UserName);
finally
Reg.CloseKey;
Reg.Free;
end;
end;

输入以上的代码,分别是一个函数和一个过程,第一个函数ChkBoolean返回一个真;过程WriteReg读取一个参数并将该参数写入注册表。在程序的最后必须加上一句:
Exports ChkBoolean,WriteReg;
这样表示向外声明可提供给应用程序的函数或过程,也只有在这里声明的函数或过程可以给其他应用程序所调用。
最后,我们编译整个程序,将产生一个MyDll.dll的文件。

现在,让我们创建一个应用程序来调用这个DLL。
点击File->New Application,保存这个工程,记住要和刚才那个DLL工程在同一个目录。
在 implementation 下编写如下代码:
type
TMyProcedure=procedure(UseNam:pchar);stdcall;
function ChkBoolean():Boolean; external MyDLL.DLL'';
第一行定义了一个过程类型,下面会看到这有什么用;
在我们程序的Form上放置一个TEdit和TButton控件,使其如下图所示:

双击按钮,编写onClick事件,代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
HInst:Thandle;
FPointer:TFarProc;
MyProc:TMyProcedure;
Begin
If ChkBoolean Then
//直接返回函数值,为真,继续运行……
Begin
HInst:=LoadLibrary(''MyDLL.DLL'');
if HInst>0 then
try
FPointer:=GetProcAddress(Hinst,Pchar(''WriteReg''));
//GetProcAddress API函数用于找到DLL中的函数名,并返回一个指针
if FPointer<>nil then
begin
MyProc:=TMyProcedure(FPointer);
//将该函数指针转换成相应的数据类型并调用它
Try
MyProc(Edit1.Text);
except on E:Exception do
ShowMessage(E.Message);
end;
end
else
ShowMessage(''DLL procedure not found!'');
finally
FreeLibrary(HInst);
end
else
ShowMessage(''Library not found!'');
End;
end;

编写完以上代码,马上运行应用程序。在输入框处输入任意字符,并点击按钮,再打开你的注册表,需要HKEY_LOCAL_MACHINE\ SOFTWARE,看看多了些什么。
很有意思吧,呵呵!通过这样一个简单的例子,你可以更加好的运用DLL的强大优势。同时,用DELPHI编写的DLL还可以提供给其他语言环境调用啊,比如VB,VC等等。还不赶快试试?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值