Einzelnen Beitrag anzeigen

Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Pointerfrage und eine Exception...

  Alt 22. Jun 2006, 11:17
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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat