预期的 LP_c_short 实例而不是 _ctypes.PyCStructType

问题描述 投票:0回答:1

在别人制作的软件中我有这个功能:

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

python ctypes
1个回答
0
投票

我找到了解决方案:

        # 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))

它对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.