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 :

MFC et accents


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 19
    Points : 9
    Points
    9
    Par défaut MFC et accents
    Bonjour,

    Je reprends un vieux programme dans lequel il y avait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     sprintf_s(str, "Lignes tracées : %d   Coups possibles :%d", m_iOrdre, iNombre);
     CMainFrame *pFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
     CStatusBar *pStatus = &pFrame->m_wndStatusBar;
     pStatus->SetPaneText(0, str);
    qui fonctionnait très bien , mais qui ne passe plus la compilation à cause de la dernière ligne (str est un char *)

    j'en suis arrivé à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	str.Format(L"Lignes tracées : %d   Coups possibles :%d ", m_iOrdre, iNombre);
    	CMainFrame *pFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
    	CStatusBar *pStatus = &pFrame->m_wndStatusBar;
    	pStatus->SetPaneText(0, str);
    où str est une CString, cela fonctionne mais à la place du é j'obtiens é

    Je développe aujourd'hui avec visual studio 2017 sous Windows 10

    Comment régler ce problème simplement (- de 10 à corriger), dans le pire des cas je trouve une périphrase sans accent

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Déjà, perso j'utiliserais _T("texte") plutôt que L"texte" à moins d'utiliser explicitement une CStringW. Ensuite, j'ai du mal à comprendre comment tu te retrouves avec de l'UTF-8 ici, alors que Windows tend à tourner en Windows-1252...
    Ça peut être une histoire d'encodage de ton fichier source (normalement ça peut se vérifier quelque part dans Visual, ou même avec notepad) mais si c'est bien ça la cause alors c'est bien mal fait.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    qui fonctionnait très bien , mais qui ne passe plus la compilation à cause de la dernière ligne (str est un char *)
    Ça, ça m'étonnerait beaucoup.
    https://docs.microsoft.com/fr-fr/cpp...l?view=vs-2019
    A moi de baser par des MACRO bien dégueu pour passer outre des alarmes de sécurité, comme un gros cochon.
    L'ajout du "_s" change un peu tout à l'histoire.

    J'approuve toutes les remarques de ce cher @Médinoc et j'ajoute que comme on a aucune information sur les #define UNICODE, MBCS et autres réglages des options du projet, en fin de compte, on peut tomber sur une combinaison qui fait apparaitre de l'UTF-8.

    Il faut être rigoureux (usage de _T ou de L, c'est pas pareil, avoir un encodage des fichiers sources cohérents avec les options du projet, etc...), et des valeurs en dur dans le code, c'est vraiment chercher les emmerdes, surtout avec tous les mécanismes intégrés au MFC pour faciliter la localisation des applications.
    Morale : en travaillant comme un cochon, on n'a un résultat de cochon.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Ça, ça m'étonnerait beaucoup.
    Et pourtant si. L'erreur n'était pas sur le sprintf mais sur le SetPaneText


    Citation Envoyé par bacelar Voir le message
    Morale : en travaillant comme un cochon, on n'a un résultat de cochon.
    Merci de votre aide qui ne sert à rien

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Déjà, perso j'utiliserais _T("texte") plutôt que L"texte"
    Merci de votre réponse mais le résultat est le même.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Résolu (ou presque) :

    En ajoutant /utf-8 dans la ligne de commande, cela marche.

    Si ce n'est pas abuser, avec cet ajout j'ai des warning :

    resource.h : warning C4828: Le fichier contient un caractère qui débute à l'offset 0x4a et qui est non conforme dans le jeu de caractères source actuel (page de codes 65001).

    resource.h étant un fichier généré par VS

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Ce dernier problème est dû à un accent dans un commentaire de resource.h, je l'ai viré et bien que pas complètement satisfaisant, le problème est résolu.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Cela veut aussi dire que votre IDE n'est toujours pas correctement configuré.

    Assainissez vos méthodes de travail, pas de valeur en dur, supprimer ces MACRO à la con de contournement des outils de qualité logicielle, etc...

    Je le répète, arrêtez de travailler comme un cochon.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Une fois de plus arrêter de parler sans savoir : quelles macro j'ai installées, quelles valeurs en dur j'ai déclarées, bref, cessé de polluer ce fil avec des remarques inutiles et sans intérêt.

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    quelles macro j'ai installées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf_s(str, "Lignes tracées : %d   Coups possibles :%d", m_iOrdre, iNombre);
    Si ceci compile, il y a une MACRO qui "triche".

    quelles valeurs en dur j'ai déclarées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str.Format(L"Lignes tracées : %d   Coups possibles :%d ", m_iOrdre, iNombre);
    Ceci EST une valeur en dur.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Au moins vous m'aurez fait rire

  12. #12
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 360
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 360
    Points : 20 377
    Points
    20 377
    Par défaut
    Pourquoi utiliser sprintf_s ? C'est une instruction pour les chaînes ANSI
    Il faut utiliser wsprintf_s plutôt

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Pourquoi utiliser sprintf_s ? C'est une instruction pour les chaînes ANSI
    Il faut utiliser wsprintf_s plutôt
    Bonjour,

    Merci, mais le sprintf_s est dans la vieille version qui marchait parfaitement et compilait (avec les outils de l'époque (?)) sans problème quoi que puisse en penser certain.

    En tout état de cause maintenant cela marche

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58
  4. Réponses: 2
    Dernier message: 10/06/2002, 11h03
  5. [MFC] ADO connection
    Par philippe V dans le forum MFC
    Réponses: 3
    Dernier message: 10/06/2002, 07h36

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