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 [27/03/2020 14:37] thierry [A Noter] |
prog:lazarus:types:pointer [17/06/2023 17:09] (Version actuelle) thierry [Changement de type grâce aux pointeurs] |
||
---|---|---|---|
Ligne 9: | Ligne 9: | ||
sous la forme adresse/longueur comme : | sous la forme adresse/longueur comme : | ||
<code delphi> | <code delphi> | ||
- | APIWindows(AHandle, pchar(vBuffuer), length(vBuffer)); | + | APIWindows(AHandle, pchar(vBuffer), length(vBuffer)); |
</code> | </code> | ||
On serait tenté d'avoir la taille du Buffer avec ''sizeof'' (comme en C) mais il faut utiliser ''length'' | On serait tenté d'avoir la taille du Buffer avec ''sizeof'' (comme en C) mais il faut utiliser ''length'' | ||
Ligne 17: | Ligne 17: | ||
vTestL:=length(vBuff); // = 24 (la taille réelle du buffer) | vTestL:=length(vBuff); // = 24 (la taille réelle du buffer) | ||
</code> | </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 22: | 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]] | ||