Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 17, 2011 23:20:33

redixin
От:
Зарегистрирован: 2006-11-27
Сообщения: 66
Репутация: +  1  -
Профиль   Отправить e-mail  

C API и передача функций

Есть сишный модуль, в котором одна функция 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); // <- вот здесь сегфолт
}



Офлайн

#2 Янв. 17, 2011 23:48:57

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

C API и передача функций

Нужно получить из function_c2 PyObject*
Проще всего это сделать в init<module> - ведь ваш сишный модуль создается через PyModuleCreate?

Еще есть недокументированные PyCFunction_New и PyCFunction_NewEx, которые и выполняют всю работу.
Я бы их вызывать не стал: иметь функцию, которая не принадлежит ни одному модулю - нехорошо.
А иначе автоматически переходим к первому варианту, но с более сложным способом создать функцию.

Получите PyObject* - сможете вызывать PyObject_CallFunction без проблем.
Ссылки только правильно считайте :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version