Page 1 sur 1

Pointeur et ProcedureReturn

Publié : dim. 03/févr./2008 17:40
par Octavius
J'ai beau cherché je ne trouve pas la réponse. Dans un programme j'ai une procédure qui doit me renvoyer une adresse mémoire avec un ProcedureReturn. Le problème c'est que je ne peux pas déclarer ma procédure avec le format "pointeur". Je m'explique, dans l'aide de PB, ils disent de déclarer nos procédures comme suit :

Code : Tout sélectionner

Declare.l MaProcedure(MaVariable.b)
Si j'ai un ProcedureReturn dans ma procédure le format de ma variable de réponse sera "Long" car c'est un ".l" qui suit "Declare".
Comment je fais pour avoir une procédure au format "pointeur" ? Dans l'aide de PB ils disent que le format des pointeurs est "Long" ou "Quad" en fonction des processeurs. Ma procédure fonctionne très bien, que je mette la variable au format "Long", "Quad", ou encore si je ne déclare pas le type de variable (mais je crois que c'est "Long" par défaut, je ne suis pas sûr). Est-ce que ça marchera pareil avec tous les processeurs ? Ou est-ce que mon programme plantera sur les processeurs 64 bits ? Suis-je obligé de mettre le format "Quad" pour être sûr que ça marche chez tout le monde ?

Publié : dim. 03/févr./2008 17:49
par Chris
La réponse est dans la question, il me semble.
Dans l'aide de PB ils disent que le format des pointeurs est "Long" ou "Quad" en fonction des processeurs.
Comme un pointeur reçoit uniquement une adresse mémoire comme valeur, sa taille en mémoire sera celle qui permettra de représenter une adresse du processeur :
- Sur un processeur 32 bits, les adresses sont représentées sur 32 bits, par conséquent un pointeur prendra 32 bits en mémoire (soit 4 octets comme une variable de type ‘long').
- Sur les processeurs 64 bits, les adresses sont représentées sur 64 bits, ce qui implique qu'un pointeur prendra 64 bits en mémoire (soit 8 octets comme une variable de type ‘quad')
.

C'est pour cette raison qu'un pointeur est une variable dite de type pointeur car son encombrement en mémoire sera lié à la capacité d'adressage mémoire du processeur.
Il en découle qu'affecter un type à un pointeur (*Pointeur.l, *Pointeur.b…) n'a aucun sens puisque l'encombrement mémoire d'un pointeur est imposé par celui d'une adresse et non par celui d'un type.

Publié : dim. 03/févr./2008 17:51
par Octavius
Ben oui ça j'y ai lu, mais je comprends pas bien. (désolé j'suis ptet un peu con...)

En bref, je mets quoi après mon Declare ?

Publié : dim. 03/févr./2008 17:55
par Chris
A mon avis, rien. Juste ta procédure, sans le type.

Publié : dim. 03/févr./2008 18:02
par Octavius
Ok! Je croise les doigts pour que ça plante pas chez d'autres gens!

Publié : dim. 03/févr./2008 18:06
par comtois
PureBasic compile uniquement en 32 bits , et pour un moment encore, donc pas de soucis de plantage.

Publié : dim. 03/févr./2008 18:18
par nico
Il me semble que lorsqu'on ne déclare pas de type, il est considérer comme un long comme pour les variables, donc tu peux mettre le .l si tu veux.

Publié : dim. 03/févr./2008 19:02
par tmyke
En effet, PB ne reconnais comme argument de retour d'une procedure les pointeurs.
Il te faut mettre '.l'. Cela fonctonne très bien, même si au niveau syntaxe cela
parait pas tip-top au prime abord. ;)