2010-01-10 59 views
3

与我other question的Python ctypes的addressof CFUNCTYPE

如何,我可以得到的地址(acctual函数指针)到CFUNCTYPE对象? addressof()不报告正确的地址。

C代码:

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

Python代码:

def test(): 
    return 42 

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

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

输出:

7030864 
3411932 

试图调用*(7030864)由C会导致系统崩溃,但调用*( 3411932)按预期工作。 addressof()有什么问题?

+0

'CFUNCTYPE'已经是一个指针,所以'addressof()'返回,其中该指针存储,而不是函数地址的地址。 – 2010-01-11 04:51:31

回答

6

cast(f, c_void_p)从蟒蛇内得到正确的地址