У меня проблема с передачей ссылки на класс в качестве параметра ThreadProc при вызове CreateThread. Вот пример программы, которая демонстрирует мою проблему:
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, поэтому кто-то может подсказать, как это работает правильно?