假设有两个应用程序,它们都要调用一个单元中的一个方法,那么这两个应用程序都要在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;

转载于:https://www.cnblogs.com/taofengli288/archive/2011/09/06/2168669.html

delphi DLL动态链接库相关推荐

  1. DELPHI 7 动态链接库DLL断点调试

     DELPHI 7 动态链接库DLL断点调试           马根峰           (广东联合电子服务股份有限公司, 广州 510300) 作者博客: CSDN博客:http://blog. ...

  2. DLL动态链接库的工作原理

    DLL动态链接库的工作原理 分类: VC++神奇理论2012-08-29 11:12 2635人阅读 评论(0) 收藏 举报 dll工作windowsexedelphimicrosoft " ...

  3. [轉]c#简单调用DELPHI DLL封装窗体

    http://www.cnblogs.com/el-net/archive/2008/10/13/1309940.html dllimport Delphi dll dllimport dll Del ...

  4. VB无所不能之五:建立“标准”DLL动态链接库文件(1)

    VB无所不能之五:建立"标准"DLL动态链接库文件(1) --作者:钟声 博客地址:http://useway.blog.51cto.com 动态链接库经常被认为是VC或者Deph ...

  5. 怎样用VB编写.DLL动态链接库文件 1

    怎样用VB编写.DLL动态链接库文件 编号: QA000507     建立日期: 1999年2月10日 最后修改日期: 2006年8月13日 所属类别: Visual Basic - 其他方面   ...

  6. C# 调用 Delphi Dll链接库方法及示例

    每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用Delphi DLL的方法进行介绍 首先要搞清楚一点的是:什么是托管,什么是非托管? 一般可以认为:非托管代码主要是基于win 32平台开发的 ...

  7. python库_python使用ctypes库调用DLL动态链接库_python

    最近要使用python调用C++编译生成的DLL动态链接库,因此学习了一下ctypes库的基本使用. ctypes是一个用于Python的外部函数库,它提供C兼容的数据类型,并允许在DLL或共享库中调 ...

  8. php 动态引用dll文件路径,win平台环境变量与dll动态链接库搜索路径小结

    今日需要做一个在cmd命令窗口下使用php.exe执行的php小程序,用于循环获取某API提供的json数据并进行分析后实时发送短信提醒. 用惯了linux下的直接命令窗口输入curl.php等命令而 ...

  9. python 加载DLL动态链接库

    软件+环境:VS2013.C#.pycharm.python3.8 一.利用VS2013 编写 dll 1.新建项目,请把名称写的容易识别一点 2.代码如下,大致就包含两个函数,一个返回 一列字符串, ...

最新文章

  1. Javascript之DOM(Document类型)
  2. [SIGMOD 10] Pregel 基于BSP的大规模图处理系统 学习总结
  3. (二)GitHub的使用随记
  4. python基本数据类型float_Python基本数据类型
  5. 扬州打工人租房编年史
  6. IIS SSL证书 指定的登录会话不存在,可能已被终止 HRESULT:0x80070520
  7. FileInputStream实现读取文件内容并输出到屏幕上
  8. 解决windows 您没有权限访问\\192.168.1.X(局域网) 请与网络管理员联系请求访问权限
  9. chrome官网下载网址
  10. python josn数据解析
  11. mysql关于xsd数据集的论述
  12. GWT(Google Web Toolkit)是干嘛用的
  13. 卡西欧计算器说明书获取方法
  14. python绘图设置正交坐标等距_python – 使用cartopy在其他项目中绘制投影数据
  15. 微信扫码 android sdk,H5中js-sdk扫码功能,Android手机微信中无法调用扫码?
  16. Neutron的介绍
  17. 淘宝商品详情API接口
  18. BZOJ 2140 稳定婚姻题解
  19. 组合m3u8视频为一个文件,m3u8转换为mp4
  20. EasyNVR实现海康、大华NVR硬盘录像机Web无插件播放方案(支持取特定时间段视频流)

热门文章

  1. redis sorted_set数据类型常用命令及跳表skip_list原理
  2. Spring声明式事务管理
  3. python反爬虫策略ppt_了解python爬虫怎样对抗反爬虫策略-
  4. 单片机数码管从00到99C语言_MSP430单片机轻松入门与实践 — 畅学单片机
  5. mysql 140824,Oracle 12c创建可插拔数据库(PDB)及用户
  6. sklearn朴素贝叶斯分类器_朴素贝叶斯原理
  7. 数据结构与算法 / 字符串匹配 / BF、PK 算法
  8. java EF6,EF Core 2.0和EF6(Entity Framework 6)中配置实体映射关系
  9. c语言期末作业自己设计个小程序,帮看一个小程序吧,c语言期末考…求求各位大神了...
  10. html表单的常用属性有哪些,html/form表单常用属性认识