OVH Cloud OVH Cloud

Gestion des pointeurs en mémoire

6 réponses
Avatar
el
Bonjour,

Ci dessous un bout de code, Pourriez-vous effectuer chacun des cas (en
mettant en commentaire les autres) et me donner vos résultats avec la
version WD75 que vous utilisez. Merci.

Tout vient du fait que je souhaite avoir dans un tableau (dans une DLL) les
adresses mémoires de certaines variables (entier, monétaire et chaine de
caractères) et que je souhaite faire "pointer" des variables de même type
sur ces adresses. Pour les entiers je n'ai AUCUN pb. Pour les monétaires, je
dois passer par la fonction transfert et là je me casse un peu les dent.

Si je comprends les conclusions des différents tests ci dessous, la taille
du monétaire chargé en mémoire varie à chaque affectation et çà çà me
dépasse un peu :-( car je pensais que 4 octets c'était toujours 4 octets

Merci aux experts de m'aider.

Emmanuel Lecoester

------------------------------------------
mondouble est un monétaire
mondoublehost est un monétaire

//CAS 1 : passage de la taille de mondouble : OK
mondouble=682/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondouble))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondouble))

//CAS 2 : passage de la taille de mondoublehost : KO
mondouble=682/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

//CAS 3 : passage de la taille de mondoublehost la 2eme fois : OK
mondouble=682/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

mondouble=61112/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

//CAS 4 : initialisation de mondoublehost : OK en fonction de la valeur
d'init
mondoublehost=6.55957
mondouble=61112/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

//CAS 5 : initialisation à 0 de mondoublehost : K0
mondoublehost=0
mondouble=61112/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

6 réponses

Avatar
Philippe
9/9/9
11/11/8

Le fait de mettre mondoublehost à 0 te modifie la taille du monétaire !
Alors que dans l'aide il est censé être stocké sur 10 octets...
Par contre je suis OK sur le cas 2 en 204g

A+
Philippe


"el" a écrit dans le message de
news:bhkn6h$ro5$
Bonjour,

Ci dessous un bout de code, Pourriez-vous effectuer chacun des cas (en
mettant en commentaire les autres) et me donner vos résultats avec la
version WD75 que vous utilisez. Merci.

Tout vient du fait que je souhaite avoir dans un tableau (dans une DLL)


les
adresses mémoires de certaines variables (entier, monétaire et chaine de
caractères) et que je souhaite faire "pointer" des variables de même type
sur ces adresses. Pour les entiers je n'ai AUCUN pb. Pour les monétaires,


je
dois passer par la fonction transfert et là je me casse un peu les dent.

Si je comprends les conclusions des différents tests ci dessous, la taille
du monétaire chargé en mémoire varie à chaque affectation et çà çà me
dépasse un peu :-( car je pensais que 4 octets c'était toujours 4 octets

Merci aux experts de m'aider.

Emmanuel Lecoester

------------------------------------------
mondouble est un monétaire
mondoublehost est un monétaire

//CAS 1 : passage de la taille de mondouble : OK
mondoubleh2/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondouble))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondouble))

//CAS 2 : passage de la taille de mondoublehost : KO
mondoubleh2/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

//CAS 3 : passage de la taille de mondoublehost la 2eme fois : OK
mondoubleh2/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

mondoublea112/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

//CAS 4 : initialisation de mondoublehost : OK en fonction de la valeur
d'init
mondoublehost=6.55957
mondoublea112/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

//CAS 5 : initialisation à 0 de mondoublehost : K0
mondoublehost=0
mondoublea112/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))





Avatar
Pierre-Yves Tavernier
Un monétaire en windevest codé "comme un entier" sachant qu'il y 6 chiffres
aprèsla virgule.
Par exemple ,000001 sera code 0x00 00 00 00 00 00 00 00 00 01
et ainsi de suite.

C'est d'ailleurs pour cela que le codages des numériques reste juste
contrairement à celui du IEEE mais on reste bloqué à 6 décimales.

J'ai du publier un jour un code qui permet de convertir les monétaires vers
les langages externes mais ou ...

PYT
"el" a écrit dans le message de
news:bhkn6h$ro5$
Bonjour,

Ci dessous un bout de code, Pourriez-vous effectuer chacun des cas (en
mettant en commentaire les autres) et me donner vos résultats avec la
version WD75 que vous utilisez. Merci.

