Je programme sur C++, j'utilise Visual Studio 2008, Windows XP et j'ai le problème suivant: Mon application , c'est une DLL qui peut être utilisée à partir de Python, charge une DLL externe, utilise les méthodes requises, puis décharge cette DLL externe. Cela fonctionne correctement, mais après plus de 1000 cycles, la méthode "LoadLibraryA" renvoie une référence NULL.La méthode LoadLibraryA renvoie le code d'erreur 1114 (ERROR_DLL_INIT_FAILED) après plus de 1000 cycles de chargement/déchargement
Les principales étapes sont les suivantes:
HINSTANCE h = NULL;
h = LoadLibraryA(dllfile.c_str());
DWORD dw = GetLastError();
L'erreur s'est:
ERROR_DLL_INIT_FAILED
1114 (0x45A) A dynamic link library (DLL) initialization routine failed.
Le dll est déchargé en utilisant les éléments suivants:
FreeLibrary(mDLL);
mDLL = NULL;
Où MDLL est défini comme celui-ci :
HINSTANCE mDLL;
Première alternative essayée: Il suffit de charger la DLL une seule fois et de la décharger à la fin de l'application. Cela corrige le problème mais en introduit un nouveau.
Lorsque l'application se termine, au lieu d'exécuter d'abord la méthode DllMain de mon application, qui décharge la DLL externe, exécute d'abord la méthode DllMain de l'autre Dll. Cela provoque l'erreur suivante car mon application essaie de décharger une DLL qui était déchargée par elle-même précédemment. "Exception non gérée à 0x04a00d07 (DllName.DLL) dans Python.exe: 0xC0000005: violation d'accès emplacement de lecture 0x0000006b".
Toute suggestion sera la bienvenue. Merci d'avance. Cordialement.
Comment publier le code DLL approprié pour que nous puissions vous aider à trouver le bogue? –
On dirait que vous appelez LoadLibrary et FreeLibrary dans votre DllMain. Ne fais pas ça; C'est une recette pour le désastre. – Luke
Avez-vous déjà trouvé la cause du problème? Je cours dans la même chose où LoadLibrary/FreeLibrary a été appelé quelques centaines de fois et ensuite je reçois la même erreur. Mon application est tout C++, pas de python impliqué. –