delphi DLL动态链接库
假设有两个应用程序,它们都要调用一个单元中的一个方法,那么这两个应用程序都要在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动态链接库相关推荐
- DELPHI 7 动态链接库DLL断点调试
DELPHI 7 动态链接库DLL断点调试 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 作者博客: CSDN博客:http://blog. ...
- DLL动态链接库的工作原理
DLL动态链接库的工作原理 分类: VC++神奇理论2012-08-29 11:12 2635人阅读 评论(0) 收藏 举报 dll工作windowsexedelphimicrosoft " ...
- [轉]c#简单调用DELPHI DLL封装窗体
http://www.cnblogs.com/el-net/archive/2008/10/13/1309940.html dllimport Delphi dll dllimport dll Del ...
- VB无所不能之五:建立“标准”DLL动态链接库文件(1)
VB无所不能之五:建立"标准"DLL动态链接库文件(1) --作者:钟声 博客地址:http://useway.blog.51cto.com 动态链接库经常被认为是VC或者Deph ...
- 怎样用VB编写.DLL动态链接库文件 1
怎样用VB编写.DLL动态链接库文件 编号: QA000507 建立日期: 1999年2月10日 最后修改日期: 2006年8月13日 所属类别: Visual Basic - 其他方面 ...
- C# 调用 Delphi Dll链接库方法及示例
每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用Delphi DLL的方法进行介绍 首先要搞清楚一点的是:什么是托管,什么是非托管? 一般可以认为:非托管代码主要是基于win 32平台开发的 ...
- python库_python使用ctypes库调用DLL动态链接库_python
最近要使用python调用C++编译生成的DLL动态链接库,因此学习了一下ctypes库的基本使用. ctypes是一个用于Python的外部函数库,它提供C兼容的数据类型,并允许在DLL或共享库中调 ...
- php 动态引用dll文件路径,win平台环境变量与dll动态链接库搜索路径小结
今日需要做一个在cmd命令窗口下使用php.exe执行的php小程序,用于循环获取某API提供的json数据并进行分析后实时发送短信提醒. 用惯了linux下的直接命令窗口输入curl.php等命令而 ...
- python 加载DLL动态链接库
软件+环境:VS2013.C#.pycharm.python3.8 一.利用VS2013 编写 dll 1.新建项目,请把名称写的容易识别一点 2.代码如下,大致就包含两个函数,一个返回 一列字符串, ...
最新文章
- Javascript之DOM(Document类型)
- [SIGMOD 10] Pregel 基于BSP的大规模图处理系统 学习总结
- (二)GitHub的使用随记
- python基本数据类型float_Python基本数据类型
- 扬州打工人租房编年史
- IIS SSL证书 指定的登录会话不存在,可能已被终止 HRESULT:0x80070520
- FileInputStream实现读取文件内容并输出到屏幕上
- 解决windows 您没有权限访问\\192.168.1.X(局域网) 请与网络管理员联系请求访问权限
- chrome官网下载网址
- python josn数据解析
- mysql关于xsd数据集的论述
- GWT(Google Web Toolkit)是干嘛用的
- 卡西欧计算器说明书获取方法
- python绘图设置正交坐标等距_python – 使用cartopy在其他项目中绘制投影数据
- 微信扫码 android sdk,H5中js-sdk扫码功能,Android手机微信中无法调用扫码?
- Neutron的介绍
- 淘宝商品详情API接口
- BZOJ 2140 稳定婚姻题解
- 组合m3u8视频为一个文件,m3u8转换为mp4
- EasyNVR实现海康、大华NVR硬盘录像机Web无插件播放方案(支持取特定时间段视频流)
热门文章
- redis sorted_set数据类型常用命令及跳表skip_list原理
- Spring声明式事务管理
- python反爬虫策略ppt_了解python爬虫怎样对抗反爬虫策略-
- 单片机数码管从00到99C语言_MSP430单片机轻松入门与实践 — 畅学单片机
- mysql 140824,Oracle 12c创建可插拔数据库(PDB)及用户
- sklearn朴素贝叶斯分类器_朴素贝叶斯原理
- 数据结构与算法 / 字符串匹配 / BF、PK 算法
- java EF6,EF Core 2.0和EF6(Entity Framework 6)中配置实体映射关系
- c语言期末作业自己设计个小程序,帮看一个小程序吧,c语言期末考…求求各位大神了...
- html表单的常用属性有哪些,html/form表单常用属性认识