Pavel3333 1,148 Posted June 6, 2018 (edited) Первый вопрос касается создания код-объекта PyCodeObject *PyCode_New(int argcount, int nlocals, int stacksize, int flags, PyObject *code, PyObject *consts, PyObject *names, PyObject *varnames, PyObject *freevars, PyObject *cellvars, PyObject *filename, PyObject *name, int firstlineno, PyObject *lnotab) В документации нет ни единого упоминания о том, какие аргументы скармливать этой функции. Вернее, что это вообще за аргументы. Начиная со stacksize. Зачем мне это нужно? Чтобы создать функцию через PyObject* PyFunction_New(PyObject *code, PyObject *globals) Кстати, отсюда же второй вопрос - откуда взять globals. Зачем мне нужна функция на уровне Си? Я хочу подписаться на событие на уровне Си. Есть функция: static PyObject* inject_handle_key_event(PyObject *self, PyObject *args) { //do something Py_RETURN_NONE; }; Если попытаться на уровне Си подписаться на событие (InputHandler.g_instance.onKeyDown.__iadd__(inject_handle_key_event), только на Си), происходит вылет. Значит, нужно скармливать ей не PyCFunction, а PyFunctionObject. Из чего и возникают вопросы выше. @Mixaill, прошу помощи! PS: разобрался, спасибо за советы. Edited June 6, 2018 by Pavel3333 Quote Share this post Link to post Short link Share on other sites
Pavel3333 1,148 #432507 Posted June 7, 2018 (edited) Для тех, кто с таким столкнется и зайдет на эту страницу: надо копать в Py_InitModule4. Конкретнее - PyCFunction_NewEx, недокументированной функции. Edited June 7, 2018 by Pavel3333 1 Quote Share this post Link to post Short link Share on other sites