Page 1 sur 1

nombres 64 bits

Publié : mar. 03/août/2004 23:59
par hardy
Problème : la fonction API opentrace renvoit un INT64 (pas son adresse). Mais PB ne supporte pas les "doubles".
Qui sait comment faire?

Publié : mer. 04/août/2004 0:16
par Oliv
va sur pureaera il y a une lib pour ça, il y a aussi un code de cédéravic sur le musée ou ici je crois

Publié : mer. 04/août/2004 0:22
par hardy
La lib permet de manipuler des nombres 64 bits déclarés comme structure :
structure double
low.l
high.l
endstructure

Mais PB considère ça comme une structure, et n'accepte pas un truc du genre a.double=callfunction(...)

Publié : mer. 04/août/2004 0:24
par Oliv
ah, ça je ne savais pas, je savais juste que ça existait

Publié : mer. 04/août/2004 7:21
par Anonyme2
hardy a écrit :La lib permet de manipuler des nombres 64 bits déclarés comme structure :
structure double
low.l
high.l
endstructure

Mais PB considère ça comme une structure, et n'accepte pas un truc du genre a.double=callfunction(...)

Essaye ceci (on accède à la variable avec son 1er élément)

Code : Tout sélectionner

a.double\low = callfunction(...)

Si la dll renvoie une adresse, utilise ceci

Code : Tout sélectionner

*MemoryID = AllocateMemory(8)   ; tu réserve 8 octets en mémoire soit 64 bits
Tu récupère la valeur avec CopyMemory()

Code : Tout sélectionner

CopyMemory(callfunction(...), ]*MemoryID , 8) 

En espérant qu'une des solutions fonctionne.

Publié : mer. 04/août/2004 9:52
par hardy
Non, elle ne renvoie pas d'adresse, sinon je n'aurait pas de problème.
Vais essayer a\low.
Sinon, Fred est dans le coin?
Faudrait savoir comment le callfunction marche.
Peut-être que l'on peut récupérer la valeur dans le registre (?)

Publié : mer. 04/août/2004 10:03
par hardy
Oui, a\lowpart=... marche. Le prog doit donner l'adresse de la variable où mettre le résultat, et la dll copier ce qu'il faut à partir de là. D'où ... pas de problème :D :D :D

Merci bien.