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 :

Problème lecture string "AFX_IDS_UNTITLED"


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut Problème lecture string "AFX_IDS_UNTITLED"
    Bonjour à tous. J'ai un problème aux lignes de codes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void CSingleDocTemplate::SetDefaultTitle(CDocument* pDocument)
    {
    	CString strDocName;
    	if (!GetDocString(strDocName, CDocTemplate::docName) ||
    		strDocName.IsEmpty())
    	{
    		// use generic 'untitled'
    		ENSURE(strDocName.LoadString(AFX_IDS_UNTITLED));
    	}
    	pDocument->SetTitle(strDocName);
    }
    Mon application plante au chargement de la string AFX_IDS_UNTITLED...
    Mon application tournait sous visual studio 2005 et ne présentait aucun problème. Maintenant qu'elle tourne sous VS2008 avec les nouvelles MFC, ce bug apparait.

    AFX_IDS_UNTITLED est défini dans afxres.h.

    En steppant en mode debug, j'ai remarqué que la fonction ::FindResource me renvoyait une réponse nulle.
    Je vous remercie d'avance pour vous idées, solutions.

    Quelqu'un aurait une idée?

  2. #2
    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,
    le moyen le plus rapide d'y remédier est de rajouter cette entrée dans ta string table ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    Merci farscape pour ta réponse.

    Je ne suis pas sur d'avoir bien compris ta réponse, tu proposes de rajouter AFX_IDS_UNTITLED comme ID et laisser vide l'endroit du caption?

  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
    non ,apparemment la définition de cette string n''est pas dans la string table,
    ce que je propose c'est de la rajouter dans la tienne...
    tu vas dans tes ressources , sur la string table tu fais clic droit nouvelle chaine.
    sur l'identifiant tu fais double click et tu sélectionnes:AFX_IDS_UNTITLED
    et tu remplis la légende...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    Merci Farscape pour ta réponse,
    Quelque chose m'échappe dans ce que tu dis. C'est bien rajouter l'ID dans les ressources que tu m'expliques (sorry j'ai le programme en anglais) parce qu'en faisant ça, la fonction va toujours chercher l'ID se trouvant dans les MFC... J'ai mis une photo en pièce jointe pour être sur que je fais ce que tu m'as dit.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    Je suis un petit peu perdu, quelqu'un sait comment faire lire une AFX_IDS_UNTITLED dans la string table plutot que dans l'MFC?

  7. #7
    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
    ton problème est étrange...
    je viens de faire l'essai sur un projet réglé en US.
    je n'ai pas de problème sur un : LoadString(AFX_IDS_UNTITLED)
    ton fichier ressource est localisé en français ?
    comment tu as installé les nouvelles MFC ?
    tu as passé le service pack 1 US ? ou tu as mis le pack en bêta?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    oui c'est la dernière version de Visual studio 2008. J'appelle les nouvelles MFC celles qui sont fournies par vs2008 lui-même, je n'ai rien fait de particulier là dessus. Mon application tourne sur différentes langues, et le problème ne se pose que pour la langue française... l'application n'a pas changé d'un poil vis-à-vis de la version visual studio 2005 (mis à part les WINVER 0X500 au lieu de 400) qui, elle, tourne sans souci.
    ...

    Que faire?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    Je viens de trouver un lien d'un gars qui a exactement le même problème que moi : http://www.codeguru.com/forum/printthread.php?t=349512

    A la fin il propose de modifier un paramètre lié à la définition préprocessing
    en ajoutant _AFXDLL...

    J'ai essayé mais cela ne change rien. Je ne suis pas bien sûr d'avoir compris cette manipulation d'ailleurs...

    Toute idée est toujours la bienvenue.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    Après recherche je viens de me rendre compte d'un détail plutôt important.

    L'application plante uniquement avec la version française... parce que mon Windows est configuré en version française... sur une version anglaise, l'application plante en anglais...

    mon fichier rc contient :
    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
    24
    25
    26
    27
    28
    29
    30
    // Microsoft Visual C++ generated resource script.
    //
    #include "..\resource.h"
     
    #define APSTUDIO_READONLY_SYMBOLS
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 2 resource.
    //
    #include "afxres.h"
     
    /////////////////////////////////////////////////////////////////////////////
    #undef APSTUDIO_READONLY_SYMBOLS
     
    /////////////////////////////////////////////////////////////////////////////
    // French (France) resources
     
    #if defined(AFX_TARG_FRA)
    #ifdef _WIN32
    LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
    #pragma code_page(1252)
    #endif //_WIN32
     
    /////////////////////////////////////////////////////////////////////////////
    //
    // Menu
    //
     
    IDR_MAINFRAME MENU 
    BEGIN...
    et c'est "LANGUAGE LANG_FRENCH" qui pose problème... en remplaçant par LANG_FINNISH par exemple ça fonctionne très bien (mais c'est en suédois du coup ^^). Je remarque aussi que le fichier afxres.h(fichier qui défini AFX_IDS_UNTITLED) a bien été inclu avant d'utiliser les language...

    Un peu plus loin dans le code j'ai trouvé ceci qui a l'air souvent utilisé dans d'autres applications que la mienne...
    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
    24
    #ifdef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // TEXTINCLUDE
    //
     
    1 TEXTINCLUDE 
    BEGIN
        "..\\resource.h\0"
    END
     
    2 TEXTINCLUDE 
    BEGIN
        "#include ""afxres.h""\r\n"
        "\0"
    END
     
    3 TEXTINCLUDE 
    BEGIN
        "\r\n"
        "\0"
    END
     
    #endif    // APSTUDIO_INVOKED
    Farscape : en regardant toutes les ressources utilisées par l'application j'ai remarqué que AFX_IDS_UNTITLED est déjà bien défini et présent uniquement en read only... J'ai joint une photo pour mieux comprendre ce que j'explique (la photo est tronquée à l'info essentielle dans un soucis de place mémoire).

    Si quelqu'un à un commentaire à faire ou bien une idée, elle serait vraiment la bienvenue.

    Merci, d'avance de vos réponses.

  11. #11
    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
    Regarde si tu disposes des versions françaises des ressources dans le répertoire de visual studio.
    exemple:
    \Microsoft Visual Studio 9.0\VC\atlmfc\include\l.fra
    \Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc\l.fra
    \Microsoft Visual Studio 9.0\VC\ce\atlmfc\include\l.fra

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    Pour le dossier
    \Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc\l.fra

    Je n'ai pas afxres.h de défini (contenant la string définie en fr).
    Ce dossier ne comporte que indicate.rc et prompts.rc...

    Pour les autres, il s'y trouve bien...

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    Tient apparemment le problème est réglé...

    J'ai remplacé à la fin du rc de langue française

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if defined(AFX_TARG_FRA)
    #ifdef _WIN32
    LANGUAGE 9, 1
    #pragma code_page(1252)
    #endif //_WIN32
    #include "res\Phoenix.rc2"  // non-Microsoft Visual C++ edited resources
    #include "l.fra\afxres.rc"         // Standard components
    #include "l.fra\afxprint.rc"       // printing/print preview resources
    #endif
     
     
    /////////////////////////////////////////////////////////////////////////////
    #endif    // not APSTUDIO_INVOKED
    LANGUAGE 9, 1 par LANGUAGE 12, 1...

    Je ne comprend pas très bien la différence entre ces deux bouts de code...

    Si quelqu'un peut m'éclairer, cela m'aiderait à savoir si cette modif est à valider ou à jeter au bac.

Discussions similaires

  1. Problème sur Request.ServerVariables("QUERY_STRING"
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/03/2005, 11h47

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