Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—为什么不能更改C回调函数中的值?_Python_Ctypes - Fatal编程技术网

Python—为什么不能更改C回调函数中的值?

Python—为什么不能更改C回调函数中的值?,python,ctypes,Python,Ctypes,我尝试使用PythonCType调用C库(.so),这个C库有回调函数。 C源代码: 打印结果为: boo=4 Outfunc=1025 ret=55 看起来还不错 生成文件源: gcc -c -fPIC -Wno-format-security -g main.c gcc -shared -o libcall.so main.o gcc main.o -o callback -ldl -lpthread -lrt 然后,我尝试使用PythonCType调用“BSP_SHOW”这个函数

我尝试使用PythonCType调用C库(.so),这个C库有回调函数。 C源代码:


打印结果为:

boo=4
Outfunc=1025
ret=55
看起来还不错

生成文件源:

gcc -c -fPIC -Wno-format-security -g main.c
gcc -shared -o libcall.so main.o
gcc main.o -o callback -ldl -lpthread -lrt 

然后,我尝试使用PythonCType调用“BSP_SHOW”这个函数,并将回调函数放入这个函数中。 Python源代码:

Python版本:2.6.6



打印结果为

cb=4
Outfunc=4 <---I expect it should be 1025,but not! 
ret=88 <---return value have been change by python callback.
cb=4

outpunc=4运算符在python中重新分配变量。换句话说,您可以更改变量的含义

您需要更改变量指向的对象。由于它是一个ctypes指针,因此需要使用0对其进行索引才能执行此操作

def qa_callback(result): result[0] = 1025 return 88 def qa_回调(结果): 结果[0]=1025 返回88 注意结果后面的
[0]


另请参见:

Python 2.6.6版请帮助我!如果有人知道?!
cb=4
Outfunc=4 <---I expect it should be 1025,but not! 
ret=88 <---return value have been change by python callback.
def qa_callback(result): result[0] = 1025 return 88