【发布时间】:2016-07-12 08:18:26
【问题描述】:
这是我编译好的简单代码,但会引发访问冲突。它进入 MD 程序,调试器显示一些 X 和 Y 值,但在退出程序后发生 AV。希望有人能帮忙。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure MD(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
form1.caption:= inttostr(x)+ ' '+ inttostr(y);
end;
procedure TForm1.FormCreate(Sender: TObject);
function MakeMethod(data, code: pointer): TMethod;
begin
result.Data:= data;
result.Code:= code;
end;
begin
panel1.OnMouseDown:= TMouseEvent(MakeMethod(nil, @MD));
end;
end.
谢谢
【问题讨论】:
-
你对 AV 感到惊讶吗? - 你将 Nil 传递给 MakeMethod。
-
如果我将指针指向某个字节数组,也会发生同样的情况。
-
@MartynA,你的cmets完全是误导,
MD从不引用data指针,实际失败的原因是参数不匹配。 -
如果你不想让
MD成为TForm1的方法,你可以尝试我在这里描述的技术:stackoverflow.com/questions/11083336/…。 -
@Uli Gerhardt - 是的,我知道该解决方案并且它工作正常。然而,类过程的解决方案引发了我不理解的 Lazarus 的编译问题(这是我的主要兴趣)。但是,这应该是针对其他线程的。
标签: delphi lazarus freepascal