control d'edition ...

control d'edition ... - C - Programmation

Marsh Posté le 05-10-2006 à 14:29:41    

Salut.  
Je veux récupérer un nombre qui a été saisi dans un champ d'edit, avec la fonction GetDlgItemText(),  
donc je fais  

Code :
  1. GetDlgItemText(hwnd, IDE_EDITPORT, port, 256);


sachant que port et un nombre entier j'ai un warning, donc je cast insi

Code :
  1. GetDlgItemText(hwnd, IDE_EDITPORT, (LPSTR)port, 256);


 
je n'ai plus de warning, mais il y a un probléme:  
 
ce que j'ai récupérer dois étre un nombre entier pour que je puisse par la suite l'utiliser dans htons(port), qui dois absolument prendre un nombre entier (le port de connexion).  
Or dans ce que j'ai fais j'ai une erreur connexion a cause du port (qu'on a saisi), or si j'utilise directement htons(2000) par exemple, je n'ai plus de probléme, ce qui confirme que le probléme vien de la récupération (saisi) du port dans le champ d'édition.   :sweat:
 
Merci pour votre aide.


Message édité par big_dadi_fat le 07-10-2006 à 11:29:55
Reply

Marsh Posté le 05-10-2006 à 14:29:41   

Reply

Marsh Posté le 05-10-2006 à 16:05:02    

euuh... tu peux poster le code dans lequel tu alloues la mémoire pour ta variable port ? un doute m'étreint là !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-10-2006 à 16:14:14    

Peut-être que GetDlgItemText ne renvoie pas un entier mais une chaîne de caractères...

Reply

Marsh Posté le 05-10-2006 à 16:21:48    

bb138 a écrit :

Peut-être que GetDlgItemText ne renvoie pas un entier mais une chaîne de caractères...


non, GetDlgItemText() renvoie 0 si elle échoue. sinon, elle renvoie le texte du controle dans le buffer défini en 3eme paramètre (la variable port de dadifat)
c'est pour ça que je lui demande son code : je soupçonne fort qu'il ait tapé une atrocité de ce genre :

Code :
  1. int port;
  2. GetDlgItemText(hwnd, IDE_EDITPORT, (LPSTR)port, 256);


 
alors que port est un pointeur vers une zone de mémoire que l'on doit préalablement allouer


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-10-2006 à 16:23:26    

j'ai fait comme ta dis  :sweat:


Message édité par big_dadi_fat le 05-10-2006 à 17:08:18
Reply

Marsh Posté le 05-10-2006 à 16:24:56    

bingo, j'avais raison [:kbchris]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-10-2006 à 16:28:16    

Harkonnen a écrit :

bingo, j'avais raison [:kbchris]


 
Je n'avais pas bien compris ce que tu voullez dire par :
alors que port est un pointeur vers une zone de mémoire que l'on doit préalablement allouer  :jap:  .
 


Message édité par big_dadi_fat le 05-10-2006 à 16:28:47
Reply

Marsh Posté le 05-10-2006 à 16:40:26    

le paramètre 3 de GetDlgItemText() est un pointeur vers une zone mémoire qui recevra le texte que contient le controle. or toi, tu lui fournis une variable non initialisée, donc BOUM !
si tu veux que ça fonctionne :  
- tu dois allouer une zone mémoire de x caractères, qui recevra le texte
- tu dois indiquer en paramètre 4 de GetDlgItemText() le nombre maximum de caractères que tu veux récupérer de ton controle, lequel nombre devra obligatoirement être inférieur ou égal à la taille de ton buffer sous peine de débordement.
mais quand tu auras fait ça, tu ne seras pas au bout de tes peines, car ton buffer contiendra une suite de caractères, que tu devras ensuite convertir en numérique pour le filer à bouffer à htons().
à ce moment là, regarde du coté de strtol()
 
edit: un peu de code

Code :
  1. char port[6]; // 6 caractères maxi pour le port
  2. if (!(GetDlgItemText(hwnd, IDE_EDITPORT, port, 6)));
  3.       *port = 0; // impossible de récupére le texte pour une raison x ou y : on désalloue le pointeur
  4. else
  5.    // le texte est récupéré dans port. a toi maintenant de le convertir avec strtol()


Message édité par Harkonnen le 05-10-2006 à 16:44:00

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-10-2006 à 16:56:05    

C'est bon j'ai reglé le probléme, merci pour ton aide Harko  :)


