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 [22/05/2020 15:06] thierry [Sources] |
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> | ||
| + | |||