Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
prog:lazarus:types:pointer [26/03/2020 19:23]
thierry [A Noter]
prog:lazarus:types:pointer [17/06/2023 17:09] (Version actuelle)
thierry [Changement de type grâce aux pointeurs]
Ligne 5: Ligne 5:
   ZeroMemory(@vVar,​SizeOf(vVar));​   ZeroMemory(@vVar,​SizeOf(vVar));​
 </​code>​ </​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>​
 +
  
  
Ligne 10: Ligne 57:
   *  [[https://​www.freepascal.org/​docs-html/​ref/​refse15.html]]   *  [[https://​www.freepascal.org/​docs-html/​ref/​refse15.html]]
   * [[https://​wiki.freepascal.org/​Pointer/​fr]]   * [[https://​wiki.freepascal.org/​Pointer/​fr]]
 +  * [[https://​pascal.developpez.com/​cours/​cyberzoide/?​page=pg_Pointers]]
 +  * [[https://​www.tutorialspoint.com/​pascal/​pascal_memory.htm]]