I'm observing some strange behavior with ctypes. I created this test code to try to figure out what I'm doing wrong creating pointers to structures.
from ctypes import * class QCamSettingId(Structure): """ QCam_settings_id """ _fields_ = [("f1", c_ulong), ("f2", c_ushort), ("f3", c_ushort), ("f4", c_ubyte * 8)] class QCamSettingsEx(Structure): """ QCam_SettingsEx """ _fields_ = [("size", c_ulong), # Filled by the init routine ("pSettingsID", POINTER(QCamSettingId)), # pointer to the camera settings ID ("private_data", c_void_p )] # Pointer to a camera settings array class QMemDriver(): """ The wrapper of QCamDriver """ def __init__(self): self.QSetID = QCamSettingId() self.QSetID_p = pointer(self.QSetID) self.QSettings = QCamSettingsEx() self.QSettings.pSettingsID = self.QSetID_p self.QSettings_p = pointer(self.QSettings) def Test(self): """ Test the QCamSettinsEx object """ print self.QSettings.pSettingsID print self.QSettings.pSettingsID[0] print self.QSettings.pSettingsID print self.QSettings.pSettingsID[0] print "pSettingsID is at", self.QSettings.pSettingsID print "pSettingsID[0] is at", self.QSettings.pSettingsID[0] print "pSettingsID is at", self.QSettings.pSettingsID print "pSettingsID[0] is at", self.QSettings.pSettingsID[0] The results I get are. >>> qmem.Test() <QMEMTest.LP_QCamSettingId object at 0x011902B0> <QMEMTest.QCamSettingId object at 0x01426850> <QMEMTest.LP_QCamSettingId object at 0x011902B0> <QMEMTest.QCamSettingId object at 0x01426850> pSettingsID is at <QMEMTest.LP_QCamSettingId object at 0x011902B0> pSettingsID[0] is at <QMEMTest.QCamSettingId object at 0x01426850> pSettingsID is at <QMEMTest.LP_QCamSettingId object at 0x011902B0> pSettingsID[0] is at <QMEMTest.QCamSettingId object at 0x01426850> >>> qmem = QMEMTest.QMemDriver() >>> qmem.Test() <QMEMTest.LP_QCamSettingId object at 0x01426990> <QMEMTest.QCamSettingId object at 0x014269E0> <QMEMTest.LP_QCamSettingId object at 0x014269E0> <QMEMTest.QCamSettingId object at 0x01426990> pSettingsID is at <QMEMTest.LP_QCamSettingId object at 0x01426990> pSettingsID[0] is at <QMEMTest.QCamSettingId object at 0x014269E0> pSettingsID is at <QMEMTest.LP_QCamSettingId object at 0x014269E0> pSettingsID[0] is at <QMEMTest.QCamSettingId object at 0x01426990> Sometimes the pointer and the object swap location and sometimes they don't. -- http://mail.python.org/mailman/listinfo/python-list