我发现这里有几篇关于使用ctypes卸载dll的文章,我按照所述方式进行了操作:
from ctypes import *
file = CDLL('file.dll')
# do some stuff here
handle = file._handle # obtain the DLL handle
windll.kernel32.FreeLibrary(handle)
然而,我正在使用Python 64位版本,并且我的DLL也是为x64编译的,但是在上面的最后一行代码中出现了错误:
argument 1: <class 'OverflowError'>: int too long to convert
我检查了句柄,发现它是一个长整型(int64)的‘8791681138688’,那么这是否意味着windll.kernel32只处理int32句柄?Google搜索显示kernal32也适用于64位Windows。那么我该怎么处理呢?
kernel32.FreeLibrary(handle)
,而不是windll.kernel32.FreeLibrary(handle)
,对吧? - endolithkernel32
上缓存的FreeLibrary
函数指针的原型。最好避免使用windll
加载器,因为它是全局的,并且可能会导致常见共享库(如kernel32.dll)的软件包之间发生冲突。 - Eryk Sun