我有这段代码>
type
TCallBack = procedure(APerc: Integer) of object;
...
procedure CallingProcedure(a, b, c: Integer; ACallBack: TCallBack = nil);
...
我从我的主类/对象中调用此函数,如下所示:
CallingProcedure(1, 2, 3, DoOnCallBack);
其中DoOnCallBack定义为:
procedure DoOnCallBack(APerc: Integer);
这编译好,不是问题 - 我做了很多次。
但是在CallingProcedure中,当我想检查Assigned(ACallBack)我是否会变错时。
有人可以告诉我我做错了什么。
我是从Thread调用的,这可能是个问题吗?
答案 0 :(得分:2)
我对你所说的地方没有任何差异。语法是一样的。我刚刚做了一个小小的测试示例:
type
TCallBack = procedure(APerc: Integer) of object;
TForm20 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure CallingProcedure(a, b, c: Integer; ACallBack: TCallBack = nil);
procedure DoOnCallBack(APerc: Integer);
public
{ Public declarations }
end;
var
Form20: TForm20;
implementation
{$R *.dfm}
procedure TForm20.CallingProcedure(a, b, c: Integer; ACallBack: TCallBack);
begin
if Assigned(ACallBack) then
ACallBack(a);
end;
procedure TForm20.DoOnCallBack(APerc: Integer);
begin
ShowMessage(IntToStr(APerc));
end;
procedure TForm20.FormCreate(Sender: TObject);
begin
CallingProcedure(1, 2, 3, DoOnCallBack);
CallingProcedure(1, 2, 3, nil);
end;
它运作得很好。 Ajust你的代码看起来像这样。由于您还没有发布您的真实代码,我只能猜出问题所在。