Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
31. Mai 2006
Wo kommt den der Fehler und warum willst du unbedingt das gesamte Objekt din haben?
Es ist zumindestens Platzsparender, wenn nur der Pointer in der VTV steht und man bräuchte dann das Objekt nicht zu zerlegen...
Aber versuch es mal so:
Stream.Write(TSessionObject(Data.FObject).Name, Len);
Stream.Read(TSessionObject(Data.FObject).Name, Len);
oder...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
31. Mai 2006
zu deinem Projekt steht's ja sozusagen schon dort oben (Beitrag #7)
Du muß halt bedenken, das dein Objekt ja nicht nur aus einem zusammenhängendem Speicherblock besteht.
Var irgendwas: TSessionObject; ist halt nur ein Pointer auf das Objekt und in dem Objekt sind ja auch wiederum Pointer auf andere Dinge (z.B. die Strings).
Also, will man jetzt ein Objekt "nur" mit der VTV verbinden, dann...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
31. Mai 2006
Du speicherst nur einen Pointer auf das Objekt in den Stream ... das Objekt selber ist nicht in der VTV ... genaus wird es mit dem String gemacht (halt nur der Pointer auf den String in der VTV), nur das man da halt auf den Referenzzähler achten muß.
Du kannst natürlich den String auch in einem ShortString (String, odeer so) speichern, wobei der hortString wieder nur ein Record wäre und somit...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
31. Mai 2006
Im Grunde muß immer nur der DatenTyp angepasst werden. (abgesehn von den CompilerMagicSachen)
var Data: PString;
var Data: PInteger;
...
Wobei der String nicht dem Pointer übergeben wird (Strings und dynamische Arrays sind halt 'ne CompilerMagicSache), sondern der Pointer zum String gemacht wird und diesem dann erst der String gegeben wird (also andersrum).
Ein AnsiRING) hat ja eine...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
31. Mai 2006
jupp, du mußt halt nur den DatenTyp ändern Data: PTreeData; ist ja ein Pointer auf 'nen Record und du brauchst Data: TSessionObject; ... eine ObjektVariable ist ja schon ein Pointer auf ein Objekt, also kannst du auch gleich dieses nutzen und mußt es nicht nochmal über 'nen Pointer ansprechen ^^
Und dann halt nur noch Data.FObject...