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):
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
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 }
=> L'initialisation est bien appell�e, mais toujours le m�me r�sulat: pas d'affichage de boites de dialogue.
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; }
J'ai �galement essayer de rajouter le code
avant l'appel de mes boites de dialogue (dans la Dll regular) ... sans succ�s.
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(); }
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
Partager