Tout vient du fait que je souhaite avoir dans un tableau (dans une DLL)


les
adresses mémoires de certaines variables (entier, monétaire et chaine de
caractères) et que je souhaite faire "pointer" des variables de même type
sur ces adresses. Pour les entiers je n'ai AUCUN pb. Pour les monétaires,


je
dois passer par la fonction transfert et là je me casse un peu les dent.

Si je comprends les conclusions des différents tests ci dessous, la taille
du monétaire chargé en mémoire varie à chaque affectation et çà çà me
dépasse un peu :-( car je pensais que 4 octets c'était toujours 4 octets

Merci aux experts de m'aider.

Emmanuel Lecoester

------------------------------------------
mondouble est un monétaire
mondoublehost est un monétaire

//CAS 1 : passage de la taille de mondouble : OK
mondoubleh2/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondouble))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondouble))

//CAS 2 : passage de la taille de mondoublehost : KO
mondoubleh2/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

//CAS 3 : passage de la taille de mondoublehost la 2eme fois : OK
mondoubleh2/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

mondoublea112/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

//CAS 4 : initialisation de mondoublehost : OK en fonction de la valeur
d'init
mondoublehost=6.55957
mondoublea112/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))

//CAS 5 : initialisation à 0 de mondoublehost : K0
mondoublehost=0
mondoublea112/6.55957
Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))





Avatar
Pierre-Yves Tavernier
Je n'ai pas encore trop regardé Windev 7.5 mais pour connaitre la taille
d'un type ne faut il pas utiliser Dimension au lieu de Taille ?

PYT
"el" a écrit dans le message de
news:bhlc7j$uj7$
Pour le code, je suis preneur.

Par contre on constate la meme chose pour un reel sur x octets.

Idem si on met 1.002 au lieu de 0.

Ce qui m'ennuie c'est que la taille de la variable (reel ou monetaire)


varie
en fonction de sa valeur ! Alors que pour moi un reel sur 4 octets prend 4
octets en mémoire ni plus, ni moins.

Si quelqu'un sait comment faire :-)

"Pierre-Yves Tavernier" a écrit dans le
message news: 3f3e3221$0$237$
> Un monétaire en windevest codé "comme un entier" sachant qu'il y 6
chiffres
> aprèsla virgule.
> Par exemple ,000001 sera code 0x00 00 00 00 00 00 00 00 00 01
> et ainsi de suite.
>
> C'est d'ailleurs pour cela que le codages des numériques reste juste
> contrairement à celui du IEEE mais on reste bloqué à 6 décimales.
>
> J'ai du publier un jour un code qui permet de convertir les monétaires
vers
> les langages externes mais ou ...
>
> PYT
> "el" a écrit dans le message de
> news:bhkn6h$ro5$
> > Bonjour,
> >
> > Ci dessous un bout de code, Pourriez-vous effectuer chacun des cas (en
> > mettant en commentaire les autres) et me donner vos résultats avec la
> > version WD75 que vous utilisez. Merci.
> >
> > Tout vient du fait que je souhaite avoir dans un tableau (dans une


DLL)
> les
> > adresses mémoires de certaines variables (entier, monétaire et chaine


de
> > caractères) et que je souhaite faire "pointer" des variables de même
type
> > sur ces adresses. Pour les entiers je n'ai AUCUN pb. Pour les
monétaires,
> je
> > dois passer par la fonction transfert et là je me casse un peu les