Message édité par big_dadi_fat le 05-10-2006 à 17:06:53
Reply

Marsh Posté le 05-10-2006 à 17:13:02    

c'est l'adresse d'un pointeur quelconque, initialisé ou pas qui sert à déterminer l'adresse du premier caractère non numérique dans la chaine. généralement on n'a pas à s'en servir
 
edit: il a édité le fourbe [:mlc]

Message cité 1 fois
Message édité par Harkonnen le 05-10-2006 à 17:13:32

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 05-10-2006 à 17:13:02   

Reply

Marsh Posté le 06-10-2006 à 09:31:29    

En fait, je pensais que tu voulais stocker directement la valeur saisie dans une variable entière :)

Reply

Marsh Posté le 06-10-2006 à 11:21:30    

Harkonnen a écrit :

c'est l'adresse d'un pointeur quelconque, initialisé ou pas qui sert à déterminer l'adresse du premier caractère non numérique dans la chaine. généralement on n'a pas à s'en servir
edit: il a édité le fourbe [:mlc]


 
Ok merci Harko. Je l'avai compris, c'est pour ca que j'ai édité.
 
 

Citation :

En fait, je pensais que tu voulais stocker directement la valeur saisie dans une variable entière


C'est ce j'avais fais  :p  .
 


Message édité par big_dadi_fat le 06-10-2006 à 11:37:11
Reply

Marsh Posté le 06-10-2006 à 16:16:04    

A mon avis, la fonction GetDlgItemInt() est plus adaptée à ce que tu veux faire. Tu récupères directement l'entier saisi.

Reply

Marsh Posté le 06-10-2006 à 16:49:01    

Angel64 a écrit :

A mon avis, la fonction GetDlgItemInt() est plus adaptée à ce que tu veux faire. Tu récupères directement l'entier saisi.


oh, je ne savais pas qu'elle existe...
Merci
 

Reply

Marsh Posté le 06-10-2006 à 16:53:58    

Angel64 a écrit :

A mon avis, la fonction GetDlgItemInt() est plus adaptée à ce que tu veux faire. Tu récupères directement l'entier saisi.


mais ça inclut quand même un test pour savoir si l'utilisateur a rentré un nombre ou pas... autant récupérer le texte et le convertir avec strtol(), la vérif est plus facile (=0 si conversion impossible, plus simple à tester)

Reply

Marsh Posté le 06-10-2006 à 17:25:15    

Cette fonction modifie un BOOL (passé en argument par pointeur) pour indiquer si la conversion a pu être effectuée correctement ou pas. Il suffit de tester ce booléen ensuite.

Reply

Marsh Posté le 06-10-2006 à 17:33:06    

ah ben oui tiens ! jdevrais l'utiliser plus souvent cette fonction [:tinostar]


Message édité par Harkonnen le 06-10-2006 à 17:33:17
Reply

Marsh Posté le 06-10-2006 à 17:34:08    

Harkonnen a écrit :

mais ça inclut quand même un test pour savoir si l'utilisateur a rentré un nombre ou pas... autant récupérer le texte et le convertir avec strtol(), la vérif est plus facile (=0 si conversion impossible, plus simple à tester)


je peut en méme temps obligé l'utilisateur a ne saisir qu'un nombre et pas autre chose, grasse à ES_NUMBER...  mais bon.
 
 
enfait j'ai une autre question:
 
Je veut afficher au fure et à mesure les buffer recu et envoyer (de la part du clien et serveur) dans un champ d'edition.
 je veut que chaque nouvel chaine se place au desou de sa precédante, mais il y a un probléme : la chaine ecrase (efface) sa présédante (alors que je veut quel se place en dessou).


Message édité par big_dadi_fat le 06-10-2006 à 17:55:14
Reply

Marsh Posté le 06-10-2006 à 19:36:06    

ben tu stockes tes chaines dans un tableau au fur et à mesure qu'elles arrivent :spamafote:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-10-2006 à 20:39:20    

Harkonnen a écrit :

ben tu stockes tes chaines dans un tableau au fur et à mesure qu'elles arrivent :spamafote:


Mais je veux les afficher au fure et a mesure dans le champ d'édition...
 
 
EDIT: a moin que j'utilise une liste box au lieu d'un controle d'edition..
 


Message édité par big_dadi_fat le 06-10-2006 à 20:42:42
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed