//-----------DPR----------
unit test;
..........
type
TTerminalProc=Procedure();stdcall;
...
var
Form1: TForm1;
procedure StartT(TerminalProc:TTerminalProc); stdcall; external 'testdll.dll';
.......
procedure TerminalProc();stdcall;
begin
ShowMessage('回调');
end;procedure TForm1.Button1Click(Sender: TObject);
begin
StartT(@TerminalProc);
end;//--------------DLL--------------
library testdll;
........
type
TTerminalProc = procedure(); stdcall;
...
var
dllTerminalProc:TTerminalProc;
........
procedure StartT(TerminalProc:TTerminalProc); stdcall;
begin
dllTerminalProc:=TerminalProc;
if Assigned(dllTerminalProc) then dllTerminalProc;//此时调用显示'回调'提示
..................
end;..................
//下面这个函数是由其它事件触发的
procedure ActNow();stdcall;
begin
if Assigned(dllTerminalProc) then dllTerminalProc;//此时调用不会显示'回调'提示
end;
exports
StartT;
unit test;
..........
type
TTerminalProc=Procedure();stdcall;
...
var
Form1: TForm1;
procedure StartT(TerminalProc:TTerminalProc); stdcall; external 'testdll.dll';
.......
procedure TerminalProc();stdcall;
begin
ShowMessage('回调');
end;procedure TForm1.Button1Click(Sender: TObject);
begin
StartT(@TerminalProc);
end;//--------------DLL--------------
library testdll;
........
type
TTerminalProc = procedure(); stdcall;
...
var
dllTerminalProc:TTerminalProc;
........
procedure StartT(TerminalProc:TTerminalProc); stdcall;
begin
dllTerminalProc:=TerminalProc;
if Assigned(dllTerminalProc) then dllTerminalProc;//此时调用显示'回调'提示
..................
end;..................
//下面这个函数是由其它事件触发的
procedure ActNow();stdcall;
begin
if Assigned(dllTerminalProc) then dllTerminalProc;//此时调用不会显示'回调'提示
end;
exports
StartT;
在你ActNow触发前,必须调用StartT,否则是不可能显示'回调'的
delphi自己调用自己的DLL是可以单步调试的,跟踪一下程序看看
dllTerminalProc:TTerminalProc; 这个完全多余的, procedure StartT(TerminalProc:TTerminalProc);
begin
if Assigned(TerminalProc) then TerminalProc;//此时调用显示'回调'提示
end;TerminalProc你能确保它不报错?