ctypes:从任意整数构造指针
问题描述:
对于低级别目的,我需要从任意地址构造一个ctypes指针,以整数形式给出。例如: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集成。
感谢,
-Tomer
答
您可以使用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
,做的伎俩,谢谢! – sebulba 2011-04-26 08:34:31
@sebulba:如果有,请将答案标记为正确,请:) – vines 2011-05-26 14:32:06