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] - DLL ressource et CDialogBar & Menu


Sujet :

MFC

  1. #1
    Membre confirm�
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par d�faut [MFC] - DLL ressource et CDialogBar & Menu
    Re Re Hello,

    Maintenant j'ai un autre soucis.

    Pour les ressources de toutes les bo�tes de dialogues de mon application, les ressources se mettent bien � jour par rapport � ma DLL de ressources.

    Dans mon application j'ai un menu et je fais appel � des CDialogBar.
    Pour celles-ci les ressources ne se mettent pas � jour par rapport � la DLL.

    Auriez vous une petite id�e ?

    Merci

    Alice

  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
    argh c'est le cot� obscur de l'autre post !
    je vais quand m�me faire un essai en MDI pour voir lol


  3. #3
    Membre confirm�
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par d�faut
    J'ai peut �tre un d�but de piste :

    Le menu et les CDialogBar sont cr��s au moment o� l'on effectue un LoadFrame.
    Comme mes bo�tes de dialogues ne sont cr��es que bien apr�s, les ressources ont eu le temps de basculer vers les ressources de la DLL.

    Si l'on r�ussi � mettre � jour les ressources avant de cr�er le menu et les CDialog Bar, alors on devrait avoir normalement les ressources dans la langue souhait�e.

    Alice

  4. #4
    Membre confirm�
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par d�faut Solution pour la partie Menu de l'application
    Apr�s r�flexion, je viens de trouver la solution au probl�me du menu :
    Il suffit de recharger le menu

    D�tails de la solution :

    Chargement de la mainFrame avec LoadFrame
    Chargement de la DLL de ressource ad�quate
    Mise � jour des ressources en g�n�rale
    Chargement d'une instance de menu avec l'identifiant du menu principal de l'application
    Mise � jour du menu en cours avec un SetMenu de l'instance de menu pr�c�demment charg�

    En code :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    ...
    	// create main MDI Frame window
    	CMainFrame* pMainFrame = new CMainFrame;
     
    	if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
       {
    		return FALSE;
       }
    	m_pMainWnd = pMainFrame ;
     
       //--------------------------------------------------------------
       // Récupération de la librairie à charger
     
       // impose d'utiliser la dll france
       WriteProfileInt("Language","SetInEs",true);
     
       // récupération de la langue choisie
       m_bFrenchRes=(GetProfileInt("Language","SetInEs",0)==1);
       HINSTANCE dll ;
       if(m_bFrenchRes)
       {
          //--------------------------------------------------------------
          // chargement de la librairie
          dll = LoadLibrary("Pilot3D_Es.dll");
          if(dll) 
          {
             //--------------------------------------------------------------
             //mise à jour des ressources
             AfxSetResourceHandle(dll);
     
             //--------------------------------------------------------------
             // mise à jour du menu
             CMenu menu ;
             menu.LoadMenu(IDR_MAINFRAME) ;
             m_pMainWnd->SetMenu(&menu) ;
          }
       }
    ..
    Et l� on obtient un joli menu dans la langue souhait�e !



    Alice

    PS : Peut �tre que pour les CDialogBars charg�es au d�but de l'application, c'est la m�me chose .... ?

  5. #5
    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
    ce qui me derange encore ,c'est pourquoi en MDI tu as eu un probleme sur le chargement de la mainframe quand la DLL etait charg�e avant ..

  6. #6
    Membre confirm�
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par d�faut
    je ne sais pas .....

    tout ce que je peux te dire c'est que lorsque l'on met � jour les ressources avant de de charger la fen�tre principale : la fonction LoadFrame provoque une erreur et du coup mon application se ferme par un return false....

    Dans les cas suivants, l'application s'arr�te apr�s LoadFrame et retourne false :
    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
     
    ...
    //--------------------------------------------------------------
       // Chargement de la librairie adéquate
     
       // impose d'utiliser la dll france
       WriteProfileInt("Language","SetInEs",true);
     
       // récupération de la langue choisie
       m_bFrenchRes=(GetProfileInt("Language","SetInEs",0)==1);
       if(m_bFrenchRes)
       {
          // chargement de la librairie
          HINSTANCE dll = LoadLibrary("Pilot3D_Es.dll");
          if(dll) 
          {
             //mise à jour des ressources
             AfxSetResourceHandle(dll);
          }
       }
       // create main MDI Frame window
       CMainFrame* pMainFrame = new CMainFrame;
     
       if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
       {
    		return FALSE;
       }
    	m_pMainWnd = pMainFrame ;
    ...
    ou

    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
    31
    32
     
    ...
    //--------------------------------------------------------------
       // Chargement de la librairie adéquate
     
       // impose d'utiliser la dll france
       WriteProfileInt("Language","SetInEs",true);
     
       // récupération de la langue choisie
       m_bFrenchRes=(GetProfileInt("Language","SetInEs",0)==1);
     HINSTANCE dll ;
       if(m_bFrenchRes)
       {
          // chargement de la librairie
          dll = LoadLibrary("Pilot3D_Es.dll");
     
       }
       // create main MDI Frame window
       CMainFrame* pMainFrame = new CMainFrame;
     
          if(dll) 
          {
             //mise à jour des ressources
             AfxSetResourceHandle(dll);
          }
     
       if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
       {
    		return FALSE;
       }
    	m_pMainWnd = pMainFrame ;
    ...
    Dans les deux cas suivants, l'application ne se ferme 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
    23
    24
    25
    26
    27
    28
    29
    30
     
    ...
    	// create main MDI Frame window
    	CMainFrame* pMainFrame = new CMainFrame;
     
    	if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
       {
    		return FALSE;
       }
    	m_pMainWnd = pMainFrame ;
     
       //--------------------------------------------------------------
       // Chargement de la librairie adéquate
     
       // impose d'utiliser la dll france
       WriteProfileInt("Language","SetInEs",true);
     
       // récupération de la langue choisie
       m_bFrenchRes=(GetProfileInt("Language","SetInEs",0)==1);
       if(m_bFrenchRes)
       {
          // chargement de la librairie
          HINSTANCE dll = LoadLibrary("Pilot3D_Es.dll");
          if(dll) 
          {
             //mise à jour des ressources
             AfxSetResourceHandle(dll);
          }
       }
    ...
    ou

    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
    31
     
    ...
       //--------------------------------------------------------------
       // Chargement de la librairie adéquate
     
       // impose d'utiliser la dll france
       WriteProfileInt("Language","SetInEs",true);
     
       // récupération de la langue choisie
       m_bFrenchRes=(GetProfileInt("Language","SetInEs",0)==1);
       HINSTANCE dll ;
       if(m_bFrenchRes)
       {
          // chargement de la librairie
          HINSTANCE dll = LoadLibrary("Pilot3D_Es.dll");
       }
    	// create main MDI Frame window
    	CMainFrame* pMainFrame = new CMainFrame;
     
    	if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
       {
    		return FALSE;
       }
       if(dll) 
          {
             //mise à jour des ressources
             AfxSetResourceHandle(dll);
          }
     
    	m_pMainWnd = pMainFrame ;
    ...
    J'esp�re que cela va t'aider dans la compr�hension du bug ....

    Alice

  7. #7
    Membre confirm�
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par d�faut Suite et Fin
    Bon je confirme pour les CDialogBars, s'�tait pareil.

    si je les cr��s une fois que tout est lanc� (apr�s le OnCreate de ma mainFrame), il n'y a aucun soucis : les ressources sont mises � jour par rapport aux ressources de la DLL charg�es.



    Alice

  8. #8
    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
    re,
    je viens de refaire un essai en transformant mon exemple SDI en MDI �a fonctionne :
    http://farscape.developpez.com/Sampl...tResDllMDI.zip

    peut etre faire un essai de rajouter un dialogbar dans ce projet mais bon je ne vois pas pourquoi �a generait

    t'en penses quoi ?

  9. #9
    Membre confirm�
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par d�faut
    A partir de tes lumi�res, j'ai repris mon application de mani�re � charger la dll et mettre � jour les ressources avant de lancer LoadFrame.

    Cette fois ci, �a marche � condition que les dialogsBar soient bien g�n�r�es en dehors du OnCreate de la mainFrame.

    A partir du moment ou j'en met une dans le OnCreate, LoadFrame refuse de fonctionner.

    Cependant j'ai une DialogBar qui contient une grille, sa ressource est strictement identique entre la DLL et le projet d'origine. Mais quand on est avec les ressources de la DLL, il y a un probl�me de cr�ation de la bo�te de dialog flottante.

    Sinon toutes mes autres CDialogBar se cr��ent tr�s bien ainsi que le menu qui se met � jour correctement sans �tre oblig� de le recharger !

    Tu y comprends quelque chose ?


    Alice

  10. #10
    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
    bon ,je reviens a la charge:
    http://farscape.developpez.com/Sampl...tResDllMDI.zip

    exemple complet� avec une barre de dialogue dans la mainframe.
    �a fonctionne.
    par contre j'ai eu des problemes sur la lecture de la DLL de ressources.
    apres sa generation en release je la copie a la racine du projet...


  11. #11
    Membre confirm�
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par d�faut
    Hello,

    Je suis tout a fait d'accord mais dans mon application j'ai 7 dialogBar + une barre d'�tat.
    La barre d'�tat et 6 bo�tes de dialogues sont tr�s bien prises en comptes mais la 7�me ne se cr�� absolument pas...
    et l� cela reste un myst�re car il n'y a pas vraiment de diff�rences avec les autres.

    Merci encore pour ton aide.

    Alice

  12. #12
    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
    pour preciser un peu plus le context:
    tes dialogues barres sont toutes au niveau de la mainframe ?
    essaie aussi de recopier (avec une petite sauvegarde avant )
    le fichier resource.h maitre dans le repertoire de la DLL.


  13. #13
    Membre confirm�
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par d�faut
    Pour le fichier ressource, m�me en recopiant � nouveau le ressource principal dans le r�pertoire de la DLL : la 7�me bo�te ne veut absolumment pas se cr�er.

    Alors qu'avant, elle se cr�ait tr�s bien !

    Sinon pour le context : toutes mes bo�tes de dialogues sont cr��s � partir de ma MainFrame.

    Je s�che compl�tement et comme c'est hyper press� je passe par une autre m�thode pour passer mon appli. en multilingue.

    Ceci dit je vais continuer � chercher en parall�le.

    Merci.

    Alice

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 6
    Dernier message: 29/03/2008, 19h01
  2. [MFC] DLL avec boite de dialogue
    Par ricky78 dans le forum MFC
    R�ponses: 2
    Dernier message: 17/06/2005, 12h06
  3. [MFC][DLL]Dialog Avec ActiveX dans une DLL ?
    Par matazz dans le forum MFC
    R�ponses: 1
    Dernier message: 16/05/2005, 16h36
  4. [MFC][DLL]Afficher une CDialog ?
    Par matazz dans le forum MFC
    R�ponses: 13
    Dernier message: 13/04/2005, 13h47
  5. [MFC] DLL et notifications d'�v�nements
    Par Kaori dans le forum MFC
    R�ponses: 19
    Dernier message: 22/03/2005, 09h33

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