向上帝打申请了,下辈子再也不做程序员!! 上帝批复:OK!

调用外部 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.
posted @ 2009-03-17 14:48  zywuhao  Views(183)  Comments(0)    收藏  举报