====== Pointers ====== ===== A Noter ===== == Remplir une variable de 0 == ZeroMemory(@vVar,SizeOf(vVar)); == Length et SizeOf == Souvent dans les appels aux Api Windows on utilise un Buffer.\\ sous la forme adresse/longueur comme : APIWindows(AHandle, pchar(vBuffer), length(vBuffer)); On serait tenté d'avoir la taille du Buffer avec ''sizeof'' (comme en C) mais il faut utiliser ''length'' SetLength(vBuff,24 ); vTestS:=sizeof(vBuff); // = 8 (la taille du pointeur probablement) vTestL:=length(vBuff); // = 24 (la taille réelle du buffer) ===== Changement de type grâce aux pointeurs ===== function IToQ(val: int64): QWord; var pQ: PQWord; begin pQ := @val; Result := pQ^; end; Pour changer de type on peut utiliser aussi ''absolute''\\ Voir ici : [[https://wiki.freepascal.org/Absolute]] ===== Transmettre un Objet via un Int64 ===== ==== Int64 -> TObject ==== var vI:int64; vO: TObject; begin vO:=TObject(pointer(vI)); end; ==== TObject -> Int64 ==== var vI:int64; vO: TObject; begin vI:=ptrint(vO); end; ===== Sources ===== * [[https://www.freepascal.org/docs-html/ref/refse15.html]] * [[https://wiki.freepascal.org/Pointer/fr]] * [[https://pascal.developpez.com/cours/cyberzoide/?page=pg_Pointers]] * [[https://www.tutorialspoint.com/pascal/pascal_memory.htm]]