Найти - Пользователи
Полная версия: C API и передача функций
Начало » Python для экспертов » C API и передача функций
1
redixin
Есть сишный модуль, в котором одна функция 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 без проблем.
Ссылки только правильно считайте :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB