Mam osobny wątek (obiekt klasy pochodnej od TThread), który musi tworzyć dynamicznie wątki, przekazywać do procedury je obsugującej zmienną i dalej zajmować się swoimi sprawami. Robię to tak:

procedure Read(cRecord :Pointer); stdcall;
  var 
      CurrentRecord :WORD;

  procedure CloseAll;
    begin
      
      ...  

      ExitThread(0);
    end;

  begin
    CurrentRecord := Integer(cRecord);
    if CurrentRecord=0 then  ...
    else ...
   
    ... 

    CloseAll;
  end;

procedure TObserver.Execute;
begin
    while not Terminated do
        begin
            if elrReader.Wait then
                begin
                    CurrentRecord := elrReader.GetCurrentRecord;
                    CreateThread(nil,20,@Read,Pointer(CurrentRecord),0,ThreadID);
                    PThread := Pointer(TReaderPrinter.CreateReader(CurrentRecord,false));
                    elrReader.MoveToEnd;
                end;
        end;
end;

No i tu problem... Program kompilowany jest na Windows 2003 Server (tam też chodzi bez zarzutów), jednak po uruchomieniu go na Windows XP wszystko się sypie... Działa zupełnie losowo, potrafi każde zadanie w funkcji Read wykonywać koszmarnie długo (wyniki wypluwam to TMemo na głównym formularzu), aż do wystąpienia będu krytycznego i zamknięcia aplikacji. Jeśli usunę stdcall, to wszystki działa szybko, tyle, że wartość CurrentRecord nie jest przekazywana (ma wartość nil).

O co chodzi?