2017-05-12 6 views
3

Je travaille sur python et ctypes de python.pointeur d'un inter signé en python

Je veux convertir un nombre donné à ctypes.c_uint32 puis se référer à son pointeur comme suit:

d = 0 
d_c_unit32 = (ctypes.c_uint32 * 1)(d) 
pd_c = ctypes.POINTER(d_c_unit32) 

mais j'ai une erreur qui disent:

Detail TypeError: must be a ctypes type

voulez-vous s'il vous plaît me faire savoir où est le problème?

Répondre

3
d = 0 
num = ctypes.c_uint32(d) 
ptr = ctypes.pointer(num) 
print 'pointer:', ptr 
print 'value:', ptr[0] 

sortie est:

pointer: <__main__.LP_c_uint object at 0x7f4551c27680> 
value: 0 
+3

Il devrait être 'ptr = int_pointer (num)' 'ou ptr = ctypes.pointer (num)'. Lancer l'adresse est erroné pour deux raisons. Il ne fait pas référence à l'objet de support dans le '_objects' du pointeur. C'est aussi relativement cher parce que 'ctypes.cast' est implémenté comme un appel FFI. – eryksun