gpt4 book ai didi

python - 防止 ctypes 回调函数中的自动类型转换

转载 作者:太空狗 更新时间:2023-10-30 00:15:27 24 4
gpt4 key购买 nike

当用 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))))

产生 (python3 cfunctype_type_conversion.py ):

{'the_int': 1, 'the_int_p': <__main__.LP_c_int object at 0x2671830>}
3

我愿意:

{'the_int': c_int(1), 'the_int_p': <__main__.LP_c_int object at 0x2671830>}
c_int(3)

最佳答案

这有点难,但它可能对您有用。希望其他人能以更简洁的方式加入进来。

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))))

..输出是:

{'the_int': <c_int_hack object at 0xb7478b6c>, 'the_int_p': <__main__.LP_c_long object at 0xb747892c>}
1
3

关于python - 防止 ctypes 回调函数中的自动类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6273381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com