Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi An Speicher eine Komponente rankommen (https://www.delphipraxis.net/51466-speicher-eine-komponente-rankommen.html)

glkgereon 12. Aug 2005 19:15


An Speicher eine Komponente rankommen
 
hi

kann ich irgendwie an den Speicher, den eine Komponente belegt drankommen?
also nicht die größe sondern den Inhalt. Am besten einfach als Stream...

jbg 12. Aug 2005 19:25

Re: An Speicher eine Komponente rankommen
 
Das geht recht einfach. Aber die Komponente wirst du trotzdem nicht einfach in einen Stream schreiben können, denn wenn man einen Zeiger auflöst (Zugriff auf "Speicher" der Komponente) bekommt man tausende neue Zeiger.

Delphi-Quellcode:
type
  TMyComp = class(TObject)
  private
    Next: TMyComp;
    List: TList;
  public
    constructor Create;
    destructor Destroy; override;
  end;

var
  Buf: array of Byte;
  Comp: TMyComp;
begin
  Comp := TMyComp.Create;
  try
    Stream.Write(Pointer(Comp)^, Comp.InstanceSize);
  finally
    Comp.Free;
  end;
end;
Aber wie schon geschrieben, dass wird dir nichts bringen, denn damit würdest du in diesem Fall 12 Bytes schreiben (4 für den VMT Zeiger, 4 für "Next" und 4 für "List". Wenn du dass dann wieder lädst, hast du 3 Zeiger die ins Nirwana zeigen.

glkgereon 12. Aug 2005 20:15

Re: An Speicher eine Komponente rankommen
 
es geht mit weniger ums laden als vielmehr ums vergleichen.

kann ich denn einfach alle nicht-pointer-eigenschaften einer klasse rauskriegen?

jbg 12. Aug 2005 21:08

Re: An Speicher eine Komponente rankommen
 
Zitat:

Zitat von glkgereon
kann ich denn einfach alle nicht-pointer-eigenschaften einer klasse rauskriegen?

Das geht nur mit Ablesen.

Bei den published-Eigenschaften geht das dann schon, da der Compiler dafür Runtime Type Information erzeugt, die mittels der Funktionen aus der undokumentierten Unit TypInfo.pas ausgelesen werden können.

tigerman33 13. Aug 2005 09:26

Re: An Speicher eine Komponente rankommen
 
Es gibt doch eine Methode, die die VCL benutzt um die Designer-Informationen wegzuschreiben. Nennt sich glaub ich WriteComponent und ist entweder eine Methode von TComponent oder TStream (ich glaub aber letzteres). Damit müsstest du dann ja auch die ganzen properties schreiben können.

jbg 13. Aug 2005 10:05

Re: An Speicher eine Komponente rankommen
 
Zitat:

Zitat von tigerman33
Damit müsstest du dann ja auch die ganzen properties schreiben können.

Nur die published properties, wie ich ja bereits geschrieben habe. WriteComponent nutzt auch nur die RTTI.

glkgereon 13. Aug 2005 10:50

Re: An Speicher eine Komponente rankommen
 
wie gesagt, ich will nur auslesen, nicht nachher wieder in die kompo reintuen^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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