обертывание библиотечных функций с несколькими выходами в cython

Я пытаюсь обернуть фиктивную библиотеку C, используя Cython.

Вот файл .h библиотеки...

void say_hello(char *name);
double multiply(double x, double y);
int divide(double x, double y, double *answer);

У меня нет проблем с обертыванием первых двух функций с помощью cython, но у меня возникли проблемы с обертыванием третьей.

Третья функция делит x на y и возвращает ответ в третьем указателе на двойной аргумент. Сама функция возвращает либо успех, либо отказ.

Фактическая библиотека, которую я хотел бы обернуть, полна таких ситуаций, когда она возвращает код состояния, а фактический вывод функций возвращается через указатели.

Как правильно обернуть такие функции?

Спасибо, ~ Эрик


person eric.frederich    schedule 18.03.2011    source источник


Ответы (1)


вы должны выделить ответ в стеке. Cython позаботится обо всем остальном.

def divide(x, y):
  cdef double answer
  cdef int res
  res = c_divide( x , y, &answer) 
  if res != 0:
      throw ValueError("c_divide_error")
  return answer
person fabrizioM    schedule 19.03.2011
comment
Но можно ли использовать указатель в качестве аргумента и изменить значение в указателе? - person highBandWidth; 20.03.2011
comment
Да, вы должны правильно импортировать функцию деления - person fabrizioM; 20.03.2011