16,748
社区成员
发帖
与我相关
我的任务
分享
type
TMy=class
private
FValue:integer;
public
procedure MyTest;
constructor Create(i:integer);
destructor Destroy;override;
end;
PMy=^TMy;
TForm1 = class(TForm)
......
public
procedure My(var msg:TMessage);message WM_My;
end;
......
{TMy}
constructor TMy.Create(i:integer);
begin
inherited Create;
FValue:=i;
Form1.Memo1.Lines.Add('TMy.Create');
end;
destructor TMy.Destroy;//override;
begin
Form1.Memo1.Lines.Add('TMy.Destroy');
inherited;
end;
procedure TMy.MyTest;
begin
Form1.Memo1.Lines.Add('TMy.MyTest - FValue : '+inttostr(FValue));
end;
//************
procedure TForm1.My(var msg:TMessage);
var pmy:PMy;
begin
if msg.WParam=1 then
begin
pmy:=PMy(msg.LParam);
pmy.MyTest;
end;
end;
procedure TForm1.Button15Click(Sender: TObject);
var my:TMy;
begin
my:=TMy.Create(123);
my.MyTest;
PostMessage(handle,WM_My,1,integer(@my));
end;
procedure TForm1.Button16Click(Sender: TObject);
var my:TMy;
begin
my.MyTest;
end;
procedure TForm1.Button17Click(Sender: TObject);
var my:TMy;
begin
my:=TMy.Create(1);
my.MyTest;
my.Free;
end;
TMy.Create
TMy.MyTest - FValue : 123
TMy.MyTest - FValue : 123
TMy.MyTest - FValue : 14226404
TMy.Create
TMy.MyTest - FValue : 1
TMy.Destroy
procedure TForm1.My(var msg:TMessage);
var p:PMy;//pmy 改为 p
begin
if msg.WParam=1 then
begin
p:=PMy(msg.LParam);
p.MyTest;
end;
end;
procedure TForm1.Button19Click(Sender: TObject);
var i:integer;
my:TMy;
begin
if my=nil then
memo1.Lines.Add('nil')
else
memo1.Lines.Add('<> nil');
memo1.Lines.Add('integer(My) : '+inttostr(integer(My)));
My.MyTest;
copymemory(@i,pointer(integer(My)+sizeof(pointer)),sizeof(integer));
memo1.Lines.Add('i : '+inttostr(i));
end;
<> nil
integer(My) : 4388748
TMy.MyTest - FValue : -217126717
i : -217126717