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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage