Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD55b] Fonction Transfert

5 réponses
Avatar
François Semoulin
Bonjour.

J'ai un souci avec la fonction Transfert.
Je souhaite transférer un tableau A de 2 entiers vers un autre tableau B de
3 entiers.
A[1] doit aller donc dans B[1], A[2] doit aller donc dans B[2, B[3]
conservant sa valeur.
Le code suivant fonctionne:

tiMeilleureQuantiteAllouee est un tableau de 2 entiers
tiQuantiteAllouee est un tableau de 3 entiers
tiQuantiteAllouee[1]=30000
tiQuantiteAllouee[2]=30001
transfert(&tiMeilleureQuantiteAllouee,&tiQuantiteAllouee,4)

Par contre, j'essaie d'utiliser le même code pour des tableaux dynamiques.
En effet, je dois utiliser des tableaux dynamiques, la dimension des
tableaux n'étant pas connue à l'avance.
Le code devient donc celui-ci:

tiMeilleureQuantiteAllouee est un tableau dynamique
tiQuantiteAllouee est un tableau dynamique
tiQuantiteAllouee=allouer un tableau dynamique de 2 entiers
tiMeilleureQuantiteAllouee=allouer un tableau dynamique de 3 entiers
tiQuantiteAllouee[1]=30000
tiQuantiteAllouee[2]=30001
transfert(&tiMeilleureQuantiteAllouee,&tiQuantiteAllouee,4)
liberer tiQuantiteAllouee
liberer tiMeilleureQuantiteAllouee

Ce code ne fonctionne pas!
Après le transfert, j'ai 0 dans tiMeilleureQuantiteAllouee, sans toutefois
avoir de message d'erreur.
Pourquoi?
Pour que le transfert fonctionne, il faut spécifier une longueur de 19
octets.
Par contre, WDTST552 plante à la fermeture de la fenêtre dans ce cas.
Quelqu'un peut-il m'aider dans ce problème?

Merci d'avance.

François

5 réponses

Avatar
Romain PETIT
François Semoulin a formulé la demande :

Ce code ne fonctionne pas!
Après le transfert, j'ai 0 dans tiMeilleureQuantiteAllouee, sans toutefois
avoir de message d'erreur.
Pourquoi?



Parce qu'il ne faut pas utiliser les fonctions de tranfert direct de
mémoire avec des variables dynamiques.
C'est la même chose avec des variables de type chaine (non fixes)
puisqu'à tout moment la mémoire allouée pour ces variables peut varier.
Par ailleurs, ton 1er exemple n'est pas très propre, tes tableaux ne
sont pas de même taille (c'est Ok parce que ton tableau source a une
plus grande dimension que le tableau destination).

Pour que le transfert fonctionne, il faut spécifier une longueur de 19
octets.
Par contre, WDTST552 plante à la fermeture de la fenêtre dans ce cas.



Tu as obtenu ce résultat par tâtonnement ?
Avant de pouvoir faire ce genre de chose, il faudrait savoir comment
est structuré un tableau *dynamique* en WD55 mais ce n'est pas
documenté et on s'y casse les dents, même avec des tableaux dynamiques
de même dimension.

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
francois
Romain PETIT wrote in message news:...
François Semoulin a formulé la demande :

> Ce code ne fonctionne pas!
> Après le transfert, j'ai 0 dans tiMeilleureQuantiteAllouee, sans toutefois
> avoir de message d'erreur.
> Pourquoi?

Parce qu'il ne faut pas utiliser les fonctions de tranfert direct de
mémoire avec des variables dynamiques.
C'est la même chose avec des variables de type chaine (non fixes)
puisqu'à tout moment la mémoire allouée pour ces variables peut varier.
Par ailleurs, ton 1er exemple n'est pas très propre, tes tableaux ne
sont pas de même taille (c'est Ok parce que ton tableau source a une
plus grande dimension que le tableau destination).



C'est bien ce que je pensais. Je vais devoir y aller par affectation
directe.
Sisi le code est "propre", c'est voulu que les tableaux n'aient pas
les mêmes dimensions.

> Pour que le transfert fonctionne, il faut spécifier une longueur de 19
> octets.
> Par contre, WDTST552 plante à la fermeture de la fenêtre dans ce cas.

Tu as obtenu ce résultat par tâtonnement ?
Avant de pouvoir faire ce genre de chose, il faudrait savoir comment
est structuré un tableau *dynamique* en WD55 mais ce n'est pas
documenté et on s'y casse les dents, même avec des tableaux dynamiques
de même dimension.



Oui, le raisonnement a été obtenu par tâtonnement.

A+



Merci de ta réponse.

François
Avatar
Fabrice Burghgraeve
salut.

"François Semoulin" a écrit dans le message de
news:btk82h$se6$
Bonjour.

J'ai un souci avec la fonction Transfert.
Je souhaite transférer un tableau A de 2 entiers vers un autre tableau B


de
3 entiers.
A[1] doit aller donc dans B[1], A[2] doit aller donc dans B[2, B[3]
conservant sa valeur.
Le code suivant fonctionne:


(...)

Et c'est maintenant que je me rends comptte que dans l'email privé que je
t'ai envoyé ce matin, je me suis trompé,
parce que j'etais dans l'idée que tu etais en windev 7.5...

En effet, en 7.5, on peut faire des transferts entre des tableaux dynamique
et/ou non dynamiques,
mais effectivement pas en 5.5 ou les tableaux d'entiers, ainsi que les
structures d'ailleurs, sont geres de maniere "bizarre" (pas de la meme
structure qu'en C)

Ce qui n'est pas sans poser probleme pour les appels aux APIs...

desole donc de t'avoir induit en erreur.....


--
Fabrice Burghgraeve
Computer & Services
suivez ce lien pour me repondre en prive :
http://cerbermail.com/?I3GMPRuXDD
Avatar
François Semoulin
Salut Fabrice

"Fabrice Burghgraeve"
wrote in message news:btuhlr$iv8$
salut.

"François Semoulin" a écrit dans le message de
news:btk82h$se6$
> Bonjour.
>
> J'ai un souci avec la fonction Transfert.
> Je souhaite transférer un tableau A de 2 entiers vers un autre tableau B
de
> 3 entiers.
> A[1] doit aller donc dans B[1], A[2] doit aller donc dans B[2, B[3]
> conservant sa valeur.
> Le code suivant fonctionne:
(...)

Et c'est maintenant que je me rends comptte que dans l'email privé que je
t'ai envoyé ce matin, je me suis trompé,
parce que j'etais dans l'idée que tu etais en windev 7.5...

En effet, en 7.5, on peut faire des transferts entre des tableaux


dynamique
et/ou non dynamiques,
mais effectivement pas en 5.5 ou les tableaux d'entiers, ainsi que les
structures d'ailleurs, sont geres de maniere "bizarre" (pas de la meme
structure qu'en C)



Y'a pas de mal.
Ne trouvant pas la solution en 5.5, j'avais d'ailleurs regardé dans l'aide
de 7.5.
L'aide en 7.5 ne parle pas de cette possibilité de transférer des tableaux
dynamiques!
T'as essayé? Ca marche???

J'en reprofite encore pour te remercier pour ton sérieux coup de main...

A+

François


Ce qui n'est pas sans poser probleme pour les appels aux APIs...

desole donc de t'avoir induit en erreur.....


--
Fabrice Burghgraeve
Computer & Services
suivez ce lien pour me repondre en prive :
http://cerbermail.com/?I3GMPRuXDD




Avatar
Fabrice Burghgraeve
salut.

"François Semoulin" a écrit dans le message de
news:btukur$s1e$
(...)
Ne trouvant pas la solution en 5.5, j'avais d'ailleurs regardé dans l'aide
de 7.5.
L'aide en 7.5 ne parle pas de cette possibilité de transférer des tableaux
dynamiques!
T'as essayé? Ca marche???



Oui oui... le code que je t'ai envoye marche.
je publie ici un morceau de notre conversation pour ceux que ca
interesserait :
(c'etait du email hml, j'espere que ce ne sera pas trop moche convertit en
texte...)

--- francois ---

Si oui, il faut encore connaître la longueur à transférer?

--- moi ---
t1 est un tableau de 3 entiers
t2 est un tableau dynamique
t2 = allouer un tableau de 2 entiers
dummy est un entier

Info( Dimension(dummy), Dimension(t1), Dimension(t2))

la taille memoire d'un tableau = 4* dimensiondu tableau
(taille d'un entier en octets : dimension(dummy) = 4. Ne pas confondre car
dimension n'a pas la meme signification suivant qu'on manipule un type
simple ou un tableau. C'est moche mais c'est comme ca)

--- francois ---

Un entier, c'est deux octets, non? On peut directement multiplier par la
dimension du tableau et en avant la musique...?

--- moi----
ah ben je viens de repondre :)
--- francois ---

De plus, quid pour:
pour iIndice2=1 à iPfNombreArticle-1
tiMeilleureQuantiteAllouee[iIndice2]=tiQuantiteAllouee[iIndice2]
FIN
Dans ce cas, tiQuantiteAllouee (iPfNombreArticle-1)
n'a pas la même dimesion que tiMeilleureQuantiteAllouee
(iPfNombreArticle)!

--- moi ---
oui mais c'est pas grave. Il ne faut bien sur recopier que les donnes
necessaires.
De la meme maniere que tu ne fais pas une boucle jusque ipfnombrearticle,
mais jusque ipfnombrearticle -1

t1 est un tableau de 3 entiers
t2 est un tableau dynamique
t2 = allouer un tableau de 2 entiers

t1[1]
t1[2]3
t1[3]E6

Transfert(&t2,&t1,Dimension(t2)*4)

Info(t2[1])
Info(t2[2])





J'en reprofite encore pour te remercier pour ton sérieux coup de main...




y'a pas de quoi... c'est le principe des NG :)
aujourd'hui, je te donne un coup de main...
Demain, un autre me donnera un coup de main, et toi tu aidera quelqu'un
d'autre, ou moi peut-etre...

C'est un lieu d'echange :)
on prend et on donne :)


--
Fabrice Burghgraeve
Computer & Services
suivez ce lien pour me repondre en prive :
http://cerbermail.com/?I3GMPRuXDD