调用外部 DLL 中的函数(2. 晚绑定)


unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;



type

  //晚绑定,也就是动态调用外部函数主要用以下三个命令:

  //LoadLibrary:获取 DLL

  //GetProcAddress:获取函数

  //FreeLibrary:释放



  //定义一个过程类型,参数要和需要的函数一致

  TMB = function(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;



  TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

  private

    MB: TMB;  {声明函数 MB}

    inst: LongWord;  {声明一个变量来记录要使用的 DLL 句柄}

  public

    { Public declarations }

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}



procedure TForm1.FormCreate(Sender: TObject);

begin

  inst := LoadLibrary('user32.dll');

  if inst <> 0 then

    MB := GetProcAddress(inst, 'MessageBoxW');

//    MB := GetProcAddress(inst, 'MessageBoxA'); {Delphi 2009 之前的版本用这句}

end;



//调用测试:

procedure TForm1.Button1Click(Sender: TObject);

var

  t,b: PChar;

begin

  t := '标题';

  b := '内容';

  MB(0, b, t, 0);

end;



procedure TForm1.FormDestroy(Sender: TObject);

begin

  FreeLibrary(inst);  {记得释放}

end;



end.

你可能感兴趣的:(dll)