从Cython传递原始指针到C函数

时间:2015-04-06 23:29:17

标签: python c cython

我正在编写一个围绕我们正在维护的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的新手,所以答案可能很简单,但我没有通过谷歌看到任何明显的东西。

2 个答案:

答案 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