Форум сайта python.su
Есть сишный модуль, в котором одна функция function_c получает пайтоновскую функцию function_p
также в сишном модуле есть функция function_c2.
нужно в сишном модуле (в функции function_c) вызвать функцию function_p передав в нее функцию function_c2
пробовал по-разному, всегда валится в одном месте:
static PyObject * function_c2(PyObject * args)
{
//....
}
static PyObject * function_c(PyObject * args)
{
PyObject * function_p;
PyArg_ParseTuple(args, "O", &function_p);
PyObject_CallFunction(function_p, "O", function_c2); // <- вот здесь сегфолт
}
Офлайн
Нужно получить из function_c2 PyObject*
Проще всего это сделать в init<module> - ведь ваш сишный модуль создается через PyModuleCreate?
Еще есть недокументированные PyCFunction_New и PyCFunction_NewEx, которые и выполняют всю работу.
Я бы их вызывать не стал: иметь функцию, которая не принадлежит ни одному модулю - нехорошо.
А иначе автоматически переходим к первому варианту, но с более сложным способом создать функцию.
Получите PyObject* - сможете вызывать PyObject_CallFunction без проблем.
Ссылки только правильно считайте :)
Офлайн