Einzelnen Beitrag anzeigen

Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#5

Re: GUID an ListView anhängen

  Alt 6. Mai 2005, 12:34
Zitat von mumu:
nur was macht das hier anders?
Delphi-Quellcode:
var guid: PGUID;
listview1.Items[0].Data := guid;
ich hab immer gedacht, dass PGUID ein Pointer auf ein TGUID Objekt ist.
wir das dann nicht genauso auf dem Stack abgelegt und ich hab das selbe wie vorher, was ist da genau der unterschied?

gruß

//Edit
wird durch das new ein neuer Speicherplatz reserviert und sozusagen ein copy gemacht. wie würde das mit einem Record sein? wenn man hier New macht? wird dann eine komplette kopie des records angelegt, oder wie schaut das aus?
New reserviert auf dem Heap (nicht Stack) Speicher (Grösse gemäss dem Variablen-Typ).
Kopiert wird allerdings nichts, lediglich reserviert, und je nach Variablen-Typen initialisiert (sprich: meist genullt).

Nach
Delphi-Quellcode:
var guid: PGUID;
begin
  New(guid);
ist guid ein Pointer auf eine Speicherstelle im Heap, mit der Grösse SizeOf(TGUID).

und beim Aufruf CoCreateGuid(Guid^); wird dieser Pointer dereferenziert (^), so dass sich die Operation auf den effektiven Speicherbereich auf dem Heap bezieht.

übrigens: TGUID ist ein record

ev. hilft dies für das Verständnis:
New(guid); könnte man durch dies ersetzen:
Delphi-Quellcode:
guid:=AllocMem(SizeOf(TGUID));
ZeroMemory(guid); // dies ist lediglich sinngemäss (new macht mehr)
ich hoffe, dies erklärt die Sache etwas....
  Mit Zitat antworten Zitat