So ändern Sie Strukturfelder mithilfe von ctypes-Pythonzeigern
Unten ist der Code, in dem ich mit ctypes auf die Werte von dll zugreife.
Meine Absicht ist es, die Strukturfelder Adressen zu speichern. Wann immer sich die Werte in der Struktur ändern, kann ich auf die Adressen zugreifen und geänderte Werte erhalten.
DUMMY_DLL_PATH = "dummyModel.dll"
class MyStruct(ctypes.Structure):
_fields_ = [("field_one", ctypes.c_int),
("field_two", ctypes.c_int)]
d_m = ctypes.cdll.LoadLibrary(DUMMY_DLL_PATH)
d_i = MyStruct.in_dll(d_m,"dummy_In")
in_field = ctypes.c_int(d_i.field_one)
#storing the address
b = ctypes.addressof(in_field)
b_v = ctypes.cast(b,ctypes.POINTER(ctypes.c_int))
k= b_v.contents
print 'before',d_i.field_one,k.value
#changing the value
d_i.field_one = 10
print 'After',d_i.field_one,k.value
Ausgabe:Before 0 0
After 10 0
Durch Zeiger werden die Werte nicht geändert. Bleibt 0