Pb de variable globale

Signaler
Messages postés
12
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005
-
Messages postés
12
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005
-
Salut,
Je programme avec visual c++ en MFC et g un pb de variable. Je voudrai savoir comment faire pour pouvoir afficher une variable, de type BYTE BufferReceive[400], dans ma boite de dialogue qd elle ne se trouve pas dans le même fichier cpp que celui de la DlgBox parce que ca fait une semaine que je me prend la te^te ac et j'y arrive tjrs pas
Merci d'avance

16 réponses

Messages postés
115
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
8 octobre 2007

Je supposes que tu fais de l'objet

Donc tu remplace ta variable globale en un attribut plublic

Tu fais 2 accesseurs (lecture et ecriture)



Je ne vois pas le soucis pour afficher un BYTE pusique un BYTE correspond a un unsigned char

donc il te suffit d'afficher une chaine de caractere en ayant prealablement mis un \0 pour siginifier la fin de ta chaine



Il doit surement avoir d'autres solutions
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Dans les .cpp où tu veux accéder au tableau :
extern BYTE BufferReceive[400];

Mettre ce tableau dans une classe est cependant mieux en c++.
Messages postés
12
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005

Slt,

Je n'arrive pas à afficher la variable même avec ta solution ymca2003, pourtant y me semble que le code est bon :
m_info2.SetWindowText(BufferReceive);
Donc je ne vois vraiment pas ce que c'est. Pourriez vopus m'aider.
merci
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Assure-toi que ton buffer se termine par un caractère nul pour que la chaîne s'affiche.
Messages postés
12
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005

En fait le buffer est rempli par ce qui arrive par le port usb qui reçoit des données à partir d'une pince de courant dc je ne voit pa comment je pe rajouter "\0" au buffer ou même véridier qu'il est présent.
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Dans ce cas il va falloir formatter ton buffer pour afficher son contenu par exemple en hexa parceque si tu as tu binaire pur dans ton buffer tu risque de ne pas voir correctemnt son contenu (surtout si le premier octet est 0.

exemple :
char fmt[1024];
for(int i = 0; i < 400; i++)
sprintf(&fmt[3*i], "%02x ", BufferReceive[i]);
m_info2.SetWindowText(BufferReceive);
Messages postés
12
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005

Quand je fais ça il me sort une erreur : error C2664: 'SetWindowTextA' : cannot convert parameter 1 from 'unsigned char [400]' to 'const char
Messages postés
12
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005

sachant que le code est celui ci:

void CCOCBatteryStateDlg::OnButton3()
{


extern BYTE BufferReceive[400];
char fmt[1024];
for(int i = 0; i < 400; i++)
sprintf(&fmt[3*i], "%02x ", BufferReceive[i]);
m_info2.SetWindowText(BufferReceive);
}
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Erreur de copier coller, il faut bien sur afficher le texte formatté
m_info2.SetWindowText(fmt);
Messages postés
12
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005

ca marche tjrs pa maintenant y me sort l'erreur:
COC Battery StateDlg.obj : error LNK2001: unresolved external symbol "unsigned char * BufferReceive" ([mailto:?BufferReceive@@3PAEA ?BufferReceive@@3PAEA])
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Il faut que le buffer soit défini UNE seule fois sans extern dans un des fichiers source :
BYTE BufferReceive[400];

Au fait cette variable est bien globale et pas dans une classe ?
Messages postés
12
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005

non cette variable est bien globale elle ne fait pa parti d'une classe.
Messages postés
12
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005

ca marche il m'affiche de l'hexa mai le pb c que le prog plante en m'affichant comme message d'erreur la mémoire ne peut être read ????
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Ah c'est vrai j'aurais du prendre une calculatrice parceque 3*400 ca fait 1200 et c'est plus grand que 1024 donc il faut mettre fmt[1400] et ça dvrait passer.
Messages postés
12
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005

c bon ca marche g le code hexa et ça plante plus
merci
Messages postés
12
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005

J'auari une autre question a quoi correspond le & devant fmt dans le sprintf ? et le %02x c bien pour convertir en hexa.
Dans mon programme je dois analyser ces données hexa et donc les transformer en décimal mais je ne sais pas cmt fair g chercher dans msdn mais g pas bien compris cmt cela marché.
merci