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....