Dadurch, dass ich Code aufgeräumt habe, ist ein neues Problem entstanden.
Ich demonstriere es am besten mit Dummy-Code
Unit 1
Delphi-Quellcode:
// procedure 1
var // <== NICHT global, sondern in Procedure 1 !
DataRecord: TDataRecord;
begin
DataRecord.A := -1;
DataRecord.B := 2;
// usw
DataUnit.ProcA(DataRecord);
Unit 2
Delphi-Quellcode:
// procedure 2
procedure TDataUnit.ProcA(aDataRecord: TDataRecord);
begin
if not IsDataOK(aDataRecord) then
Exit;
showmessage( aDataRecord.A ); // ist noch immer -1, sollte 0 sein.
// ansonsten erzeuge hier Klasseninstanz von XYZ anhand der Daten von aDataRecord + schiebe diese Instanz in eine generische TList.
end;
Delphi-Quellcode:
// procedure 3
functionTDataUnit.IsDataOK(var aDataRecord: TDataRecord): Boolean;
begin
Result := False;
// überprüfe Daten (strings und integer) aus aDataRecord.
// Wenn etwas kaputt ist, korrigiere es. Beispiel
if aDataRecord.A < 0 then
aDataRecord.A := 0;
// Bei einer ganz bestimmten Sache wird ggf. Raise ausgelöst (von mir). Dann wird eh abgebrochen.
Result := True;
end;
Ich dachte, dass ich wegen des Var-Parameters in IsDataOK() in Prozedur 3 nun die korrigierten Daten in Prozedur2 weitergeben kann.
Wo ist mein Fehler?
Ich könnte das Record auch in der
Unit-2 selber deklarieren statt in
Unit 1 in der Prozedur.
Aber ich weiß nicht ob das Nebenwirkungen hat. Dann wär ich aber die ganzen var-Parameter los.