Widziałem ten problem wspomniany tu i tam, szczególnie przez 7bit, ale nigdy nie udało mi się obejść tego problemu:
Tester egy nie odpowiednio zmniejsza liczbę odwołań załadowanej biblioteki podczas deinit (). Z tego powodu plik DLL pozostaje załadowany do systemu i ulega awarii podczas próby ponownego uruchomienia testera.
Próbowałem użyć GetModuleHandle () i FreeLibrary (), ale to nie rozwiązało problemu.
Wstawiony kod, jeśli (IsTesting ()) {int dll_handle = DLLHandle (C: \ Program Files (x86) \ MT \ experts \ libraries \ SQLBridgeV2.dll); Drukuj (dll_handle); if (dll_handlegt; 0) FreeLibrary (dll_handle); } KOREKTA:
dll_handle zwraca liczbę inną niż 0, a FreeLibrary ją zmniejsza.
Jeśli ponownie sprawdzę funkcję GetModuleHandle (), otrzymam 0 - co powinno oznaczać, że biblioteka jest rozładowana.
Jednak jeśli ponownie uruchomię tester, nadal się zawiesza.
Jest to dość denerwujące, ponieważ nie mogę korzystać z funkcji optymalizacji.
Co dokładnie się dzieje? Czy globalne zmienne DLL są inicjowane i zanieczyszczone danymi z ostatniego testu? Czy wystąpił błąd podczas próby zainicjowania biblioteki DLL przez już zainicjowaną bibliotekę DLL?