Ошибка компиляции Cython для бесплатной функции (Невозможно преобразовать аргумент объекта Python в тип 'FooBar *')

Я использую Cython (0.15.2) для создания расширения для Python (2.6.5). Я создал файл pxd и файл pyx. Вот содержимое моего файла pyx:

cimport capifuncs

cdef class myArray:
    cdef capifuncs.myArray *_my_array
    def __cinit__(self, size):
        self._my_array = capifuncs.array_new(size)
        if (self._my_array is NULL):
            raise MemoryError()

    def __dealloc__(self):
        if self._my_array is not NULL:
            capifuncs.array_free(self._my_array)

    def __bool__(self):
        return not capifuncs.IsEmpty(self._my_array)


    ##############################
    #        Array methods       #
    ##############################

    cpdef getItem(self, unsigned int pos):
        if capifuncs.IsEmpty(self._my_array):
            raise IndexError("Array is empty")
        #if ():
        #    raise IndexError("Array bounds exceeded")

        return capifuncs.array_get_item(self._my_array, pos)


    cpdef setItem(self, unsigned int pos, double val):
        if capifuncs.IsEmpty(self._my_array):
            raise IndexError("Array is empty")
        #if ():
        #    raise IndexError("Array bounds exceeded")

        capifuncs.array_set_item(self._my_array, pos, val)




# Free functions
cpdef long someCAPIFuncCall(capifuncs.FooBar *fb, capifuncs.myArray *arr, long start, long stop):
    return capifuncs.doSomethingInteresting(fb, arr, start, stop)

Если я закомментирую оператор определения свободной функции (т.е. не являющейся членом), код компилируется правильно и создается расширение. Однако, если я раскомментирую его и попытаюсь скомпилировать файл, я получаю следующее сообщение об ошибке:

cafuncs.pyx: 64: 23: Невозможно преобразовать аргумент объекта Python в тип 'FooBar *'

В чем причина этого и как ее исправить?

6
задан Homunculus Reticulli 7 November 2011 в 17:55
поделиться