В Windows У меня есть DLL, которую мы сделали сами, среди других загружает другую DLL. Проблема в том, что при использовании DLL в Matlab с loadlibrary
, calllib
и unloadlibrary
все в порядке.Выгрузить DLL, загруженную в Python
В Python я попытался использовать ctypes
и cffi
, оба с одинаковыми результатами. Я могу загрузить функции DLL и вызова, но я не могу выйти снова. Python зависает, и я должен закончить задачу из Диспетчера задач.
С ctypes
Я пытался позвонить
import _ctypes
_ctypes.FreeLibrary(lib._handle)
как предложено здесь Free the opened ctypes library in Python без эффекта. Кроме того, я попытался вызвать явную функцию для выгрузки другой DLL.
Может ли кто-нибудь дать подсказку или решение, почему она не будет выгружаться/висит?
Связанный дубликат содержит два ошибочных ответа. Для принятого ответа обратите внимание, что модуль расширения '_ctypes' определяет' dlclose' и 'FreeLibrary'. Эти функции повышают «OSError», когда библиотека больше не может быть освобождена, поэтому нет причин для функции «isLoaded» Piotr. Более того, его утверждение о том, что «ctypes сохраняет внутренние ссылки на этот дескриптор», выглядит просто составленным. Экземпляр '_handle' используется только для объявления. Нет причин для 'del' экземпляра' CDLL' (т. Е. Завершить его, предполагая одну ссылку). – eryksun