首页 > Windows开发 > 详细

Delphi中DLL的创建和使用

时间:2015-03-27 18:58:25      阅读:166      评论:0      收藏:0      [点我收藏+]

参考:http://blog.csdn.net/ninetowns2008/article/details/6311663

1.DLL简介;2.调用DLL;3.创建DLL;4.两个技巧;5.初始化;6.例外处理

 

1.DLL简介

  DLL是Dynamic-Link Libraries(动态链接库)的缩写,库里面是一些可执行的模块以及资源(如:位图、图标……)。可以认为DLL和EXE基本上是一回事,只是DLL不能直接执行,而必须通过应用程序或者其他DLL调用。

  DLL为应用程序间的资源共享提供了方便,同时也是多种语言混合编程的重要手段。由此可见学习使用DLL是Windows程序员必须掌握的一项重要技术

 

2.如何调用DLL

在Delphi中有两种方法调用DLL中的函数和过程,及外部声明或动态加载

  <1>外部声明

  在Delphi中外部声明时访问外部例程最容易和最常用的方式,有两种声明方式:通过名字、通过索引号。举例如下:在MYDLL.DLL中有两个函数和一个过程,则其外部声明可以写成

function test: Integer;  external ‘mydll‘;
//直接通过名称调用test1(注意名称大小写敏感)

function test11: Integer; external ‘mydll‘ name ‘test1‘;
//通过名称调用test1,在程序中使用新名称(原名称仍然大小写敏感)

procedure test2; external ‘mydll‘ index 1;
//通过索引号调用TEST2。程序中可以使用与DLL中不一样的名称

  使用外部声明的缺点是程序启动时如果找不到mydll.dll将无法运行,即使没有调用其中的模块。动态加载的方法可以避免这种情况

  <2>动态加载

  通过调用Windows API中的相关函数,将DLL调入内存并获得指向函数或过程的指针,执行完模块后释放内存。除了节约内存之外,这种方法的很大的优点是能处理找不到dll或者装入过程中出错的情况。这样即使某个dll有问题,应用程序的其他部分仍然能够正常运行。动态加载的例子如下

var hDll : THandle;
    Test1 : function : integer;
begin
    hDll := LoadLibrary(‘mydll.dll‘);;
    if hDll < 32 then
        exit;    //如果Dll无法记载则跳出
    @Test1 := GetProcAddress(hDll, MakeIntResource(1));
    //取得mydll 中的第一个函数的地址
   
    ....
    FreeLibrary(hDll);
end;

  

3.用Delphi创建DLL

  用Delphi创建一个DLL是十分简单的,首先需要新建一个DLL的Project(如果使用Delphi3.0则可以在File->New对话框中选择DLL),当然也可以自己写,现在这个Project是这样的

library Project1;
uses SysUtils, Classes;
begin
end.

  当然这是一个空的DLL,现在让我们来加入一个函数,让它成为我们的第一个可以使用的DLL。完成后的文件是这样的

library dll1;
uses SysUtils, Classes;

function Test1(a, b: Integer): Integer;
begin
    Result := a+b;
end;

exports
    Test1 index 1;

begin
end.

  在这个DLL里我们声明了一个加法函数,然后用exports语句输出它,只有被输出的函数或过程才能被其他程序调用。exports语句的语法是

exports
    函数名 [index <n>];

  index<n>是为函数手工指定索引号,以便其他程序确定函数地址;也可以不指定,如果没有使用index 关键字,Delphi将按照exports 后的顺序从1开始自动分配索引号。现在我们可以调用这个DLL了,下面给出一个实例,运行后form1 的标题将变成 1+2=3

//声明部分
function Test1(a, b: Integer): Integer; external ‘dll1‘;    //注意此处是大小写敏感的

//运行部分
form1.caption := ‘1+2=‘ + IntToStr(test1(1,2));

  

4.使用DLL的两个技巧

  <1>把现有的项目改成DLL

  学会制作DLL之前,大多数程序员手中都积攒下来不少已经完成的项目,如果现在需要把这些项目做成DLL而不是可执行文件,重新写一遍显然是没有必要的,只要按照下面的步骤对已有的项目文件进行修改就可以了

    (1)打开项目文件(.DPR),删除单元底部 begin 和 end. 之间的所有语句(一般情况下这些语句是有Delphi 自动生成的)。如果项目中没有用到Form,则从uses 子句中删除表单单元(Form),然后转向(2)

    (2)对项目进行修改,令除了 Main Form之外的所有Form 都是动态生成的,这样我们只要在DLL 输出

Delphi中DLL的创建和使用

原文:http://www.cnblogs.com/xumenger/p/4372289.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!