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

MFC Discussion :

un edit qui ne marche pas


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 246
    Par défaut un edit qui ne marche pas
    Dans mon module de test d'extraction de date et heure, j'extrais la date et l'heure d'un GPS, la date je l'affiche dans edit1 et l'heure dans l'Edit2.

    Module de test 1: Celui ui marche pas
    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
    17
    18
    19
    20
    21
    22
     
    void Ctest_one_shootView::OnBnClickedButton1()
    {
     CString tmp1,tmp2;
     
     try
       {
    pApp->NMEA183.recupTRAME();
        pApp->NMEA183.Extraire_date(date);
    	pApp->NMEA183.Extraire_heure(heure);
    	tmp1=(CString)date;
    	tmp2=(CString)heure;
     
        SetDlgItemText(IDC_EDIT1,tmp1);
        SetDlgItemText(IDC_EDIT2,tmp2);
    }
    catch (char *Err)
     {if (strcmp (Err,"Erreur #003")==0)
        {MessageBox(TEXT("Impossible de lire sur le port com"),TEXT("Erreur #003"),MB_ICONSTOP);
        }
      }
    }
    Lors du pas-à-pas je me suis rendu compte que c'était lors du passage dans SetDlgItemText qu'il m'envoyaissur cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    _CRTIMP void _cdecl _CrtDbgBreak(
        void
        )
    {
        DebugBreak();
    }
    J'ai réalisé un autre module de test qui lui marche, la chaine que j'ai tapé dans l'Edit1 s'affiche dans l'edit2 en passant par un conversion en char* et à nouveau en CString.

    Module de test 2: celui qui marche
    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
     
    void CConversionView::OnBnClickedButton1()
    {
     int lenght;
     CString str,str2;
     CEdit *Edit1;
     Edit1=static_cast<CEdit*>(GetDlgItem(IDC_EDIT1));
     Edit1->GetWindowTextW(str);
     lenght=Edit1->GetWindowTextLengthW();
     conv=new char(lenght);
     convertirCHAR(&str,conv,lenght);
     
     str2=(CString)conv;
     SetDlgItemText(IDC_EDIT2,str2);
     
    }
    Je ne vois pas pourquoi le module de test 1 ne fonctionne pas c'est exactement le même fonctionnement que le n°2 à la différence que j'affiche des informations extraites dans le 1

  2. #2
    gg
    gg est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 8
    Par défaut
    Si tu es sûr que c'est pas un probleme de chaines vides, tu peux essayer de rajouter UpdateData() à la fin de OnBnClickedButton1()
    J'ai pas mieux

  3. #3
    Membre éclairé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 246
    Par défaut re
    G donc essayé avec UpdateData à la fin de la fonction et cela ne fonctionne toujours pas.

    Lors du pas-à-pas j'ai regardé en détail les variables:
    date="15/06/07"
    heure="101533"
    tmp1.m_pszData="15/06/07"
    tmp2.m_pszData="101533"

    Donc pas de problème de chaînes vides.

    Franchement je vois pas

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Salut,
    je vois des cast en CString qui laisse suspecter d'horribles choses ...
    de même que : conv=new char(lenght);
    ne pas confondre les parenthèses et les crochets (l'initialisation et l'allocation) !
    En plus je suis pratiquement sûr que tu vas provoquer un débordement mémoire car tu n'as pas réservé (une fois l'erreur corrigée bien sûr )de place pour le \0....
    donc beaucoup d'erreurs dans ce code.

  5. #5
    Membre éclairé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 246
    Par défaut re2
    Bah en fait la fonction où tu penses que j'ai des erreurs marche très bien. Car \0 est mis dans ma fonction de conversion. Mais j'ai quand meme corrigé ce problème de crochets. Merci Farscape.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void CConversionView::convertirCHAR(CString *str,char* ch,int taille)
    {wchar_t *tmp;
     tmp=(wchar_t*)str->GetString();
     for (int i=0;i<taille;i++)
        {ch[i]=tmp[i];
        }
     ch[taille]='\0';
     
    }
    Par contre je vous montre les attributs que j'ai déclaré en plus dans la classe Ctest_one_shootView

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Ctest_one_shootView : public CFormView
    {                       
                          .......................
    public:
    	Ctest_one_shootApp *pApp;
    	char date[9];
    	char heure[8];
     
    public:
    	afx_msg void OnBnClickedButton1();
    };
    Et l'endroit où se situe l'erreur
    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
    17
    18
    19
    20
    21
    22
    23
    void Ctest_one_shootView::OnBnClickedButton1()
    {
     CString tmp1,tmp2;
    
     try
       {pApp->NMEA183.recupTRAME();
        pApp->NMEA183.Extraire_date(date);
    	pApp->NMEA183.Extraire_heure(heure);
    	tmp1=(CString)date;
    	tmp2=(CString)heure;
    	
           SetDlgItemText(IDC_EDIT1,tmp1);
    	SetDlgItemText(IDC_EDIT2,tmp2);
    	
      
       }
     catch (char *Err)
     {if (strcmp (Err,"Erreur #003")==0)
        {MessageBox(TEXT("Impossible de lire sur le port com"),TEXT("Erreur #003"),MB_ICONSTOP);
        }
      }
    }
    En rouge l'erreur.

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    A part qu'avec ch[taille]='\0'; tu exploses la mémoire ...
    la taille d'une allocation mémoire donne un accès indicé de 0 >= x <taille ,avec ch[taille] tu debordes...
    quand aux lignes qui ne fonctionnent pas je t'ai donné mon avis sur ces cast suspects de date (dont je ne connais pas la nature...).

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

Discussions similaires

  1. Méthode getSize() qui ne marche pas
    Par mush_H dans le forum Agents de placement/Fenêtres
    Réponses: 15
    Dernier message: 20/03/2005, 01h29
  2. [SWING] KeyListener qui ne marche pas
    Par kindool dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 10/01/2005, 19h04
  3. Iptables configuration qui ne marche pas....
    Par The_Nail dans le forum Sécurité
    Réponses: 7
    Dernier message: 03/02/2004, 14h27
  4. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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