コンパイルが簡単ですが、アクセス違反を発生させる簡単なコードです。それは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に驚いていますか?あなたはMakeMethodにNilを渡します。 – MartynA
バイトの配列にポインタを置くと同じことが起こります。 – Djole
@MartynAあなたのコメントは完全に間違っています。 'MD'は' data'ポインタを参照しません。実際の失敗理由はパラメータの不一致です。 –