Wenn in FObject ein Pointer steckt musst du ihn erst dereferenzieren, bevor du an die Felder herankommst.
Hier mal ein kleiner Ausschnitt der 5.000 Möglichkeiten um typisiert an den Speicher der record Instanz zu kommen:
Delphi-Quellcode:
type
TSomeRecord = record
Value : Integer;
SubThinging : record
Value2 : Double;
end
end;
PSomeRecord = ^TSomeRecord;
var
instance : TSomeRecord;
untyped : Pointer;
typed : PSomeRecord;
begin
instance.Value := 1;
instance.SubThinging.Value2 := 2.3;
untyped := @instance;
typed := PSomeRecord(untyped);
WriteLn(typed^.Value, typed^.SubThinging.Value2);
WriteLn(typed.Value, typed.SubThinging.Value2);
WriteLn(PSomeRecord(untyped)^.Value,
PSomeRecord(untyped)^.SubThinging.Value2);
WriteLn(PSomeRecord(untyped).Value,
PSomeRecord(untyped).SubThinging.Value2);
WriteLn(TSomeRecord(untyped^).Value,
TSomeRecord(untyped^).SubThinging.Value2);
end.
Das erledigt übrigens der Kompiler für dich, wenn du Klassen nimmst. Wobei er auch bei typisierten Pointern autom. dereferenziert.
edit: btw: Pass mit AnsiStrings in primitiven Typen auf. Du kannst dich nicht darauf verlassen, dass die Referenzzählung des Strings funktioniert: Er könnte dir unter'm Hintern gelöscht oder nie freigegeben werden.