@Uwe Raabe: Es funktioniert tatsächlich auf diese Weise, vielen Dank!
Wenn man sich das ganze im Speicher anschaut, ist es auch logisch, weil die Delphi-Bezeichner für die Variablen der Klasse eine Art Pointer-Gerüst darstellen, welches sich relativ vom Klassennamen aufbaut. Wenn man nun BeginThread ohne weitere Parameter aufruft, wird bei der Pointerberechnung 00000000 + <relative Adresse> gerechnet, was natürlich Quatsch ist, weil wir dann sonstwo im Speicher rauskommen, aber nicht in unserer Klasse. Vielen Dank nochmals.
@alzaimar: Methoden (Funktionen/Proceduren die Member einer Klasse sind), sind selbstverständlich in der Lage, auf Variablen dieser Klasse zuzugreifen, weil die Methoden mit Instanziert werden. Ein kleines Bsp:
Delphi-Quellcode:
type
TMeineKlasse = class
private
iMeineVariable : Integer;
public
function iMeineMethode(iParameter:Integer;):Integer;
end;
//...
function TMeineKlasse.iMeineMethode(iParameter:Integer;):Integer;
begin
Result:= iMeineVariable + iParameter;
end;
Das ist ohne Probleme compilierbar.
Zu verwenden auf folgende Art und Weise:
Delphi-Quellcode:
var
MeinObjekt : TMeineKlasse;
ausgabe : Integer;
//...
MeinObjekt:= TMeineKlasse.Create;
MeinObjekt.iMeineVariable:= 5;
ausgabe:= MeinObjekt.iMeineMethode(5);
//ausgabe ist nun 10
Da es jetzt nur handgeschrieben ist, verzeiht mir bitte Syntaxfehler. Wenn jedoch systematische oder logische Fehler enthalten sind, weißt mich darauf hin. (-;
MfG Mega.
edit: Nochmal fix zur Erklärung: Der Crash beim Threadaufruf kam, weil die Speicheradresse falsch kalkuliert wurde.