Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1478 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [MFC] DLL d'extension MFC : inconsistance de CWnd

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MFC] DLL d'extension MFC : inconsistance de CWnd

n°1507655
slash33
Posté le 26-01-2007 à 22:43:35  profilanswer
 

J'ai un problème avec une DLL d'extension MFC (celle disposant d'un objet CWinApp propre et pour laquelle ont doit insérer une instruction AFX_MANAGE_STATE(AfxGetStaticModuleState()) au début de chaque méthode)

 

Ma DLL admet un point d'entrée de type:

Code :
  1. void InitTheDLL(HWND hWndCaller)
  2. {
  3. AFX_MANAGE_STATE(AfxGetStaticModuleState())
  4. CWnd* pWnd = CWnd::FromHandle(hWndCaller);
  5. // En fait, je récupère souvent un CTempWnd... avec des caractéristiques un peu étranges malgré le bon m_hWnd
  6. // hWndCaller désigne en fait un CFrameWnd
  7. CFrameWnd* pFrameWnd = static_cast<CFrameWnd*>(pWnd);
  8. // les attributs du pFrameWnd retourné sont incohérents. Au moindre appel nécessitant l'un de ces attributs, je crash la DLL
  9. }
 

L'idée principale était de créer un plugin sous forme de DLL. Ce pluggin doit gérer une barre d'outils propre à la DLL, l'intégrer dans la fenêtre passée en argument de InitTheDLL() et gérer les commandes de la barre d'outils via l'objet CWinApp de la DLL. Problème : si je retire l'instruction AFX_MANAGE_STATE, je récupère des pointeurs CWnd valides mais je ne peux charger ma barre d'outils car le module de ressource chargé n'est pas celui de la DLL mais de l'application ayant appelé la DLL. Si je garde AFX_MANAGE_STATE, les pointeurs CWnd sont incohérents mais la création de la barre d'outils réussi!

 

J'ai fait une tentative avec une DLL standard utilisant les MFC (Juste la DllMain et les instructions de chargement des MFC). Ca marche mais je suis bien embêté pour intercepter les options de la barre d'outils! Pour l'instant, je me suis résigné à gérer une communication en deux temps. L'application à étendre via le pluggin gère les messages de la barre d'outils grace à une plage de commandes (ID_xxx) réservées.

 

Note: dans les deux cas, la DLL est chargée avec ::LoadLibrary. Les fonctions sont appelées grâce à GetProcAdress et un prototype de fonction.

 

Je voudrais bien faire marcher le premier modèle pour que la DLL gère elle même son comportement et réduire le couplage lié à cette architecture.


Message édité par slash33 le 26-01-2007 à 22:54:26
mood
Publicité
Posté le 26-01-2007 à 22:43:35  profilanswer
 

n°1508476
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-01-2007 à 07:27:06  profilanswer
 

essaie d'isoler la récupération de pWnd en dehors de la zone définie par AFX_MANAGE_STATE :

Code :
  1. void InitTheDLL(HWND hWndCaller)
  2.     {
  3.         CWnd* pWnd = CWnd::FromHandle(hWndCaller);
  4.         {
  5.            AFX_MANAGE_STATE(AfxGetStaticModuleState())
  6.    
  7.    
  8.            CFrameWnd* pFrameWnd = static_cast<CFrameWnd*>(pWnd);
  9.         }
  10.    
  11.     }

n°1509109
slash33
Posté le 31-01-2007 à 13:50:09  profilanswer
 

Hum. J'avais fait des essais mais j'avais un problème soit avec la récupération du CWnd* soit avec la création de la barre d'outils (code non présenté dans l'extrait de code)
 
Je vais continuer à creuser dans ce sens.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [MFC] DLL d'extension MFC : inconsistance de CWnd

 

Sujets relatifs
renommer un fichier sans toucher à son extensionExtension automatique du design
MFC Slider Control[UNIX/LINUX] test d'existence de fichiers d'apres l'extension
[MFC] Utiliser des coordonnées "pixel"[reglé]Compilation source VB en DLL
[ASP.NET C#] Problème de DLL dans un site webExtension Visio 2003 pour schema de base mysql
[C++&JAVA] Choisir une DLL ou un exe ?[MFC][résolu] Librairie chargée à la volée avec des contrôles ActiveX
Plus de sujets relatifs à : [MFC] DLL d'extension MFC : inconsistance de CWnd


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR