Я новичок в 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