在别人制作的软件中我有这个功能:
Result = GetStatusDownloadFile(self.server,pState,progress)
根据描述应该返回文件下载的状态和当前进度,但是当它执行时它会说:
ctypes.ArgumentError: argument 2: TypeError: expected LP_c_short instance instead of _ctypes.PyCStructType
据我了解,pState 中存在错误。在指南中我看到它被定义为枚举
typedef enum {
Error = -1,
Inactive = 0,
Config = 1,
ListenBootMode = 2,
ClearPattern = 3,
SetBank = 4,
ListenBank = 5,
EraseFlash = 6,
ListenErased = 7,
Load = 8,
Loading = 9,
Terminate = 10,
Successful = 11,
}
所以我想我应该将它定义为这样的结构
class pState(Structure):
_fields_ = [("Error", c_short), ("Inactive", c_short), ("Config", c_short),
("ListenBootMode", c_short), ("ClearPattern", c_short),("SetBank", c_short),
("ClearPattern", c_short),("ListenBank", c_short),("EraseFlash", c_short),("Load", c_short),
("Loading", c_short),("Terminate", c_short),("Successful", c_short)]
但我不知道如何将其“转换”为
LP_c_short
我找到了解决方案:
# create an instance of pState
state_instance = pState()
# make the pointer to pState
state_pointer = pointer(state_instance)
# convert the pointer pState in a pointer c_short
short_pointer = cast(state_pointer, POINTER(c_short))
它对我有用。