简略的传递内存,忘大神们赐教

简单的传递内存,,忘大神们赐教~
implementation

var
  hHandle: THandle;
  I: Integer;
  pt: TPoint;

{$R *.dfm}

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  ID: DWORD;
begin
  pt.X := X;
  pt.Y := Y;
  CreateThread(nil, 0, @ThreadRun, Pointer(@pt), 0, ID);
end;                //运行到这里时@pt内存为 $D7B7A0

procedure ThreadRun(p: Pointer);   //但传进来后p内存为  $76F9ED5A
var
  X, Y: Integer;
  I: Integer;
  pt2: TPoint;
begin
  pt2 := PPoint(p)^;   
  X := pt2.X;
  Y := pt2.Y;
  for I := 0 to 1000000 do
    with Form1.Canvas do
    begin
      Lock;
      TextOut(X, Y, IntToStr(I));
      Unlock;
    end;
end;

end.


请问为什么往过程里传递指针 给变了~~

------解决方案--------------------
加上stdcall就行了:

procedure ThreadRun(p: Pointer); stdcall;
------解决方案--------------------
BeginThread(nil, 0, @ThreadRun, @pt, 0, ID);

简略的传递内存,忘大神们赐教


delphi中永远不要使用createthread来创建线程,使用 beginthread 来创建。
如果使用c++,也不要使用api createthread 来创建显示,应使用_beginthreadex。