Передача указателя C с помощью API Python / C

Я новичок в Python / C API ... Я пытаюсь добавить новые функции в свою программу на C, в которой я могу встроить в него python и одновременно расширить функциональность, чтобы встроенный интерпретатор мог выполнять сценарий, который будет взаимодействовать с расширяющимся модулем python, написанным как часть моей программы C. Моя программа C не имеет глобальных переменных. Я хотел бы сохранить это способ; В то же время, чтобы предоставить функции C Python, похоже, что расширяющая функция C, по крайней мере, нуждается в доступе к глобальным переменным для доступа к состоянию программы. Как мне получить ar найти это?

например. Вот как я планирую внедрить, где PYINTERFACE_Initialize вызывается из main

void PYINTERFACE_Initialize(State *ptr, FILE *scriptFile, const char* scriptFileName)
{
    Py_Initialize();
    PyObject *module = Py_InitModule("CInterface", CInterfaceMethods);
    if (PyRun_SimpleFileEx(scriptFile, scriptFileName, 1) != 0)
    {
        printf("PYINTERFACE script execution failed!\n");
    }
    **//ADD State *ptr TO module**      
}

Вот расширенная функция:

static PyObject*
CInterface_GetStateInfo(PyObject *self, PyObject *args)
{
    const char *printStr;
    double stateInfo;
    State *ptr;

    if(!PyArg_ParseTuple(args, "s", &printStr))
    {
        return NULL;
    }
    printf("Received %s\n", printStr);

    **//RETRIEVE State *ptr FROM self**      

    stateInfo = ptr->info;
    return Py_BuildValue("d", currentTime);
}

Это самый чистый способ передать State * ptr? Я, конечно, не вижу необходимости раскрывать внутреннее состояние Python. Я думал об использовании капсул, но, похоже, капсулы не предназначены для поддержки такого поведения.

Заранее спасибо! V

11
задан PGSystemTester 25 June 2018 в 19:06
поделиться