2010-01-10 3 views
3

liés à mon other questionPython ctypes AddressOf CFuncType

Comment puis-je obtenir l'adresse (pointeur de fonction acctual) à un objet CFuncType? addressof() ne signale pas l'adresse correcte.

Code C:

extern "C" _declspec(dllexport) 
int addr(int (*func)()) 
{ 
    int r = (int)func; 
    return r; 
} 

code Python:

def test(): 
    return 42 

t = CFUNCTYPE(c_int) 
f = t(test) 

print addressof(f) 
print dll.addr(f) 

Sortie:

7030864 
3411932 

essayant d'appeler * (7.030.864) de C provoque un accident, mais d'appeler * (3411932) fonctionne comme prévu. Quel est le problème avec addressof()?

+0

'CFUNCTYPE' est déjà un pointeur, donc' AddressOf() 'retourne l'adresse où ce pointeur est stocké, ne traitera pas de la fonction. –

Répondre

6

cast(f, c_void_p) obtient l'adresse correcte à partir de python