精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>其他>>Dll动态连接库>>在Delphi应用程序中使用DLL

主题:在Delphi应用程序中使用DLL
发信人: chenjz@GZ()
整理人: teleme(2001-03-29 21:57:29), 站内信件

标  题: 在Delphi应用程序中使用DLL
发信站: 网易虚拟社区 (Tue Aug 29 11:58:00 2000), 站内信件

               在Delphi应用程序中使用DLL
(作者:广西 李澄 2000年06月09日 10:39)


  Delphi不仅可调用C++产生的DLL模块,同样C++程序也可调用Delphi所产
生的 

DLL部件。这样交互调用,无须重复开发,大大缩短了生产周期。…… 

  Delphi与VisualBasic、VisualFoxPro等软件一样,属于RAD工具(快速应用
开发工具)。 

适合开发32位或16位/32位混合应用程序。Delphi所使用的程序语言是ObjectPa
scal, 

是结构化、面向对象的编译型语言,具有高执行效率、可重用性、易维护性,及
较强的异 

常处理能力、类封装能力等。VB与Delphi相比,VB不能对程序进行编译,只能解
释执行, 

更重要的不同是Delphi具有较强的继承性,Delphi的应用程序可编译DLL模块,V
B却无 

法编译,只能调用C编译的DLL。而Delphi不仅可调用C++产生的DLL模块,同样


++程序也可调用Delphi所产生的DLL部件。这样交互调用,无须重复开发,大大
缩短 

了生产周期。 

   一、用Delphi创建DLL 

  Delphi的DLL创建并不复杂,下面向大家介绍Delphi的DLL创建方法。 

  1、首先创建一个新的DLL项目(NewProject),因为DLL与调用它的主程序要
分开 

编译。如果DLL模块已经建立在调用它的项目中(Project),则将它的窗体(Fo
rm)从Project 

移出,另建一个新的项目(NewProject)。只需从File菜单选中NewProject项,
然后将DLL 

的Pas模块文件加入到项目中,再将其自动建立的Form1删除即可。 

  2、在DLL的DPR文件中把Program关键字改为Library,申明为动态链接库,在
USES 

语句后面加入ExPorts语句,指明调用DLL的函数名。 

  3、如果主程序的DPR文件已有DLL窗体CreateForm的语句,则将其去掉。 

  4、在DLL的Pas文件中Type......End后加入该DLL的函数或过程的声明
,形式 

如:  FunctionName(argment):Boolean;export; 

  该函数或过程应加入窗体的Create和Free(产生和释放)方法。 

  5、对项目进行编译即可。 

   二、DLL的调用 

  调用DLL有两种方法,一种是在应用程序装载时调用,另一种是在应用程序运
行时调 

用。首先介绍装载时DLL的调用: 

  (1)装载时调用DLL 

Pas文件中,对DLL函数进行外部声明,声明应位于Implementation的Uses语句后
,形式 

如下: 

  Implementation 

  UsesDialogs; 

  FunctionName(argment):Boolean;far;External′CallName′; 

  ...... 

  其中External关键字后面的引号内的字串是DLL的文件名。声明以后即可在P
as文件 

任何地方引用DLL函数。 

  装载时调用DLL的优点是速度较快,程序间也可共享代码。 

  (2)运行时调用DLL 

  DLL的另一种调用方法是在运行时调用。要调用到Win dows的API函数:load
library, 

Getprocaddress等。主要用于调用DELPHI和其它语言,特别是C++编译的DLL。
 

  假定你的DLL包括一个函数: 

  FunctionMyFunc(aparam:word):string;export; 

  首先在程序Type类型声明处加入一句: 



  Type 

  TMyfuncΚfunction(aparam:word):string; 

  此句的作用如同C++中声明的函数指针。 

  然后定义如下变量∶ 

  Var 

  aptr:TFarproc; 

  lhnd:THandle; 

  s:string; 

  其中Aptr,lhnd两变量声明必须有,s是DLL函数返回值,视情况而定。 

  在调用DLL处加入如下语句进行DLL装载: 

  lhnd:ΚLoadlibrary(′路径ιDLL文件名′);{ 

如lhnd:ΚLoadlibrary(′c:ιaaιbb.dll′); 

  aptr:ΚGetprocAddress(lhnd,′Myfunc′); 

  下面可直接调用DLL了: 

  s:ΚTMyfunc(bptr)(60);{根据函数填相应的变量参数} 

  调用完以后,用FreeLibrary释放DLL占用的内存: 

  FreeLibrary(lhnd); 

--
我能翻译善写作熟电脑会说话可是为什么没工作?

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.104.221.250]

[关闭][返回]