Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
prog:lazarus:types:pointer [16/03/2020 17:18]
thierry créée
prog:lazarus:types:pointer [17/06/2023 17:09] (Version actuelle)
thierry [Changement de type grâce aux pointeurs]
Ligne 1: Ligne 1:
 ====== Pointers ====== ====== Pointers ======
-Source ​: [[https://​www.freepascal.org/​docs-html/​ref/​refse15.html]]+===== A Noter ===== 
 +== Remplir une variable de 0 == 
 +<code delphi>​ 
 +  ZeroMemory(@vVar,​SizeOf(vVar));​ 
 +</​code>​ 
 +== Length et SizeOf == 
 +Souvent dans les appels aux Api Windows on utilise un Buffer.\\ 
 +sous la forme adresse/​longueur comme : 
 +<code delphi>​ 
 +APIWindows(AHandle,​ pchar(vBuffer),​ length(vBuffer));​ 
 +</​code>​ 
 +On serait tenté d'​avoir la taille du Buffer avec ''​sizeof''​ (comme en C) mais il faut utiliser ''​length''​ 
 +<code delphi>​ 
 +   ​SetLength(vBuff,​24 );  
 +   ​vTestS:​=sizeof(vBuff); ​  // = 8 (la taille du pointeur probablement) 
 +   ​vTestL:​=length(vBuff); ​  // = 24 (la taille réelle du buffer) 
 +</​code>​ 
 +===== Changement de type grâce aux pointeurs ===== 
 +<code delphi>​ 
 +function IToQ(val: int64): QWord; 
 +var 
 +   pQ: PQWord; 
 +begin 
 +   ​pQ ​    := @val; 
 +   ​Result := pQ^; 
 +end; 
 + 
 +</​code>​ 
 +<note tip>Pour changer de type on peut utiliser aussi ''​absolute''​\\ 
 +Voir ici [[https://​wiki.freepascal.org/​Absolute]]</​note>​ 
 + 
 +===== Transmettre un Objet via un Int64 ===== 
 +==== Int64 -> TObject ==== 
 + 
 +<code delphi>​ 
 +var 
 +  vI:int64; 
 +  vO: TObject; 
 +begin 
 +  vO:​=TObject(pointer(vI));​ 
 +end; 
 +</​code>​ 
 +==== TObject -> Int64 ==== 
 +<code delphi>​ 
 +var 
 +  vI:int64; 
 +  vO: TObject; 
 +begin 
 +  vI:​=ptrint(vO);​ 
 +end; 
 +</​code>​ 
 + 
 + 
 + 
 +===== 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]]