Mat*_*ner 6 python ctypes callback type-conversion python-3.x
在使用CFUNCTYPE类型包装Python函数时,我发现非指针类型会自动转换,就好像它们的value属性被调用一样.
如何抑制这种自动转换?
from ctypes import *
funcspec = CFUNCTYPE(c_int, c_int, POINTER(c_int))
@funcspec
def callback(the_int, the_int_p):
print(vars())
return 3
print(callback(c_int(1), byref(c_int(2))))
Run Code Online (Sandbox Code Playgroud)
哪个产生(python3cfunctype_type_conversion.py):
{'the_int': 1, 'the_int_p': <__main__.LP_c_int object at 0x2671830>}
3
Run Code Online (Sandbox Code Playgroud)
我想要:
{'the_int': c_int(1), 'the_int_p': <__main__.LP_c_int object at 0x2671830>}
c_int(3)
Run Code Online (Sandbox Code Playgroud)
这有点麻烦,但可能对你有用。希望其他人能以更干净的方式插话..
from ctypes import *
class c_int_hack(c_int):
def from_param(self, *args):
return self
funcspec = CFUNCTYPE(c_int, c_int_hack, POINTER(c_int))
@funcspec
def callback(the_int, the_int_p):
print(vars())
print(the_int.value)
return 3
print(callback(c_int(1), byref(c_int(2))))
Run Code Online (Sandbox Code Playgroud)
..输出是:
{'the_int': <c_int_hack object at 0xb7478b6c>, 'the_int_p': <__main__.LP_c_long object at 0xb747892c>}
1
3
Run Code Online (Sandbox Code Playgroud)