如何在调用函数时返回ctyps中的数组

2024-10-05 14:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我要做的是将一个C函数转换成python函数。在

例如,我有一个预先定义的C函数原型:

function_test(ViInt32 Arraysize, ViReal64 readingArray[], ViInt32 *Actual_rraysize)

上面函数的输入是Arraysize,这是readingArray参数中的元素数。在

上述函数的输出是readingArray[]和{}。readingArray[]返回结果的数组,Actual_arraysize表示返回数组的实际大小。在

下面是我用这个C函数原型编写的Python函数:

^{pr2}$

最后,结果是acutalarraysize的值被成功地更改了。但是readingarray的值在调用c function prototype之后没有改变。在

如何处理这种情况,是因为我不应该使用byref?在


Tags: 函数test元素参数定义function数组原型
1条回答
网友
1楼 · 发布于 2024-10-05 14:21:23

是的,传递数组时不需要byref。使用list作为默认参数值会导致意外的错误。您可以在Python函数中返回数组和实际大小。在

这是我的代码:

from ctypes import *
test = cdll.LoadLibrary("test")
test.function_test.argtypes = [
    c_int, POINTER(c_double), POINTER(c_int)
]

def Py_function_test(arraysize):
    _c_readingarray = (c_double*arraysize)()
    _c_actualarraysize = c_int()
    test.function_test(arraysize, _c_readingarray, byref(_c_actualarraysize))
    return _c_readingarray, _c_actualarraysize.value

array, size = Py_function_test(10)
print list(array), size

c代码:

^{pr2}$

python代码的输出是:

[0.0, 1.0, 2.0, 3.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0] 5

相关问题 更多 >