2012-11-29 33 views
0

通过指针的另一个结构的构件我具有这样的结构,如下访问一个结构,该结构是在python

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) 
+0

将您的问题改为完全不同的问题是一种不好的做法。你应该发布一个新问题。我会将这个恢复到原来的状态。 –

+0

@Lattyware现在我将如何修改上述问题或提供额外的相同问题 – Britto

+0

问一个新问题。 –

回答

2

the ctypes tutorial

Pointer instances have a contents attribute which returns the object to which the pointer points

所以,devInfo.pDevExtensions.contents.szProductName例如,假设该DEVINFO将产生实例DEVEXTENSION - 对我来说,这不是明摆着它在这里(但我m不熟悉ctypes)。

另请注意,PEP-8建议CapWords用于类名,CAPS用于常量保留。

+0

我将能够像这样'devInfo.pDevExtensions.contents.szProductName ='Transcend'' – Britto

+0

为它指定一个值我想你需要用你想要的值创建DEVEXTENSION的实例,然后新的指针,然后将该新指针分配给'devInfo.pDevExtensions' - 但这是一个猜测。 –

+0

我将如何做到这一点? 'devExt = DEVEXTENSION()devInfo.pDevExtensions = devExt'我得到以下错误 - Traceback(最近调用最后一次): 文件“C:/ Documents and Settings/sbritto/Desktop/Sormiou-DI/FinalMacWinlin/Sample.py” ,第19行,在 devInfo.pDevExtension = devExt TypeError:不兼容的类型,DEVEXTENSION实例而不是LP_DEVEXTENSION实例 – Britto