Dialog MFC d'une DLL dans une application non MFC

Signaler
Messages postés
4
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
6 mars 2009
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Voilà j'ai une dll (MFC partagée) qui contient une fonction permettant
l'affichage d'une boîte de dialogue. Cette fonction fonctionne
correctement si je l'appelle avec un projet MFC.

Cependant lorsque je l'appelle avec un projet non MFC, la boite de
dialogue ne s'affiche pas car HWND hWndParent retourné par la fonction
PreModal() me retourne NULL dans la fonction DoModal().

Quelqu'un pourrait m'aider?

Nb: toutes les autres fonctions fonctionnent du moment qu'il n'y a pas d'affichage à faire.


merci

7 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
C'est tout le contraire qu'il faut prévoir.
Un prog peut utiliser toutes les surcouches qu'il voudra (MFC ou plus exotique) mais une DLL doit toujours être indépendante.

ciao...
BruNews, MVP VC++
Messages postés
4
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
6 mars 2009

D'accord mais ma DLL doit utiliser les MFC pour accéder à certaines fonctions. Mais je veux ensuite pouvoir distribuer ma DLL afin qu'elle soit utiliser par des progs non MFC !!!
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
NON et NON, une dll n'a pas à utiliser MFC ni rien d'autre que les fonctions API du système.
Tenir compte du fait qu'il faudra aussi un setup pour utiliser la dll, c'est une hérésie.
Tout ce qui se fait en MFC peut se faire en C sur API, pas l'inverse.

ciao...
BruNews, MVP VC++
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
Bonjour

Il est bien sûr possible de faire une dll en MFC, j'en ai fait plein et je ne vois pas où est le problème. Il suffit de fournir MFC42.dll lors de la distribution de la dll.

Par contre, pour des appels depuis des applications non MFC le plus simple est de fournir une interface en C, c'est à dire d'exporter des fonctions C et pas des classes C++ (utilise extern "C"). J'ai ainsi écrit une dll en MFC qui s'utilise à partir de n'importe quel langage (C, C++, Visual Basic, Java, Delphi, et même Excel) avec 2 niveaux d'interfaçage (C et C++)

Pour ce qui est de l'affichage d'une dialogbox de la dll il faut que tu indiques à ton programme où aller prendre les ressources, c'est à dire dans la dll. La fonction AfxSetResourcehandle est là pour ça.

Regarde ici : http://cpp.developpez.com/faq/vc/?page=DLL
ed73
Messages postés
4
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
6 mars 2009

Merci pour cette info. Aurais-tu un exemple concret à m'envoyer ?
En te remerciant
Messages postés
4
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
6 mars 2009

Et pour plus d'information, j'ai exporter mes fonctions avec extern "C" et mes classes avec AFX_EXT_CLASS et je distribue ma DLL avec un setup qui installe les DLLs MFC nécessaire.

Par contre c'est vraiment l'affichage de mon dialogue qui me pose problème. Donc serait-il possible d'avoir un exemple simple d'affichage d'un boîte de dialogue par l'appel d'une fonction dans un projet MFC avec la méthode AfxSetResourcehandle?

Si c'est possible de me l'envoyer sur auwel@free.fr

Merci
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
"Il suffit de fournir MFC42.dll ..."
encore faut-il compiler avec un VC++ du siècle dernier.

ciao...
BruNews, MVP VC++