【问题标题】:Accessing a structure which is a member of another structure through pointer in python通过python中的指针访问作为另一个结构成员的结构
【发布时间】:2012-11-29 12:21:32
【问题描述】:

我的结构如下

class DEVINFO(Structure):
       _fields_ = [("szDeviceName", c_char*MAX_PATH),                                           
                   ("pDevExtension", POINTER(DEVEXTENSION))]

上面的DEVEXTENSION结构如下

class DEVEXTENSION(Structure):
            _fields_ = [("szProductName",c_char*MAX_PATH),
                        ("szManfName",c_char*MAX_PATH),
                        ("szSerialNumber",c_char*32)]

我的问题是如何访问“DEVEXTENSION”结构的成员。

devInfo = DEVINFO()
devInfo.szDeviceName = "USB Flash 302"
print(devInfo.szDeviceName)

【问题讨论】:

  • 将您的问题更改为完全不同的问题是一种不好的做法。您应该发布一个新问题。我会把这个恢复到原来的状态。
  • @Lattyware 现在我将如何修改上述问题或为同一问题提供其他内容

标签: python pointers structure pass-by-reference ctypes


【解决方案1】:

来自the ctypes tutorial

指针实例有一个返回对象的内容属性 指针指向的地方

所以,以devInfo.pDevExtensions.contents.szProductName 为例,假设DEVINFO 将产生DEVEXTENSION实例 - 对我来说,它在这里并不明显(但我不熟悉使用 ctypes)。

还要注意PEP-8 建议将CapWords 用于类名,而将CAPS 保留用于常量。

【讨论】:

  • 我能像这样为它赋值吗'devInfo.pDevExtensions.contents.szProductName = "Transcend"'
  • 我想你需要用你想要的值创建一个 DEVEXTENSION 的实例,然后是一个指向它的新指针,然后将该新指针分配给 devInfo.pDevExtensions - 但这是一个猜测。
  • 我怎样才能做到这一点? 'devExt = DEVEXTENSION() devInfo.pDevExtensions = devExt' 我收到以下错误 - 回溯(最后一次调用):文件“C:/Documents and Settings/sbritto/Desktop/Sormiou-DI/FinalMacWinlin/Sample.py”,第 19 行,在 devInfo.pDevExtension = devExt TypeError: incompatible types, DEVEXTENSION instance 而不是 LP_DEVEXTENSION instance
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
相关资源
最近更新 更多