IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Variable qui change après un DispatchMessage


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 104
    Points : 120
    Points
    120
    Par défaut Variable qui change après un DispatchMessage
    Bonjour,

    J'ai un tableau de char qui me sert a stocker du texte. (par exemple "ABCD\0".
    Je supprime ensuite la dernière lettre en la remplacant par un \0. J'ai donc quand je debug avec Visual Studio "ABC\0\0" dans ma variable. Le problème est que juste après l'appel suivant de DispatchMessage dans la boucle de récupération des messages le texte est modifié :
    ABC ne change pas, mais le \0 rajouté pour supprimer la dernière lettre se transforme en caractère de code ASCII 8 (ce qui donne à l'affichage un espèce de petit carré)...
    J'ai essayé plusieurs trucs, notamment de remplacer le tableau de char par un char * et d'allouer dynamiquement la mémoire, mais rien à faire j'ai toujours la meme erreur

    Merci d'avance

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 682
    Points
    10 682
    Billets dans le blog
    3
    Par défaut
    Ta question est vraiment imprécise, il est impossible de t'aider. Donne un bout de code qui expose ton probleme. Ou appelles-tu DispatchMessage ? Cela m'étonnerais tres fort que cette fonction soit en cause. Attention à ne pas chercher de bug là ou il n'y en a pas. Que fais-tu de ta chaine, a quoi te sert-elle, etc...
    Donne du code.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    Bin je voulais pas faire un roman non plus Mais je précise et merci quand meme pour ta réponse

    J'ai une boucle de récupérartion des messages (récupérée sur le FrameWork de DirectX 9) comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    while( !bQuitter  )
    {
    	// Use PeekMessage() so we can use idle time to render the scene
    	bGotMsg = ( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) != 0 );
    	if( bGotMsg )
    	{
    	    // Translate and dispatch the message
    	    if( 0 == TranslateAccelerator( ViewModule->GetHWND(), NULL, &msg ) )
    	    {
    		TranslateMessage( &msg );
    		DispatchMessage( &msg );
    	    }
    	}
    	else
    		// Traitement
     }
    D'autre part j'ai donc un "char Text[50]" (déclaré dans une classe en private, donc en théorie innaccessible en dehors de la classe) que j'utilise à 2 ou 3 reprises, et qui fonctionnent très bien.
    Ensuite je veux supprimer le dernier carractère de Text avec un truc tout bete style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     size_t Long = strlen(Text);
    Text[Long -1] = '\0';
    Là tout va bien, à la fin de cette fonction j'ai bien mon texte amputé du dernier caractère. (Par exemple "ABC" pour un texte initial de "ABCD")

    Une fois ceci effectué le programme retourne dans la boucle... Et c'est là qu'est le problème, si j'espionne la variable Text, je m'apercois qu'avant d'appeller le DispatchMessage elle est toujours à la bonne valeur (ABC), mais qu'après l'appel de DispatchMessage, Text a été modifié et le dernier caractère (le \0 de fin de chaine, anciennement le "D") a été remplacé par un char de code ASCII 8... Et je comprend pas pourquoi...
    Je n'utilise pas DU TOUT Text avant l'appel de Dispatch (et d'ailleurs juste avant son appel, Text a toujours la "bonne" valeur), et c'est vraiment après Dispatch que la valeur est modifiée... Ca ne me faut ca QUE pour cette chaine de caractère, j'ai pleins d'autres variables qui ne changent pas du tout

    Merci

  4. #4
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    hmm, t'es sur qu'elle est vraiment modifiée, cette chaîne ? Tu l'a vraiment affichée/utilisée pour voir ? (pas seulement espionnée avec un quelconque outil de débuggage)
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    Oui, je l'affiche à l'écran et je constate que dès l'appel de DispatchMessage qui suit la suppression du dernier caractère elle est modifiée :
    A l'affichage j'obtient à l'affichage une sorte de "carré" à la place du dernier caractère (le meme symbole que t'a si t'essaye d'ouvrir un fichier qui n'est pas un fichier texte avec WordPad ou Word... ca te fait des suites de caractères bizarres dont pleins de carrés). Ce carré, si j'en crois le debuggeur de VS correspond à un caractère ASCII de code 8)
    Donc oui la chaine est bien modifiée... Je l'ai vérifiée avec pleins de moyen, par exemple sauvé la chaine dans un fichier Texte avant et après, dans une autre variable etc...

  6. #6
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    File le code entier (ne me fouettez pas, les autres ^^)
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    Euh...
    Doit y en avoir pour + de 2000 lignes...
    Vu que c'est des classes, avec héritage et tout si t'as pas tout le code ca veut pas dire grand chose...
    Enfin vé dodo là mais demain j'essaye de balancer tout ca sur un site si qqun a le courage de regarder lol...

  8. #8
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    ok, j'étais motivé à une heure du mat'... Demain je le serai moins
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 682
    Points
    10 682
    Billets dans le blog
    3
    Par défaut
    DispatchMessage ne fait rien de plus que de router les messages vers les fenêtres. C'est ton code de réponse au message envoyé qui pose probleme.
    Il faut que tu listes tous les endroits où tu utilise ta chaine. Pause un break sur ta dialogproc juste avant l'appel au Dispatch problematique, tu iras alors dans la gestion du message qui pose probleme (code à toi).
    Comment utilises-tu ta chaine ? Donne nous les passages critiques. Il doit y avoir un pointeur qui traine et qui est mal manipulé...

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    C'est bon j'ai trouvé
    Merci à vous deux...
    C'est ton dernier msg Aurelien qui m'a fait verifier 2-3 trucs...
    Et j'ai fini par trouver... En fait quand on appuie sur la touche BACKSPACE,
    y a un msg WM_KEYDOWN ET un msg WM_CHAR qui est posté...
    Or j'avais traité le cas du KEYDOWN ou j'appelais la fonction qui me supprimai mon dernier caractère, mais pas le cas du WM_CHAR qui lui ajoutais tout simplement à la chaine le code du caractère tapé...ici le code du BACKSPACE c'est 8 et c'était justement le truc qui allait pas...

    Enfin merci quand meme

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Variable qui change de valeur toute seul :(
    Par lcfseth dans le forum C
    Réponses: 12
    Dernier message: 22/12/2007, 12h25
  2. [JMeter] Récupration d'une variable qui change à chaque process
    Par vendeeman dans le forum Tests et Performance
    Réponses: 3
    Dernier message: 11/12/2007, 12h00
  3. Variables qui disparaissent aprés une redirection
    Par xclam dans le forum Langage
    Réponses: 2
    Dernier message: 22/09/2007, 11h38
  4. Réponses: 6
    Dernier message: 18/01/2007, 10h24
  5. Contenu de variable qui change.
    Par kafifi dans le forum Langage
    Réponses: 2
    Dernier message: 10/07/2006, 22h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo