我遇到了一个问题,即在调用CreateThread时将类引用作为参数传递给ThreadProc。以下是演示我遇到的问题的示例程序:
program test;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows, Dialogs;
type
TBlah = class
public
fe: Integer;
end;
function ThreadProc(param: Pointer) : DWORD;
begin
ShowMessage(IntToStr(TBlah(param).fe));
Result := 0;
end;
var
tID: DWORD;
handle: THandle;
b: TBlah;
begin
b := TBlah.Create;
b.fe := 54;
handle := CreateThread(nil, 0, @ThreadProc, Pointer(b), 0, tID);
WaitForSingleObject(handle, INFINITE);
end.
调用ShowMessage
会弹出一个消息框,其中显示的是类似于245729105
而不是我期望的54
。
这可能只是对Delphi工作原理的基本误解,所以请问有人可以告诉我如何使其正常工作吗?
b.fe := 42;
,别忘了冒号 :) - KokonotsuTThread
有什么特别的原因吗?至于=
vs:=
,我猜我今天做了太多的 P/Invoke! - David Heffernan