====== 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]]