Pavel3333 Posted June 6, 2018 Share 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 Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted June 7, 2018 Author Share Posted June 7, 2018 (edited) Для тех, кто с таким столкнется и зайдет на эту страницу: надо копать в Py_InitModule4. Конкретнее - PyCFunction_NewEx, недокументированной функции. Edited June 7, 2018 by Pavel3333 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.