delphi DLL动态链接库

来源:互联网 发布:mac口红whirl试色 编辑:程序博客网 时间:2024/05/21 10:21
 

假设有两个应用程序,它们都要调用一个单元中的一个方法,那么这两个应用程序都要在Uses语句中引用该单元。如果同时运行这两个应用程序,这个方法就会在内存中存在两份,这显然是内存的一种浪费,使用动态链接库就可以解决这个问题。

动态链接库DLL与其他应用程序通过动态链接技术来共享代码。如果一个应用程序使用了动态链接库,Win32系统保证内存中只有DLL的一份复制品,这是通过内存映射文件实现的。DLL首先被调入Win32系统的全局堆栈,然后映射到调用这个DLL的进程的地址空间,在Win32系统中,每个进程拥有自己的32位线性地址空间。如果一个DLL被多个进程调用,每个进程都会收到该DLL的一份映射。在Win32中,DLL可以看作是每个进程自己的代码。但是这并不是说物理内存中会分配DLL的多个实例。

DLL的优点:

(1)       共享代码、资源和数据

(2)       隐藏实现的细节

例如我们创建一个引用DLL的例子

(1)   新建――other---DLL Wizard 命名为:DLLTest

(2)   写一个加法函数

uses

  SysUtils,

  Classes;

function AddMethod(Num1,Num2 : Integer) : Integer ;stdcall;   //定义简单加法函数

  begin

    Result := Num1 + Num2;

  end;

  exports         //exports 子句用于引出DLL中要被其他应用程序调用 的函数或过程。

   AddMethod;

(3)   生成DLLTest.dll, 复制DLLTest.dll将其放在要引用该DLL项目工程下。

(4)   var

  Form10: TForm10;

  function AddMethod(Num1,Num2 : Integer) : Integer ;stdcall; external 'DLLTest.DLL'  //声明DLL方法

  name 'AddMethod';

implementation

{$R *.dfm}

procedure TForm10.btnEqualClick(Sender: TObject);

var

  num1, num2 : Integer;

begin

  num1 := StrToInt(edtFirst.Text );

  num2 :=StrToInt(edtSecond.Text );

  edtResult.Text :=IntToStr(AddMethod(num1,num2));  //直接使用DLL中的方法

end;

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 社保小红本丢了怎么办 小红本丢了怎么办 孩子小红本丢了怎么办 小学素质报告册丢了怎么办 小学生素质报告册丢了怎么办 高中素质报告册丢了怎么办 小升初素质报告单丢了怎么办? 三供一业移交后社区管理职能怎么办 初中政治总考不好怎么办 孩子上初一学习越来越差怎么办 胸经过整容后变得胸闷怎么办? 网瘾高中不学习怎么办 犯罪人逃到美国怎么办 10岁儿童偏胖怎么办 土地面积与实际面积不符怎么办 军转进省直单位双选失败怎么办 房改房楼龄到了70年怎么办 商品房房改房到70年后怎么办 公务员未享受房改政策怎么办 两套房改房违规怎么办 法院保全的物品在我家怎么办 西瓜视频答题结束了钱没提现怎么办 诚信答题密码忘了怎么办 我未成年杀了人怎么办 错过了网课考试怎么办? 2018广东省普法考试0分怎么办 小孩错过了小升初的考试怎么办 错过了自主招生考试怎么办? 科目一考试错过了时间怎么办 中学生网瘾怎么办济南远大认真 u盘安装不了系统怎么办 对敏感脆弱的青春期孩子怎么办? 脸变得很交黑怎么办 玩手机长痘痘了怎么办 青少年左侧后背突发疼痛怎么办 纵欲过度导致青少年白发怎么办 20岁了不想长大怎么办 网吧老板跑路了怎么办 网吧玩地下城卡怎么办 个人公积金封存之前厂子欠费怎么办 学生欠了2万块怎么办