control d'edition ... - C - Programmation
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à !
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...
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 :
|
alors que port est un pointeur vers une zone de mémoire que l'on doit préalablement allouer
Marsh Posté le 05-10-2006 à 16:23:26
j'ai fait comme ta dis
Marsh Posté le 05-10-2006 à 16:24:56
bingo, j'avais raison
Marsh Posté le 05-10-2006 à 16:28:16
Harkonnen a écrit : bingo, j'avais raison |
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 .
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 :
|
Marsh Posté le 05-10-2006 à 16:56:05
C'est bon j'ai reglé le probléme, merci pour ton aide Harko
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
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
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 |
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 .
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.
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
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)
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.
Marsh Posté le 06-10-2006 à 17:33:06
ah ben oui tiens ! jdevrais l'utiliser plus souvent cette fonction
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).
Marsh Posté le 06-10-2006 à 19:36:06
ben tu stockes tes chaines dans un tableau au fur et à mesure qu'elles arrivent
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 |
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..
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
sachant que port et un nombre entier j'ai un warning, donc je cast insi
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.
Merci pour votre aide.
Message édité par big_dadi_fat le 07-10-2006 à 11:29:55