W
Wanderer
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.
<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>
<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.
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.
<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>
<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.