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

C++/CLI Discussion :

Echec du chargement des resources d'une Dll MFC à partir d'une Dll regular en C++/CLI


Sujet :

C++/CLI

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique et build master
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Echec du chargement des resources d'une Dll MFC à partir d'une Dll regular en C++/CLI
    Bonjour,

    Ma solution est composée de:
    - 1 executable codé en C# qui fait référence à:
    - 1 Dll "regular" codée en C++/CLI qui fait référence à:
    - 1 Dll d'extension possédant des boites de dialogues et autres resources MFC

    L'appel et l'affichage des boites de dialogues sous Visual 2003 fonctionnait bien. Mais depuis le passage à Visual 2005 et à l'option \CLR (au lieu de \CLR old syntaxe) pour la compil de Dll regular, impossible d'afficher les boites de dialogue (AfxGetResourceHandle retourne NULL).

    Je suis reparti de 0 en créant une nouvelle Dll "regular" qui appelle une nouvelle Dll d'extension et toujours le même problème.

    Le code de la dllMain de la Dll d'extension est le suivant (classique):
    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
    40
     
    static AFX_EXTENSION_MODULE DllExtensionResourceDLL = { NULL, NULL };
    extern "C" int APIENTRY
    DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {
    	// Remove this if you use lpReserved
    	UNREFERENCED_PARAMETER(lpReserved);
     
    	if (dwReason == DLL_PROCESS_ATTACH)
    	{
    		TRACE0("DllExtensionResource.DLL Initializing!\n");
     
    		// Extension DLL one-time initialization
    		if (!AfxInitExtensionModule(DllExtensionResourceDLL, hInstance))
    			return 0;
     
    		// Insert this DLL into the resource chain
    		// NOTE: If this Extension DLL is being implicitly linked to by
    		//  an MFC Regular DLL (such as an ActiveX Control)
    		//  instead of an MFC application, then you will want to
    		//  remove this line from DllMain and put it in a separate
    		//  function exported from this Extension DLL.  The Regular DLL
    		//  that uses this Extension DLL should then explicitly call that
    		//  function to initialize this Extension DLL.  Otherwise,
    		//  the CDynLinkLibrary object will not be attached to the
    		//  Regular DLL's resource chain, and serious problems will
    		//  result.
     
    		new CDynLinkLibrary(DllExtensionResourceDLL);
     
    	}
    	else if (dwReason == DLL_PROCESS_DETACH)
    	{
    		TRACE0("DllExtensionResource.DLL Terminating!\n");
     
    		// Terminate the library before destructors are called
    		AfxTermExtensionModule(DllExtensionResourceDLL);
    	}
    	return 1;   // ok
    }
    J'ai vu sur certains forums qu'il fallait que la "regular" Dll initialise elle même les ressources de la Dll d'extension. J'ai donc, comme le conseillait l'article, inséré le code d'initialisation des ressources dans une méthode que j'ai exportée et qui est appellée dans InitInstance de la "regular" Dll:
    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
    Dans Dll extension:
    extern "C" MY_EXPORT void WINAPI InitYourExtDLL()
    {
    	// Create a new CDynLinkLibrary for this app.
    	TRACE0("DllExtensionResource.DLL Initializing RESOURCES!\n");
    	new CDynLinkLibrary(DllExtensionResourceDLL);
    }
    
    Dans Dll regular:
    BOOL CDllRegularApp::InitInstance()
    {
    	CWinApp::InitInstance();
    
    	InitYourExtDLL();
    
    	return TRUE;
    }
    => L'initialisation est bien appellée, mais toujours le même résulat: pas d'affichage de boites de dialogue.
    J'ai également essayer de rajouter le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void DllRegularWrapper::OuvreBoite()
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
     
    	AfficheDlgDllExtension();
    }
    avant l'appel de mes boites de dialogue (dans la Dll regular) ... sans succés.

    Ca fait déjà plusieurs jours que je suis sur ce problème. Est ce que quelqu'un pourrait il m'aider?

    Merci par avance

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur informatique et build master
    Inscrit en
    Novembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    J'ai finalement créé une Dll mixte contenant à la fois le code de la Dll Regular (C++/CLI) et celui de la Dll d'extension (C++ natif (dont les resources)).
    Le projet (de la Dll mixte) possèdant l'option "No Common Language runtime support" alors que les fichiers .cpp contenant du code C++/CLI possédant l'option CLR.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/01/2016, 14h08
  2. Réponses: 4
    Dernier message: 10/10/2010, 12h46
  3. Réponses: 2
    Dernier message: 05/03/2010, 15h15
  4. Affichage d'une fenêtre MFC à partir d'une DLL
    Par damdam78 dans le forum MFC
    Réponses: 1
    Dernier message: 25/11/2009, 11h24
  5. [Eclipse + Jogl] Echec de chargement des librairies natives
    Par dabeuliou dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 18/11/2007, 06h52

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