Delphi 动态链接库编程(二)

2008-02-23 07:17:09来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

10.2.1.6 编写一般DLLs的应用举例 

  在下面的程序中我们把一个字符串操作的函数储存到一个DLLs中,以便需要的时候调用它。应该注意的一点是:为了保证这个函数可以被其它语言编写的程序所调用,作为参数传递的字符串应该是无结束符的字符数组类型(PChar类型),而不是Object Pascal的带结束符的Srting类型。程序清单如下:

library Example;

uses

SysUtils,

Classes;

{返回字符在字符串中的位置}

function InStr(SourceStr: PChar;Ch: Char): Integer; export;

var

Len,i: Integer;

begin

Len := strlen(SourceStr);

for i := 0 to Len-1 do

if SourceStr[i] = ch then

begin

Result := i;

Exit;

end;

Result := -1;

end;

exports

Instr Index 1 name 'MyInStr' resident;

begin

end. 

10.2.2 调用DLLs

  有两种方法可用于调用一个储存在DLLs中的过程。

  1.静态调用或显示装载

  使用一个外部声明子句,使DLLs在应用程序开始执行前即被装入。例如: 

  function Instr(SourceStr : PChar;Check : Char); Integer; far; external 'UseStr';

  使用这种方法,程序无法在运行时间里决定DLLs的调用。假如一个特定的DLLs在运行时无法使用,则应用程序将无法执行。

  2.动态调用或隐式装载

  使用Windows API函数LoadLibrayGetProcAddress可以实现在运行时间里动态装载DLLs并调用其中的过程。

  若程序只在其中的一部分调用DLLs的过程,或者程序使用哪个DLLs 调用其中的哪个过程需要根据程序运行的实际状态来判断,那么使用动态调用就是一个很好的选择。

  使用动态调用,即使装载一个DLLs失败了,程序仍能继续运行。 

10.2.3 静态调用

  在静态调用一个DLLs中的过程或函数时,external指示增加到过程或函数的声明语句中。被调用的过程或函数必须采用远调用模式。这可以使用far过程指示或一个{$F }编译指示。

  Delphi全部支持传统Windows动态链接库编程中的三种调用方式,它们是:

  ● 通过过程/函数名

  ● 通过过程/函数的别名

  ● 通过过程/函数的顺序号 

  通过过程或函数的别名调用,给用户编程提供了灵活性,而通过顺序号(Index)调用可以提高相应DLL的装载速度。 

10.2.4 动态调用 

10.2.4.1 动态调用中的API函数 

  动态调用中使用的Windows API函数主要有三个,即:LoadlibraryGetProcAddressFreelibrary

   1.Loadlibrary: 把指定库模块装入内存

  语法为: 

  function Loadlibrary(LibFileName: PChar): THandle; 

LibFileName指定了要装载DLLs的文件名,如果LibFileName没有包含一个路径,则Windows按下述顺序进行查找:

  (1)当前目录;

  (2)Windows目录(包含win.com的目录)。函数GetWindowDirectory返回这一目录的路径;

  (3)Windows系统目录(包含系统文件如gdi.exe的目录)。函数GetSystemDirectory返回这一目录的路径;

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Delphi 与SQL编程(一)

下一篇:开发Delphi对象式数据管理功能(九)