Python ctypes 获取 CFuncType 地址

5 投票
1 回答
3009 浏览
提问于 2025-04-15 17:52

这段内容和我之前提到的另一个问题有关。

我想知道怎么才能获取到一个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 中获取正确的地址。

撰写回答