科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Delphi中动态链接库两种调用方式的比较

Delphi中动态链接库两种调用方式的比较

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文阐述了Windows环境下动态链接库的概念和特点,对静态调用和动态调用两种调用方式作出了比较。

作者:王建国 丁丽丽 来源:yesky 2007年11月1日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
四、DLL的两种调用方式在Delphi中的比较

  编写DLL的目的是为了输出例程供其他程序调用,因此在DLL的工程文件中要把输出的例程用Exports关键字引出。在调用DLL的应用程序中,需要声明用到的DLL中的方法,声明格式要和DLL中的声明一样。访问DLL中的例程有静态调用和动态调用两种方式。静态调用方式就是在单元的Interface部分用External指示字列出要从DLL中引入的例程;动态调用方式就是通过调用Windows的API包括LoadLibrary函数、GetProcAddress函数以及FreeLibrary函数动态的引入DLL中的例程。

  静态调用方式所需的代码较动态调用方式所需的少,但存在着一些不足,一是如果要加载的DLL不存在或者DLL中没有要引入的例程,这时候程序就自动终止运行;二是DLL一旦加载就一直驻留在应用程序的地址空间,即使DLL已不再需要了。动态调用方式就可解决以上问题,它在需要用到DLL的时候才通过LoadLibrary函数引入,用完后通过FreeLibrary函数从内存中卸载,而且通过调GetProcAddress函数可以指定不同的例程。最重要的是,如果指定的DLL出错,至多是API调用失败,不会导致程序终止。以下将通过具体的实例说明说明这调用方式的使用方法。

  1. 静态调用方式

  示例程序创建了一个DLL,其中仅包含一个求两个整数的和的函数,在主程序中输入两个整数,通过调用该DLL,即可求出两个整数的和,如图1所示。


     图1 DLL的静态调用

  该DLL的程序代码如下:

library AddNum;
uses
SysUtils,
Classes;

{$R *.res}

function AddNumber(Num1,Num2:integer):integer;stdcall; //定义求和函数
 begin
  result:=Num1+Num2;
 end;
  exports
  AddNumber; //引出求和函数
 begin
end.

  主程序在调用该DLL时,首先在interface部分声明要调用的函数:

function AddNum(Num1,Num2:integer):integer;stdcall;external 'AddNum.dll'
name 'AddNumber';

  然后在按钮控件的事件中写入如下代码:

procedure TForm1.Button1Click(Sender: TObject);
var
 Number1,Number2:integer;
 Sum:integer;
begin
 Number1:=strtoint(Edit1.Text);
 Number2:=strtoint(Edit2.Text);
 Sum:=AddNum(Number1,Number2); //调用求和函数计算结果
 Edit3.Text:=inttostr(Sum);
end;
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章