做了一个测试,把函数指针作为参数来用
TOnMessage = procedure(Value: PChar) of object; stdcall;
POnMessage = ^TOnMessage;
procedure OnProcessMessage(Value: PChar);
begin
ShowMessage(Value);
end;
//测试
procedure Button1Click()
var
Address: POnMessage;
begin
Address:= @OnProcessMessage;
Address^('ok');//报内存错
end;
如上,当访问Address^('ok')时报内存访问错误
TOnMessage = procedure(Value: PChar) of object; stdcall;
POnMessage = ^TOnMessage;
procedure OnProcessMessage(Value: PChar);
begin
ShowMessage(Value);
end;
//测试
procedure Button1Click()
var
Address: POnMessage;
begin
Address:= @OnProcessMessage;
Address^('ok');//报内存错
end;
如上,当访问Address^('ok')时报内存访问错误
还要POnMessage干什么?
var
Address: TOnMessage;
begin
@Address := @OnProcessMessage;
Address('OK');
end;
// POnMessage = ^TOnMessage;
procedure OnProcessMessage(Value: PChar); stdcall; //这里加上stdcall
begin
ShowMessage(Value);
end;
//测试
procedure Button1Click()
var
Address: TOnMessage;
begin
Address := @OnProcessMessage;
Address('ok');
end;
//以上是你用了of object; stdcall;所以在以下。就得
POnMessage = ^TOnMessage;
procedure TForm1.OnProcessMessage(Value: PChar);
begin
ShowMessage(Value);
end;
//测试
procedure TForm1.Button1Click()
var
Address: POnMessage;
begin
Address:= @TForm1.OnProcessMessage;
//所以要上加的“TFORM1”,如果你在以上没有OF object的话就不用这样。。
Address^('ok');//报内存错
end;