使用ctypes(python3),我试图转换一个真正应该是标识符或_FuncPtr
类型的c_void_p
对象。
但是使用cast
会产生错误的地址,而in_dll
会产生正确的地址。
在下面的代码中,使用p1
导致段错误,而p2
按预期工作。
为什么会这样,以及如何正确地将_FuncPtr
转换为c_void_p
?
windows = CGWindowListCopyWindowInfo( kCGWindowListOptionAll, kCGNullWindowID )
for _win in cfarray( windows ):
print( _win )
p1 = cast( Q.kCGWindowNumber, c_void_p )
p2 = c_void_p.in_dll( Q, "kCGWindowNumber" )
pid = CFDictionaryGetValue( _win, p2 )
print( pid )