Pointeur et ProcedureReturn

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Pointeur et ProcedureReturn

Message 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 ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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.
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message 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 ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

A mon avis, rien. Juste ta procédure, sans le type.
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

Ok! Je croise les doigts pour que ça plante pas chez d'autres gens!
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

PureBasic compile uniquement en 32 bits , et pour un moment encore, donc pas de soucis de plantage.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message 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. ;)
Force et sagesse...
Répondre