我有一个脚本,在其中需要从DLL调用其他软件的函数。该脚本昨天和过去几个月运行了,但今天停止了。昨天我确实卸载并重新安装了python,因为我遇到了其他不相关的问题。
gmAPI = cdll.LoadLibrary(
"C:/Program Files (x86)/GoldMine/gm7s32.dll")
recid = create_string_buffer(16)
gmAPI.GMW_NewRecID(recid, username)
这是代码的一部分,正在尝试执行第三行,我得到的错误代码为6,无效句柄。这是一个32位dll,尽管已重新安装,但我正在同一32位解释器上运行它。
我的cdll对象显示如下:
<CDLL 'C:\Program Files (x86)\GoldMine\gm7s32.dll', handle 10000000 at 0x3f44280>
但是,该对象的_handle是:268435456。
我不是ctypes方面的专家,但是我认为100000000是无效的句柄,但是我希望它与对象的_handle一致。我不知道为什么这会改变。我以前已经在具有多个解释器的多台计算机上运行它。
现在正在工作。我认为切换到windll而不是cdll可以解决问题。不过,仍然不知道为什么它一直起作用然后又停止了,所以,如果有人愿意提供一种理论,那就继续吧。
gmAPI = windll.LoadLibrary(
'C:/Program Files (x86)/GoldMine/gm7s32.dll')
recid = create_string_buffer(16)
gmAPI.GMW_NewRecID(recid, username)