![]() |
[solved] Pointerfrage und eine Exception...
Ich habe mir ein Objekt angelegt, dass aus einem record besteht. Das ganze kommt dann in ein VirtualTreeView. Das klappt alles perfekt, bis ich versucht habe, einen String-Teil des Objektes an einen String zu kopieren:
Delphi-Quellcode:
Wieso passiert das? Die Variable temp ist vom Typ string, .verantw ist ebenfalls ein string. Wahrscheinlich sagt gleich jemand, dass das nur ein Zeiger auf einen String ist, aber wieso klappt das dann bei "Celltext". Und wie muss ich die obige Zeile ändern?
temp:=TDetailObject(Data.FObject).verantw; <------- exception
[... hier manipuliere ich temp noch etwas ...] case Column of 0: Celltext := TDetailObject(Data.FObject).name; 1: Celltext := temp; //1: Celltext := TDetailObject(Data.FObject).verantw; <----- keine exception 2: Celltext := '---'; end; |
Re: Pointerfrage und eine Exception...
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:
Das erledigt übrigens der Kompiler für dich, wenn du Klassen nimmst. Wobei er auch bei typisierten Pointern autom. dereferenziert. :)
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. 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. |
Re: Pointerfrage und eine Exception...
OK, hat sich erledigt... Data wurde erst einige Zeilen später definiert... jetzt gehts doch. War doch nicht to Pointer-spezifisch...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz