delphi dll

 

动态链接库(Dynamic Link Library)
  • 不是可执行的二进制文件
  • 包含一个可以由多个程序同时使用的代码和数据的库
  • 一般位于windows/system32下

调用dll的方式

  1. 外部声明
  2. 动态加载

创建dll

library TestDll;

uses
  SysUtils,
  Classes;

{$R *.res}

function min(num1,num2 : Integer) : Integer;stdcall;
begin
  if num1 < num2 then
    Result := num1
  else
    Result := num2;
end;

exports
  min;

begin
end.

 

调用dll

 

  1. 外部声明(静态调用)
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
      function min(num1,num2 : Integer) : Integer;stdcall; external 'TestDll.dll' name 'min';
    type
      TForm1 = class(TForm)
        edt1: TEdit;
        edt2: TEdit;
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
    
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.btn1Click(Sender: TObject);
    var
      N1,N2 : Integer;
    begin
      N1 := StrToInt(edt1.Text);
      N2 := StrToInt(edt2.Text);
      ShowMessage( IntToStr( min(N1,N2) ) );
    end;
    
    end.
     
  2. 动态加载
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        edt1: TEdit;
        edt2: TEdit;
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
    
      public
        { Public declarations }
      end;
    
      TMin = function (num1,num2 : Integer): Integer; stdcall;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.btn1Click(Sender: TObject);
    var
      OneHandle : THandle; //定义一个句柄变量
      min : TMin;
    begin
      OneHandle := LoadLibrary('TestDll.dll');
      try
        if OneHandle <> 0 then //如果载入成功则获取ShowCalendar函数的地址
          @min := GetProcAddress(OneHandle, 'min');
          if not (@min = nil) then
          //如果找到该函数则在主窗体的Label1中显示DLL窗体中设定的日期
            ShowMessage( IntToStr(min(StrToInt(edt1.Text),StrToInt(edt2.Text))));
      finally
        FreeLibrary(OneHandle); //调用完毕收回DLL占用的资源
      end;
    end;
    
    end.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值