ctypes:从任意整数构造指针

2024-09-27 01:28:41 发布

您现在位置:Python中文网/ 问答频道 /正文

出于低级目的,我需要从任意地址构造一个ctypes指针,以整数形式给出。例如:

INTP = ctypes.POINTER(ctypes.c_int)
p = INTP(0x12345678) # i *know* this is the address

但所有这些尝试都导致

TypeError: expected c_long instead of int

有什么我能克服的吗?如果有人想知道我为什么需要这样做,可以从win32file.PyOVERLAPPED中提取OVERLAPPED结构,以便将ctypes公开的函数与win32file包装的API集成。

谢谢,
-绒毛


Tags: the目的isaddress地址整数thisctypes
1条回答
网友
1楼 · 发布于 2024-09-27 01:28:41

您可以使用ctypes.cast(addr, type)。我将扩展您的示例以通过已知对象获取地址,以演示:

INTP = ctypes.POINTER(ctypes.c_int)
num = ctypes.c_int(42)
addr = ctypes.addressof(num)
print 'address:', addr, type(addr)
ptr = ctypes.cast(addr, INTP)
print 'pointer:', ptr
print 'value:', ptr[0]

输出:

address: 4301122528 <type 'int'>
pointer: <__main__.LP_c_int object at 0x1005decb0>
value: 42

相关问题 更多 >

    热门问题