用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧Delphi

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

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 20:06:25
众所周知,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等等。还不赶快试试?

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:24,484.38000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号