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 :

CDialog dans une DLL à partir d'un EXE en C


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Par défaut CDialog dans une DLL à partir d'un EXE en C
    Bonjour (chui en forme aujourd'hui)

    Projet:
    J'ai une application en C qui est de type: Utilise les bibliothèques Windows standard (donc non MFC).

    J'ai une DLL MFC avec une boite de dialogue.

    Je souhaite utilser cette DLL dans mon appli.


    Dans ma Dll:
    ------------
    Class CWinApp et CDialog
    Une fonction FonctionDll d'export/import qui a pour but de créer la CDialog en Modal.

    Dans mon Exe:
    --------------
    Je charge ma DLL par un
    HINSTANCE hInstance= LoadLibrary(PathDll);

    Probleme:
    ---------
    Si je fais m_MyDlg->DoModal(); dans la fonction CMyDllApp::InitInstance() elle s'ouvre sans probleme, mais c'est pas ce que je veux faire;

    Si je le fais dans la fonction d'export/import, ca plante dans le DoModal à la ligne: HINSTANCE hInst = AfxGetResourceHandle();

    J'ai parcouru ce forum et fait plein de tests, et je n'ai encore trouvé la solution, donc si vous avez une proposition.

    Merci
    mastergoddot

  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,
    pour l'avoir depuis très longtemps je peux te dire que ça fonctionne...
    ta fonction d'import est une fonction C déclarée dans ta DLL appelée depuis le programme en C ,c'est ça ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Par défaut
    Yes

  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
    La dll est bien lue avant l'appel de cette fonction ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Par défaut
    HINSTANCE hInstance;
    PSimuMgt pFctSimuManagmt;

    Côté Exe:
    ---------
    typedef int (*PFONCTION)(void);

    HINSTANCE hInstance= LoadLibrary(PathDll);
    pFctDll= (PFONCTION)GetProcAddress (hInstance,"FonctionDll");
    ret = (pFctDll)();
    FreeLibrary(hInstance);

    Côté DLL:
    ---------
    ifdef _USRDLL
    #define IMPEXP __declspec(dllexport)
    #else
    #define IMPEXP __declspec(dllimport)
    #endif

    IMPEXP int FonctionDll(void)
    {
    CDllDlg* pMyDlg = new CDllDlg;
    pMyDlg ->DoModal(); ==> Plantage
    }

    Faut-il mettre un parametre dans le constructeur de la Dlg?

    Meme plantage en non modal avec les fonction Create et ShowWindow

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    bonjour

    Ne faut il pas ajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    Au debut de toute les fonctions que tu exportes?

    cordialement

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Par défaut
    Normal ou pas?

    Dans la fonction:
    INT_PTR CDialog:oModal()
    {
    // can be constructed with a resource template or InitModalIndirect
    ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
    m_lpDialogTemplate != NULL);

    // load resource as necessary
    LPCDLGTEMPLATE lpDialogTemplate = m_lpDialogTemplate;
    HGLOBAL hDialogTemplate = m_hDialogTemplate;
    HINSTANCE hInst = AfxGetResourceHandle();

    J'ai :
    lpDialogTemplate = NULL
    hDialogTemplate = NULL

  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
    Citation Envoyé par ricky78
    bonjour

    Ne faut il pas ajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    Au debut de toute les fonctions que tu exportes?

    cordialement
    c'st une possibilité ...
    mais est-ce que ta dll en est static MFC ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Par défaut
    AFX_MANAGE_STATE(AfxGetStaticModuleState()); ==> C'est ca. Merci

    Ma DLL:
    Settings:
    Type de configuration: Bibliothèque dynamique (.dll)
    Utilisation des MFC: Utiliser les MFC dans une DLL partagée.

    Que faudrait-il mettre?

    Merci

  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
    ça fonctionne avec AFX_MANAGE_STATE(AfxGetStaticModuleState() ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Par défaut
    En mettant le DLL en static, en effet je n'ai pas besoin d'ajouté cette ligne.

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

Discussions similaires

  1. Lancer une dll à partir d'un exe
    Par jean.cdc dans le forum C
    Réponses: 17
    Dernier message: 25/07/2006, 17h44
  2. [VStudio 6] pb avec fonctions dans une DLL
    Par MogDeChNord dans le forum MFC
    Réponses: 8
    Dernier message: 08/01/2004, 08h57
  3. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 21h36
  4. PB avec "self" dans une dll
    Par DiJiRiDouS dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 09h32
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

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