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 :

Une application MDI dans une Dll..


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 72
    Par défaut Une application MDI dans une Dll..
    Bonjour à toutes et à tous !


    Voilà ça fait deux jours que je lis la doc et que je brasse des tonnes d'exemples donc je me dis que enfin je dois avoir le droit de poser la question. C'est une question que j'ai vu posée pas mal de fois mais les réponses n'ont pas été d'une grande aide.

    Donc mon projet repose sur le développement d'une application. Comme je l'ai écrit dans le sujet, il s'agit d'une Dll qui sera chargée depuis un éxécutable quelconque. Je veux que la Dll charge une application MFC de type MDI.

    ce que je fais pour l'instant :

    1. CMyApp * theApp ; // dérivée de CWinApp of course, objet global

    2. le point d'entrée (extern C etc.) de la Dll fait :
    theApp = new CMyApp() ;
    theApp->InitInstance() ;

    je suis passé par une fonction externe et un pointeur parceque quand je déclarais theApp en tant que CMyApp et que je loadais la Dll, ça allait bien dans la constructeur mais pas dans InitInstance().

    Cela étant dit, même si j'y arrive, je ne m'en sors pas.. le debug me sors toujours un plantage sur telle ou telle assertion :

    ASSERT(afxCurrentInstanceHandle != NULL);

    ou encore :

    ASSERT(afxCurrentInstanceHandle == m_hInstance);


    j'ai essayé les trucs les plus souvent recommandés :

    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    au tout début de ma fonction externe (le point d'entrée de la Dll)

    AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)
    histoire de voir si ça marcherait pas au cas où..

    ou encore :

    AfxRegisterWndClass(..)



    Donc voilà en gros j'arrive pas à lancer une appli MDI à partir d'une DLL, sachant que l'éxécutable qui la chargera ne devra rien avoir à voir là dedans.
    Bon et bien j'espère que quelqu'un va sourire et se dire "mon dieu le problème est bien connu" et me donner la réponse, parceque là je stagne


    désolé si je ne suis pas très clair, je suis conscient d'avoir le nez dans mon programme, n'hésitez pas à me demander des explications


    A bientôt !



    totem, qui croise les doigts

  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,
    non ce n'est pas tres clair...
    pour moi c'est le programme qui charge la DLL et non l'inverse..
    comment est elle chargée ?
    c'est une dll d'extensions ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 72
    Par défaut
    En fait je voudrais faire une application MDI qui soit toute intégrée dans une dll, et quand je charge la dll à partir d'un autre programme, paf ! ça lance l'application.

    mais il me semble qu'il y a comme un problème de "pompe de messages" ou quelque chose dans ce genre là (je débute en MFC)

  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
    pour que ça fonctionne (en premier lieu) il faut que ta dll soit une dll d'extension MFC...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 72
    Par défaut
    Ok.. merci pour l'info


    donc si je lis dans la doc :

    1. Seuls les exécutables MFC (applications ou DLL normales) qui sont générés à l'aide de la version partagée des MFC peuvent utiliser une DLL d'extension

    et

    2. Les DLL d'extension ne doivent pas instancier une classe dérivée de CWinApp, mais doivent se fier à l'application cliente (ou DLL) pour la fourniture de cet objet. (tiens d'ailleurs tu me dis qu'il faut que ce soit une dll d'extension mais là ils disent qu'il ne faut pas d'objet dérivé de CWinApp)

    ça veut dire que je ne peux pas faire une application MDI encapsulée dans une dll et seulement dedans (comportement inclus)

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je n'en suis pas certain.
    Tu peux peut-être essayer une DLL MFC régulière, dont une fonction ferait le tout (mais j'ignore ce qui doit se passer au niveau de sa CWinApp, je n'ai jamais fait de DLL MFC régulière.

    Ou bien, tu peux aussi faire du MDI sans MFC, mais tu n'auras plus le modèle Document/Vue...
    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.

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/07/2007, 16h34
  2. Réponses: 2
    Dernier message: 15/10/2006, 18h01
  3. Comment fermer une fenêtre Child dans une application MDI
    Par bahiatoon dans le forum C++Builder
    Réponses: 9
    Dernier message: 05/10/2006, 08h57
  4. Réponses: 3
    Dernier message: 08/07/2006, 19h59
  5. Réponses: 11
    Dernier message: 06/12/2005, 08h23

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