DLL:
library testCallBack;
uses
SysUtils,
Classes;{$R *.res}
type Tcallback = procedure(a:integer) of object; //1 dll中定义的回调步骤
var CallBack: TCallBack; //2 dll中定义的回调步骤function Call(var a:integer;CallBack: TCallBack):integer;stdcall; //3 dll中定义的回调步骤 应用程序调用这个函数,也是通过CallBack参数把应用程序中的回调函数实例地址传到dll 中;
var i,j: integer;
begin
j:=0;
for i:=0 to 100 do
begin
j:= j+ 1;
CallBack(j); //4 dll中定义的回调步骤 此函数是在客户端定义的,实际上是调用客户端的程序
end;
result:=j;
end;exports //输出CAll函数
Call;
end.EXE:
1
unit Unit2;interface
type Tcallback = procedure(a:integer) of object; //1应用程序定义回调函数 要加上 “of object”否则会出现 “regular procedure and method pointer“ 错误 //1 dll函数的定义 sedcall一定要加否则找不到dll的接口地址
function Call(var a:integer; CallBack:TCallBack):integer;Stdcall; //2应用程序定义回调函数 引用了回调变量
implementation
//2 dll函数的引用
//函数名 一定要和dll中函数大小写相同,否则出错
function Call; external 'testCallBack.dll' name 'Call' ;
end.
2unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Sockets, StdCtrls,Unit2;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure TestCallBack(a:integer); //3应用程序定义回调函数 定义一个回调函数实例 参数要同dll中定义的回调函数相同
end;var
Form1: TForm1;implementation
{$R *.dfm}
procedure TForm1.TestCallBack(a: integer);
begin
Memo1.Lines.Add(inttostr(a));
end;procedure TForm1.Button1Click(Sender: TObject);
var
a :integer;
begin
Call(a,TestCallBack); //4应用程序定义回调函数
end;end.
library testCallBack;
uses
SysUtils,
Classes;{$R *.res}
type Tcallback = procedure(a:integer) of object; //1 dll中定义的回调步骤
var CallBack: TCallBack; //2 dll中定义的回调步骤function Call(var a:integer;CallBack: TCallBack):integer;stdcall; //3 dll中定义的回调步骤 应用程序调用这个函数,也是通过CallBack参数把应用程序中的回调函数实例地址传到dll 中;
var i,j: integer;
begin
j:=0;
for i:=0 to 100 do
begin
j:= j+ 1;
CallBack(j); //4 dll中定义的回调步骤 此函数是在客户端定义的,实际上是调用客户端的程序
end;
result:=j;
end;exports //输出CAll函数
Call;
end.EXE:
1
unit Unit2;interface
type Tcallback = procedure(a:integer) of object; //1应用程序定义回调函数 要加上 “of object”否则会出现 “regular procedure and method pointer“ 错误 //1 dll函数的定义 sedcall一定要加否则找不到dll的接口地址
function Call(var a:integer; CallBack:TCallBack):integer;Stdcall; //2应用程序定义回调函数 引用了回调变量
implementation
//2 dll函数的引用
//函数名 一定要和dll中函数大小写相同,否则出错
function Call; external 'testCallBack.dll' name 'Call' ;
end.
2unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Sockets, StdCtrls,Unit2;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure TestCallBack(a:integer); //3应用程序定义回调函数 定义一个回调函数实例 参数要同dll中定义的回调函数相同
end;var
Form1: TForm1;implementation
{$R *.dfm}
procedure TForm1.TestCallBack(a: integer);
begin
Memo1.Lines.Add(inttostr(a));
end;procedure TForm1.Button1Click(Sender: TObject);
var
a :integer;
begin
Call(a,TestCallBack); //4应用程序定义回调函数
end;end.
这个步骤没什么用