PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → entier sur 1 octet pas disponible en java
entier sur 1 octet pas disponible en java
Débuté par GAGNAIRE, 20 juin 2014 12:20 - 5 réponses
Posté le 20 juin 2014 - 12:20
Bonjour,

Pour mon programme, j'ai besoin dans une procédure de créer des variables locales entier sans signe sur un octet.

Plus concrètement mon projet windev je veux en faire une appli java. Les ennuis commencent au moment de la compilation.
Quand je craie ma variable je fais ceci:" mavariable est un entier sans signe sur 1 octet ". A ce moment apparaît un warning:
"Le type <entier sans signe sur 1 octet> n'est pas disponible en java. La variable <mavariable> sera de type <int> dans le code java généré, ce qui correspond au type Wlangage <entier>."

Cette variable me sert de transition pour remplir un buffeur que par la suite j'envoi en trame Modbus TCP/IP,
si ma variable est un entier elle sera sur 4 octet et derrière je n'arrive plus à l'enregistrer dans mon buffeur.

Quelqu’un aurait-il une idée pour résoudre mon problème de compilation ou trouver une solution pour contourner cette difficulté à me proposer?
Posté le 20 juin 2014 - 16:02
Bonjour Patrick

j'ai eu le même problème avec du code android (donc java) et un travail
sur un buffer...

Normalement, je le te dirais que tu peux regarder sur mon site dans ma
collection de procédure RC4 for WX, mais mon serveur a explosé hier et
je suis en train de tout remonter...

Donc, en attendant, de mémoire, j'ai fais un contournement comme ca :

- travail sur des entiers (pas le choix)
- transformation de la valeur de l'entier en valeur hexa (sur 2 octets
pour chaque valeur, donc) dans une chaine
- transformation de la chaine en buffer avec hexaversbuffer, ou chaque
valeur hexa est bien converti en valeur binaire sur un octet

Si tu trouve plus simple, n'hésite pas à me le dire, je ne me vexerai
pas :-)

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

NOUVEAU: WXShowroom.com est disponible : Montrez vos projets !
Plus d'information sur http://fabriceharari.com


On 6/20/2014 4:20 AM, GAGNAIRE wrote:
Bonjour,

Pour mon programme, j'ai besoin dans une procédure de créer des
variables locales entier sans signe sur un octet.

Plus concrètement mon projet windev je veux en faire une appli java. Les
ennuis commencent au moment de la compilation.
Quand je craie ma variable je fais ceci:" mavariable est un entier sans
signe sur 1 octet ". A ce moment apparaît un warning:
"Le type <entier sans signe sur 1 octet> n'est pas disponible en java.
La variable <mavariable> sera de type <int> dans le code java généré, ce
qui correspond au type Wlangage <entier>."

Cette variable me sert de transition pour remplir un buffeur que par la
suite j'envoi en trame Modbus TCP/IP, si ma variable est un entier elle
sera sur 4 octet et derrière je n'arrive plus à l'enregistrer dans mon
buffeur.

Quelqu’un aurait-il une idée pour résoudre mon problème de compilation
ou trouver une solution pour contourner cette difficulté à me proposer?
Membre enregistré
391 messages
Popularité : +12 (12 votes)
Posté le 21 juin 2014 - 04:13
Fabrice... Tu sais bien que les couscoussières font de mauvais serveurs... Elles explosent quand il y a trop de pression ! :p

'Dialement, Michel !

--
If it works, don't touch it, don't look at it, AND don't fix it ! No patches, no SP ! JUST DONT FIX IT.
Posté le 23 juin 2014 - 17:50
Bonjour,
Merci Fabrice pour l'idée que tu m'as donnée.
Je n'ai pas réussi à faire exactement comme tu m'avais suggéré, la fonction hexaversbuffer ne voulais pas écrire dans mon buffer donc j'ai du faire autrement mais grâce à ton idée j'ai pu trouver une solution du coup je vous la présente.
Ce n'es pas la meilleur mais elle fonctionne dans mon application java codé avec windev donc voilà.
avec ma boucle je craie une chaîne
schaineaenvoyer est une chaîne ANSI
tableau_automate[i] c'est un tableau de chaîne dans lequel j'enregistre les nombres que je veux envoyer avec ma communication modbus.
donc je transforme cette chaine en un entier avec val puis en nombre hexa avec entiervershexa et enfin avec caract me permet de pouvoir le rentrer dans le buffer

schaineaenvoyer=Caract( EntierVersHexa(Val(table_automate[i])))
schaineaenvoyer = schaineaenvoyer + ce que vous voulez de plus
bufMbusWriteQuery=schaineaenvoyer

par exemple je veux envoyer dans ma trame modbus 0 1 0 0 0 6 numérique

schaineaenvoyer=Caract( EntierVersHexa(Val(0)))+Caract( EntierVersHexa(Val(1)))+Caract( EntierVersHexa(Val(0)))+Caract( EntierVersHexa(Val(0)))+Caract( EntierVersHexa(Val(0)))+Caract( EntierVersHexa(Val(6)))
bufMbusWriteQuery=schaineaenvoyer

au final ma trame auracette tête : 00 01 00 00 00 06 hexa

j'espère que mon explication aura aidé pour les prochains qui auront ce problème
Fabrice mon explication n'es pas forcément plus simple mais je serais heureux de pouvoir en discuter plus si tu as une remarque a me faire sur ma méthode
Posté le 24 juin 2014 - 12:55
Bonjour Patrick

effectivement, et malheureusement pas plus simple... Par contre, ton
système a une limitation qui je l'espère ne te posera pas de problème.

Comme tu fais ton travail de préparation dans une chaine ANSI, les
valeurs binaires (et en particulier /0, caractère de fin de chaine)
peuvent tout faire planter...

C'est pour cette raison qu'il fallait absolument que je passe par un
buffer de mon coté

Autrement, du moment que ca fonctionne :-)

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

NOUVEAU: WXShowroom.com est disponible : Montrez vos projets !
Plus d'information sur http://fabriceharari.com


On 6/23/2014 9:50 AM, GAGNAIRE wrote:
Bonjour,
Merci Fabrice pour l'idée que tu m'as donnée.
Je n'ai pas réussi à faire
Posté le 26 juin 2014 - 17:11
Bonjour,
Merci pour ton avertissement,
je ferais attention a ce détail, en espérant que ce problème ne m'arrive jamais =)

Merci encore pour l'aide que tu m'a apporté.
cordialement