博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
delphi DLL动态链接库
阅读量:5739 次
发布时间:2019-06-18

本文共 1148 字,大约阅读时间需要 3 分钟。

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

本文转自鹅倌51CTO博客,原文链接: http://blog.51cto.com/kaixinbuliao/1135831,如需转载请自行联系原作者

你可能感兴趣的文章
PostgreSQL数据库集群初始化
查看>>
++重载
查看>>
Rainbond 5.0.4版本发布-做最好用的云应用操作系统
查看>>
nodejs 完成mqtt服务端
查看>>
在ASP.NET MVC 中获取当前URL、controller、action
查看>>
Spring IoC容器初的初始化过程
查看>>
(23/24) webpack实战技巧:如何在webpack环境中使用Json
查看>>
sql server 触发器
查看>>
[工具]前端自动化工具grunt+bower+yoman
查看>>
2-14
查看>>
swift-UITableView的基本使用(例子)
查看>>
自动化测试之WatiN(2)
查看>>
无状态、REST、RESTful 和 Web Services【整理】
查看>>
用户登录框(含验证码)
查看>>
linux创建用户
查看>>
Pig Hive对比(zz)
查看>>
PageValidate 类
查看>>
ubuntu建立快捷方式
查看>>
java的基本数据类型
查看>>
C++ 之引用
查看>>