我正在编写一个围绕我们正在维护的C库的Cython包装器。我收到以下错误消息:
analog.pyx:6:66: Cannot convert 'unsigned short (*)' to Python object
这是我要写的代码:
cimport company as lib
def get_value(device, channel, index):
cdef unsigned short aValue
err = library_get_data_val(device, channel, index, &aValue) # line 6
# Ignore the err return value for StackOverflow.
return aValue
我尝试使用的C函数的原型是:
unsigned long library_get_data_val(unsigned long device, int channel,
int index, unsigned short *pValue);
库函数返回aValue
参数中的请求值。它只是一个unsigned short
原语。从这些类型的函数中返回基元(即不是struct
)的预期方式是什么?我是Cython的新手,所以答案可能很简单,但我没有通过谷歌看到任何明显的东西。
答案 0 :(得分:0)
我认为问题是你没有正确定义library_get_data_val
,所以Cython认为它是你正在调用的Python类型函数,并且不知道如何处理指向{{1}的指针}
尝试:
aValue
这样Cython知道它是一个需要指针的C函数,并且会很高兴。
(编辑与我原来的答案有很大的不同,我误解了这个问题!)
答案 1 :(得分:0)
我发现了我的问题。您可以告诉我现在编辑问题的内容。有一个company.pxd
文件由cimport
文件.pyx
编辑。一旦我将C原型复制到company.pxd
,它就可以了。
我还需要在通话中使用lib
前缀:
err = lib.library_get_data_val(device, channel, index, &aValue) # line 6