@Basilikum: Danke für deine Antwort.
Zitat:
sie oben, plus: mit DWORD(t) greifst du auf die Adresse des Pointers zu, nicht auf den Speicher, auf den er zeigt... richtig dereferenziert wird mit: PDWORD(t)^ oder auch DWORD(t^)
Is mir schon klar, das war ein Überbleibsel vom Testen, da die Adresse bekannt war, wollte ich sie mir NACH der Übergabe anzeigen lassen.
Ich schreib mal, was ich geändert hab, damit es der Eine oder Andere verwenden kann, der das gleiche Problem hat:
Delphi-Quellcode:
procedure _run(const param: pointer); stdcall;
var
t: <Objektname>;
threadID: DWORD;
begin
t := <Objektname>(PDWORD(param^));
//Hier wird mit t gearbeitet (was übergeben wurde)
...
end;
Delphi-Quellcode:
procedure <Objektname>._start;
begin
...
fMainThread := CreateThread(nil, 0, @_run, @DWORD(Self), 0, fMainThreadID) //Änderung! Jetzt läuft's :-)
end;
procedure <Objektname>._stop;
begin
...
TerminateThread(fMainThreadID, 0)
end;
Wie man sieht, funktioniert es auch ohne New/Dispose - war aber trotzdem ein guter Gedanke.