Delphi dll定义与调用

1.dll定义

library testdll;

uses
  SysUtils,
  Classes;
Function add (X,Y:integer ):integer;stdcall ;
begin
  Result := X+Y;
end ;
{$R *.res}
exports
  add ;
begin
end.

2.静态调用dll

       优点:可以通过depends查看dll依赖项,同时在程序执行前就可以知道程序的是否完整

       缺点:如果dll不使用也会被加载进来,造成内存浪费,某个dll损坏,也会造成整程序不能运行

unit usedll;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

Function add (X ,Y :integer ):integer;stdcall ;external 'E:\test5\testdll.dll' ;
implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
  ShowMessage (IntToStr(add(30,50))) ;
end;
end.


3.动态调用dll

          缺点:不能查看dll依赖项,程序执行前不能知道程序是否完整,某个dll损坏不可以预知

         优点:dll按需加载到内存,节省内存,部分dll损坏不影响程序的其他部分正常运行

unit usedll;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
implementation


{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  handle:THandle;
  sdll:string;
  add:function(x,y:integer):integer;StdCall;
begin
  sdll:='E:\dll\testdll.dll';
  handle:=LoadLibrary(PAnsiChar(sdll));
  if handle<>0 then
  begin
    @add:=GetProcAddress(handle, 'add');
    if @add<>nil then
    ShowMessage(IntToStr(add(2,2)));
    FreeLibrary(handle);
  end;
end;
end.

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值