【发布时间】:2015-12-20 08:50:38
【问题描述】:
在 Windows 上,我有一个我们自己制作的 DLL,其中加载了另一个 DLL。问题是当在 Matlab 中使用带有loadlibrary、calllib 和unloadlibrary 的 DLL 时,一切都很好。
在 Python 中,我尝试使用 ctypes 和 cffi,两者的结果相同。我可以加载 DLL 并调用函数,但我无法再次退出。 Python 挂起,我必须从任务管理器中结束任务。
用ctypes我试着打电话
import _ctypes
_ctypes.FreeLibrary(lib._handle)
这里建议Free the opened ctypes library in Python 无效。此外,我尝试调用显式函数来卸载其他 DLL。
谁能给出提示或解决方案为什么它不会卸载/挂起?
【问题讨论】:
-
链接的副本有两个错误的答案。对于接受的答案,请注意
_ctypes扩展模块定义了dlclose和FreeLibrary。当库不能再被释放时,这些函数会引发OSError,因此没有理由使用 Piotr 的isLoaded函数。此外,他关于“ctypes 在内部保持对这个句柄的引用”的声明看起来只是编造的。实例_handle仅用于repr。没有理由delCDLL实例(即最终确定它,假设一个引用)。
标签: python ctypes python-cffi