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

C++ Discussion :

Perte de la valeur d'une variable TCHAR* lors de l'appel d'une méthode d'une autre classe


Sujet :

C++

  1. #1
    Inscrit
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 60
    Points
    60
    Par défaut Perte de la valeur d'une variable TCHAR* lors de l'appel d'une méthode d'une autre classe
    Bonjour tous le monde,

    J'ai deux classes NppExec et xmlConfig. La classe XMLConfiguration assure le parsing d'un fichier xml.
    Dans ls classe NppExec il y a appel d'une méthode de la classe XMLConfiguration. Cette méthode prend en paramètre une variable de type TCHAR*

    Le problème est que la valeur de cette variable est perdu suite à l'appel de cette méthode.

    Le code de NppExec.cpp est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void CNppExec::OnAGSDialog(TCHAR* str_iNameAGSBloc)
    {
      if(!_XMLConfig.GetAGSBloc(str_iNameAGSBloc)) \\str_iNameAGSBloc = "TIMER"
      {
        ::MessageBox(NULL, LPCWSTR(str_iNameAGSBloc), LPCWSTR(str_iNameAGSBloc), MB_OK);
      }
      else
      {
        if ( PluginDialogBox(IDD_AGS_DIALOG, AGSDialogProc) == 1 )
        {
        }
      }
    }
    Le code de XMLConfiguration est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    bool XMLConfiguration::GetAGSBloc(TCHAR* str_Name)
    {
      TiXmlElement *elem; \\a cette instruction la valeur de str_Name est perdu
      string l_NameElement;
      string l_FigureName;
      string l_CodeFileName;
     
             //traitement
     
      return false;
    }
    Pour quoi la valeur est perdu?

    Merci pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Comment la valeur se perd-elle exactement? Est-ce que le pointeur change, ou est-ce que le contenu de la zone est altéré?
    Par ailleurs, au retour de l'appel, est-ce que la variable d'origine est OK?

  3. #3
    Inscrit
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 60
    Points
    60
    Par défaut
    Non le pointeur ne change pas et la valeur est perdu au retour de l'appel.

    En effet,
    Avant l'appel de la méthode _XMLConfig.GetAGSBloc(str_iNameAGSBloc) la valeur est :

    str_iNameAGSBloc 0x000e0c70 "Filtre_Anti_Rebond" wchar_t *
    70 L'F' wchar_t


    Après l'appel le résultat du debug est:

    str_iNameAGSBloc 0x000e0c70 "쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌⬰ƙ쳌쳌쳌쳌" const wchar_t *
    52428 L'쳌' const wchar_t

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Je ne vois pas de raison pour que le buffer soit corrompu à ce moment précis. Sauf si en fait ce n'est pas à l'appel, mais par exemple à l'initialisation de _XMLConfig, comment cette référence est-elle définie? Peut-être le chargement du XML produit-il un débordement de buffer qui écrase la zone pointée par str_iNameAGSBloc?

  5. #5
    Inscrit
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 60
    Points
    60
    Par défaut conversion d'une variable de TCHAR* en string
    apparemment le problème est dans le type TCHAR* de la variable. J'ai essayer de passer en paramètre une autre variable de type string et sa valeur reste intacte.

    Est ce qu'il existe une méthode pour changer le type de ma variable de TCHAR* en string?

    Merci d'avance

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Ça me fait penser à de l'incohérence à cause d'une recompilation partielle, as tu changé ce type en cours de route?

  7. #7
    Inscrit
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 60
    Points
    60
    Par défaut
    Wé Wé Wé c'est résolu
    En fait j'avais raison.
    Le problème était dans le type TCHAR*
    J'ai trouvé comment se fait la conversion de TCHAR* en string et l'exécution de mon code se passe bien.

    Pour info: la cast de TCHAR* en string se fait de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TCHAR arr[256];
    std::wstring arr_w( arr );
    std::string arr_s( arr_w.begin(), arr_w.end() );
    Merci

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Je pense que tu avais un problème annexe qui a été résolu au passage (p ex en forçant une recompilation), car je ne vois pas pourquoi transmettre un pointeur sur TCHAR serait un problème en soit...ceci dit tant que tu n'as plus ton problème.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/11/2009, 14h40
  2. Appeler un USF nommé par une variable
    Par Arrow_V dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2009, 00h23
  3. [C# 3.0] Méthode renvoyant une variable var
    Par stailer dans le forum Linq
    Réponses: 6
    Dernier message: 22/07/2008, 22h11
  4. Appel d'une méthode via une variable.
    Par seiryujay dans le forum Général Java
    Réponses: 7
    Dernier message: 14/11/2006, 09h56
  5. [VBA-E] Appel de fonction/procédure depuis une variable
    Par truman dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/05/2006, 16h20

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