Différences
Ci-dessous, les différences entre deux révisions de la page.
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 17:30] thierry |
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 ====== | ||
+ | ===== 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 ===== | ===== Sources ===== | ||
* [[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]] | ||