Précédent   Forum des professionnels en informatique > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2012, 12h08   #1
Inscrit
 
Inscription : juin 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 149
Points : 25
Points : 25
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 :
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 :
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
modafine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 12h30   #2
Membre éprouvé
 
Homme Eric
Inscription : décembre 2010
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Eric
Localisation : France

Informations forums :
Inscription : décembre 2010
Messages : 254
Points : 450
Points : 450
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?
therwald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 15h08   #3
Inscrit
 
Inscription : juin 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 149
Points : 25
Points : 25
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
modafine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 15h21   #4
Membre éprouvé
 
Homme Eric
Inscription : décembre 2010
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Eric
Localisation : France

Informations forums :
Inscription : décembre 2010
Messages : 254
Points : 450
Points : 450
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?
therwald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 16h04   #5
Inscrit
 
Inscription : juin 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 149
Points : 25
Points : 25
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
modafine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 17h08   #6
Membre éprouvé
 
Homme Eric
Inscription : décembre 2010
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Eric
Localisation : France

Informations forums :
Inscription : décembre 2010
Messages : 254
Points : 450
Points : 450
Ça me fait penser à de l'incohérence à cause d'une recompilation partielle, as tu changé ce type en cours de route?
therwald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 17h11   #7
Inscrit
 
Inscription : juin 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 149
Points : 25
Points : 25
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 :
1
2
3
4
 
TCHAR arr[256];
std::wstring arr_w( arr );
std::string arr_s( arr_w.begin(), arr_w.end() );
Merci
modafine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 17h15   #8
Membre éprouvé
 
Homme Eric
Inscription : décembre 2010
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Eric
Localisation : France

Informations forums :
Inscription : décembre 2010
Messages : 254
Points : 450
Points : 450
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.
therwald est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h13.


 
 
 
 
Partenaires

Hébergement Web