简略的传递内存,忘大神们赐教
简单的传递内存,,忘大神们赐教~
请问为什么往过程里传递指针 给变了~~
------解决方案--------------------
加上stdcall就行了:
procedure ThreadRun(p: Pointer); stdcall;
------解决方案--------------------
BeginThread(nil, 0, @ThreadRun, @pt, 0, ID);

delphi中永远不要使用createthread来创建线程,使用 beginthread 来创建。
如果使用c++,也不要使用api createthread 来创建显示,应使用_beginthreadex。
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。