delphi DLL动态链接库

2016-08-22 10:22:29来源:http://kaixinbuliao.blog.51cto.com/2567365/1135831作者:鹅倌人点击


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


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台