Das mit dem Service war mein Fehler, hat damit eigentlich nichts zu tun, tritt genauso in der Applikation auf.
Konnte jetzt aber folgendes Phänomen beobachten.
Ich habe eine Klassenhirarchie die folgendermassen aussieht:
Delphi-Quellcode:
TBaseClass = class of TBasis;
TBasis = class(TObject)
TMitarbeiter = class(TBasis)
published
property Name: string read FName write FName;
end;
TChef = class(TBasis)
published
property Titel: string read FTitel write FTitel;
end;
all diese Klassen sind unter der Compilerdirektive {$M+} definiert (im SourceCode natürlich vollständiger).
Jetzt habe ich eine Prozedur in welcher eine Klassenname übergeben wird, aus welcher die entsprechenden Properties ausgelesen werden sollen. Diese schaut (gekürzt) folgendermassen aus:
Delphi-Quellcode:
procedure Synchronize(aClass: TBaseClass);
var
lBasisClass: TBasis;
lPropList: TPropList;
i: integer;
begin
lBasisClass := aClass.Create;
GetPropList(lBasisClass.ClassInfo, tkProperties, @lPropList);
i := 0;
while ((lPropList[i] <> nil) and (i < high(lPropList))) do
begin
//Properties entsprechend setzen
case PropType(lBasisClass , lPropList[i].Name) of
tkInteger:
SetOrdProp(lBasisClass , lPropList[i].Name, lQry.FieldByName(lPropList[i].Name).AsInteger);
tkFloat:
SetFloatProp(lBasisClass , lPropList[i].Name, lQry.FieldByName(lPropList[i].Name).AsFloat);
tkString, tkLString:
SetStrProp(lBasisClass , lPropList[i].Name, lQry.FieldByName(lPropList[i].Name).AsString);
end;
inc(i);
end;
lBasisClass.Free;
end;
Wenn ich diese Prozedur mit dem Parameter TMitarbeiter aufruf klappt alles. Beende ich das Programm und rufe die Prozedur mit Paramter TChef auf klappt auch alles. Rufe ich aber zuerst TMitarbeiter und dann TChef auf, ohne dazwischen das Programm zu beenden, findet er die Properties von TMitarbeiter. Dies funktioniert auch andersrum so.
Was könnte ich tun?