dent.
> >
> > Si je comprends les conclusions des différents tests ci dessous, la
taille
> > du monétaire chargé en mémoire varie à chaque affectation et çà çà me
> > dépasse un peu :-( car je pensais que 4 octets c'était toujours 4


octets
> >
> > Merci aux experts de m'aider.
> >
> > Emmanuel Lecoester
> >
> > ------------------------------------------
> > mondouble est un monétaire
> > mondoublehost est un monétaire
> >
> > file://CAS 1 : passage de la taille de mondouble : OK
> > mondoubleh2/6.55957
> > Transfert(&mondoublehost,&mondouble,Taille(mondouble))
> > Info (mondouble, mondoublehost,"Taille :"+Taille(mondouble))
> >
> > file://CAS 2 : passage de la taille de mondoublehost : KO
> > mondoubleh2/6.55957
> > Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> > Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
> >
> > file://CAS 3 : passage de la taille de mondoublehost la 2eme fois :


OK
> > mondoubleh2/6.55957
> > Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> > Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
> >
> > mondoublea112/6.55957
> > Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> > Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
> >
> > file://CAS 4 : initialisation de mondoublehost : OK en fonction de


la
valeur
> > d'init
> > mondoublehost=6.55957
> > mondoublea112/6.55957
> > Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> > Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
> >
> > file://CAS 5 : initialisation à 0 de mondoublehost : K0
> > mondoublehost=0
> > mondoublea112/6.55957
> > Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> > Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
> >
> >
> >
>
>




Avatar
el
Pour le code, je suis preneur.

Par contre on constate la meme chose pour un reel sur x octets.

Idem si on met 1.002 au lieu de 0.

Ce qui m'ennuie c'est que la taille de la variable (reel ou monetaire) varie
en fonction de sa valeur ! Alors que pour moi un reel sur 4 octets prend 4
octets en mémoire ni plus, ni moins.

Si quelqu'un sait comment faire :-)

"Pierre-Yves Tavernier" a écrit dans le
message news: 3f3e3221$0$237$
Un monétaire en windevest codé "comme un entier" sachant qu'il y 6


chiffres
aprèsla virgule.
Par exemple ,000001 sera code 0x00 00 00 00 00 00 00 00 00 01
et ainsi de suite.

C'est d'ailleurs pour cela que le codages des numériques reste juste
contrairement à celui du IEEE mais on reste bloqué à 6 décimales.

J'ai du publier un jour un code qui permet de convertir les monétaires


vers
les langages externes mais ou ...

PYT
"el" a écrit dans le message de
news:bhkn6h$ro5$
> Bonjour,
>
> Ci dessous un bout de code, Pourriez-vous effectuer chacun des cas (en
> mettant en commentaire les autres) et me donner vos résultats avec la
> version WD75 que vous utilisez. Merci.
>
> Tout vient du fait que je souhaite avoir dans un tableau (dans une DLL)
les
> adresses mémoires de certaines variables (entier, monétaire et chaine de
> caractères) et que je souhaite faire "pointer" des variables de même


type
> sur ces adresses. Pour les entiers je n'ai AUCUN pb. Pour les


monétaires,
je
> dois passer par la fonction transfert et là je me casse un peu les dent.
>
> Si je comprends les conclusions des différents tests ci dessous, la


taille
> du monétaire chargé en mémoire varie à chaque affectation et çà çà me
> dépasse un peu :-( car je pensais que 4 octets c'était toujours 4 octets
>
> Merci aux experts de m'aider.
>
> Emmanuel Lecoester
>
> ------------------------------------------
> mondouble est un monétaire
> mondoublehost est un monétaire
>
> file://CAS 1 : passage de la taille de mondouble : OK
> mondoubleh2/6.55957
> Transfert(&mondoublehost,&mondouble,Taille(mondouble))
> Info (mondouble, mondoublehost,"Taille :"+Taille(mondouble))
>
> file://CAS 2 : passage de la taille de mondoublehost : KO
> mondoubleh2/6.55957
> Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
>
> file://CAS 3 : passage de la taille de mondoublehost la 2eme fois : OK
> mondoubleh2/6.55957
> Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
>
> mondoublea112/6.55957
> Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
>
> file://CAS 4 : initialisation de mondoublehost : OK en fonction de la


valeur
> d'init
> mondoublehost=6.55957
> mondoublea112/6.55957
> Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
>
> file://CAS 5 : initialisation à 0 de mondoublehost : K0
> mondoublehost=0
> mondoublea112/6.55957
> Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
>
>
>




Avatar
el
Bonjour Philippe,

Merci d'avoir fait le test

Le fait de mettre mondoublehost à 0 te modifie la taille du monétaire !
Alors que dans l'aide il est censé être stocké sur 10 octets...



Oui c'est bien çà qui me dérange :-(

Par contre je suis OK sur le cas 2 en 204g



Je suis en 204g et j'ai KO :-?

A+
Philippe



Bon week End
Avatar
el
Eh bien merci PYT
le code suivant fonctionne.

file://CAS 5 : initialisation à 0 de mondoublehost : K0
mondoublehost=0
mondoublea112/6.55957
Transfert(&mondoublehost,&mondouble,Dimension(mondoublehost))
Info (mondouble, mondoublehost,"Dimension :"+Dimension(mondoublehost))

Je m'étais basé sur le code donné page 20 de la LST 47 et c'était bien
Dimension qu'il fallait lire et non Taille.

Je vais maintenant voir comment je peux gérer cela. Encore merci pour le
coup de pouce.

Emmanuel Lecoester

"Pierre-Yves Tavernier" a écrit dans le
message news: 3f3e3bab$0$240$
Je n'ai pas encore trop regardé Windev 7.5 mais pour connaitre la taille
d'un type ne faut il pas utiliser Dimension au lieu de Taille ?

PYT
"el" a écrit dans le message de
news:bhlc7j$uj7$
> Pour le code, je suis preneur.
>
> Par contre on constate la meme chose pour un reel sur x octets.
>
> Idem si on met 1.002 au lieu de 0.
>
> Ce qui m'ennuie c'est que la taille de la variable (reel ou monetaire)
varie
> en fonction de sa valeur ! Alors que pour moi un reel sur 4 octets prend


4
> octets en mémoire ni plus, ni moins.
>
> Si quelqu'un sait comment faire :-)
>
> "Pierre-Yves Tavernier" a écrit dans le
> message news: 3f3e3221$0$237$
> > Un monétaire en windevest codé "comme un entier" sachant qu'il y 6
> chiffres
> > aprèsla virgule.
> > Par exemple ,000001 sera code 0x00 00 00 00 00 00 00 00 00 01
> > et ainsi de suite.
> >
> > C'est d'ailleurs pour cela que le codages des numériques reste juste
> > contrairement à celui du IEEE mais on reste bloqué à 6 décimales.
> >
> > J'ai du publier un jour un code qui permet de convertir les monétaires
> vers
> > les langages externes mais ou ...
> >
> > PYT
> > "el" a écrit dans le message de
> > news:bhkn6h$ro5$
> > > Bonjour,
> > >
> > > Ci dessous un bout de code, Pourriez-vous effectuer chacun des cas


(en
> > > mettant en commentaire les autres) et me donner vos résultats avec


la
> > > version WD75 que vous utilisez. Merci.
> > >
> > > Tout vient du fait que je souhaite avoir dans un tableau (dans une
DLL)
> > les
> > > adresses mémoires de certaines variables (entier, monétaire et


chaine
de
> > > caractères) et que je souhaite faire "pointer" des variables de même
> type
> > > sur ces adresses. Pour les entiers je n'ai AUCUN pb. Pour les
> monétaires,
> > je
> > > dois passer par la fonction transfert et là je me casse un peu les
dent.
> > >
> > > Si je comprends les conclusions des différents tests ci dessous, la
> taille
> > > du monétaire chargé en mémoire varie à chaque affectation et çà çà


me
> > > dépasse un peu :-( car je pensais que 4 octets c'était toujours 4
octets
> > >
> > > Merci aux experts de m'aider.
> > >
> > > Emmanuel Lecoester
> > >
> > > ------------------------------------------
> > > mondouble est un monétaire
> > > mondoublehost est un monétaire
> > >
> > > file://CAS 1 : passage de la taille de mondouble : OK
> > > mondoubleh2/6.55957
> > > Transfert(&mondoublehost,&mondouble,Taille(mondouble))
> > > Info (mondouble, mondoublehost,"Taille :"+Taille(mondouble))
> > >
> > > file://CAS 2 : passage de la taille de mondoublehost : KO
> > > mondoubleh2/6.55957
> > > Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> > > Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
> > >
> > > file://CAS 3 : passage de la taille de mondoublehost la 2eme fois


:
OK
> > > mondoubleh2/6.55957
> > > Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> > > Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
> > >
> > > mondoublea112/6.55957
> > > Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> > > Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
> > >
> > > file://CAS 4 : initialisation de mondoublehost : OK en fonction


de
la
> valeur
> > > d'init
> > > mondoublehost=6.55957
> > > mondoublea112/6.55957
> > > Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> > > Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
> > >
> > > file://CAS 5 : initialisation à 0 de mondoublehost : K0
> > > mondoublehost=0
> > > mondoublea112/6.55957
> > > Transfert(&mondoublehost,&mondouble,Taille(mondoublehost))
> > > Info (mondouble, mondoublehost,"Taille :"+Taille(mondoublehost))
> > >
> > >
> > >
> >
> >
>
>