关于ctypes结构体的指针调用
时间:2010-12-02
来源:互联网
pHeader是一个LP_RCV_DATA对象,是不是我的思路有错误了!请大哥们指出!
接口实例 RCV_DATA 是一个C的结构体
RCV_DATA * pHeader;
pHeader = (RCV_DATA *)lParam;
作者: samgell 发布时间: 2010-12-02
作者: iambic 发布时间: 2010-12-02
pHeader[0]就是一个RCV_DATA, 就是模拟结构的类
但是无论使用pHeader.xxx还是pHeader.xxx
都会发出 object has no xxx attribute的错误
作者: samgell 发布时间: 2010-12-02
pHeader是一个指针,要先使用pHeader.contents拿到指向的对象。以后遇到这种问题你可以自己dir(pHeader)。
作者: iambic 发布时间: 2010-12-02
作者: samgell 发布时间: 2010-12-02
这是我的模拟结构体的类
class RCV_DATA(Structure):
__pack__ = 1
__fields__ = [
("m_wDataType", c_int),('m_nPacketNum', c_int),
("m_File", RCV_FILE_HEADEx),("m_bDISK", c_int)
]
class interRCV_DATA(Union):
__pack__ = 1
__fields__ = [
("m_pReportV2",POINTER(RCV_REPORT_STRUCTExV2)),("m_pReportV3",POINTER(RCV_REPORT_STRUCTExV3)),
("m_pDay",POINTER(RCV_HISTORY_STRUCTEx)),("m_pMinute",POINTER(RCV_MINUTE_STRUCTEx)),
("m_pPower",POINTER(RCV_POWER_STRUCTEx)),("m_pData",c_void_p)
]
这个是操作代码
def winEvent(self, msg):
if(msg.message != StockInterface.WM_STOCKARRIVE):
return False, id(msg)
pHeader = cast(msg.lParam, POINTER(StockInterface.RCV_DATA))
dataObject = pHeader.contents
if(msg.wParam == StockInterface.RCV_REPORT):
for i in range(0, dataObject.m_nPacketNum):
pass
作者: samgell 发布时间: 2010-12-02
['__class__', '__ctypes_from_outparam__', '__delattr__', '__dict__', '__doc__', '__fields__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__pack__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', '_b_base_', '_b_needsfree_', '_objects', 'interRCV_DATA']
作者: samgell 发布时间: 2010-12-02
作者: iambic 发布时间: 2010-12-02
作者: iambic 发布时间: 2010-12-02
class RCV_DATA(Structure): __pack__ = 1 __fields__ = [ ("m_wDataType", c_int),('m_nPacketNum', c_int), ("m_File", RCV_FILE_HEADEx),("m_bDISK", c_int) ] class interRCV_DATA(Union): __pack__ = 1 __fields__ = [ ("m_pReportV2",POINTER(RCV_REPORT_STRUCTExV2)),("m_pReportV3",POINTER(RCV_REPORT_STRUCTExV3)), ("m_pDay",POINTER(RCV_HISTORY_STRUCTEx)),("m_pMinute",POINTER(RCV_MINUTE_STRUCTEx)), ("m_pPower",POINTER(RCV_POWER_STRUCTEx)),("m_pData",c_void_p) ] def winEvent(self, msg): if(msg.message != StockInterface.WM_STOCKARRIVE): return False, id(msg) pHeader = cast(msg.lParam, POINTER(StockInterface.RCV_DATA)) dataObject = pHeader.contents if(msg.wParam == StockInterface.RCV_REPORT): for i in range(0, dataObject.m_nPacketNum): pass
作者: samgell 发布时间: 2010-12-02
作者: iambic 发布时间: 2010-12-02
class RCV_DATA(Structure): __pack__ = 1 __fields__ = [ ("m_wDataType", c_int),('m_nPacketNum', c_int), ("m_File", RCV_FILE_HEADEx),("m_bDISK", c_int) ] class interRCV_DATA(Union): __pack__ = 1 __fields__ = [ ("m_pReportV2",POINTER(RCV_REPORT_STRUCTExV2)), ("m_pReportV3",POINTER(RCV_REPORT_STRUCTExV3)), ("m_pDay",POINTER(RCV_HISTORY_STRUCTEx)), ("m_pMinute",POINTER(RCV_MINUTE_STRUCTEx)), ("m_pPower",POINTER(RCV_POWER_STRUCTEx)), ("m_pData",c_void_p) ] def winEvent(self, msg): if(msg.message != StockInterface.WM_STOCKARRIVE): return False, id(msg) pHeader = cast(msg.lParam, POINTER(StockInterface.RCV_DATA)) dataObject = pHeader.contents if(msg.wParam == StockInterface.RCV_REPORT): for i in range(0, dataObject.m_nPacketNum): pass
作者: samgell 发布时间: 2010-12-02
作者: iambic 发布时间: 2010-12-02
Python code
class interRCV_DATA(Union): _pack_ = 1 _fields_ = [ ("m_pReportV2",POINTER(RCV_REPORT_STRUCTExV2)), ("m_pReportV3",POINTER(RCV_REPORT_STRUCTExV3)), ("m_pDay",POINTER(RCV_HISTORY_STRUCTEx)), ("m_pMinute",POINTER(RCV_MINUTE_STRUCTEx)), ("m_pPower",POINTER(RCV_POWER_STRUCTEx)), ("m_pData",c_void_p) ] class RCV_DATA(Structure): _pack_ = 1 _anonymous_ = ("u",) _fields_ = [ ("m_wDataType", c_int),('m_nPacketNum', c_int), ("m_File", RCV_FILE_HEADEx),("m_bDISK", c_int) ('u', interRCV_DATA) ]
作者: iambic 发布时间: 2010-12-02
作者: samgell 发布时间: 2010-12-02
作者: iambic 发布时间: 2010-12-02
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28