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