Python ctypes 获取 CFuncType 地址
这段内容和我之前提到的另一个问题有关。
我想知道怎么才能获取到一个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
我尝试从C语言调用*(7030864)时程序崩溃了,但调用*(3411932)时却正常。这是为什么addressof()会出错呢?
1 个回答
7
cast(f, c_void_p)
这个操作可以在 Python 中获取正确的地址。