私は C++ でプログラミングしており、Visual Studio 2008、Windows XP を使用しており、次の問題があります: Python から使用できる DLL である私のアプリケーションは、外部 dll をロードし、必要なメソッドを使用し、次に、この外部 Dll をアンロードします。正常に動作していますが、1000 サイクルを超えると、メソッド「LoadLibraryA」は NULL 参照を返します。
主な手順は次のとおりです。
HINSTANCE h = NULL;
h = LoadLibraryA(dllfile.c_str());
DWORD dw = GetLastError();
得られたエラーは次のとおりです。
ERROR_DLL_INIT_FAILED
1114 (0x45A) A dynamic link library (DLL) initialization routine failed.
Dll は、次を使用してアンロードされます。
FreeLibrary(mDLL);
mDLL = NULL;
mDLL は次のように定義されています。
HINSTANCE mDLL;
最初に試みた代替方法: Dll を 1 回だけロードし、アプリケーションの終了時にアンロードします。これで問題は解決しますが、新しい問題が発生します。
アプリケーションが終了すると、最初にアプリケーションの DllMain メソッドを実行する代わりに、外部 DLL をアンロードし、最初に他の Dll の DllMain メソッドを実行します。これにより、アプリケーションが以前に単独でアンロードされた Dll をアンロードしようとしているため、次のエラーが発生します。
「Python.exe の 0x04a00d07 (DllName.DLL) で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x0000006b」.
どんな提案も歓迎します。前もって感謝します。よろしく。