手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

Delphi 动态链接库编程(二)

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

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返回这一目录的路径;

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!