Im nuevo en la API de Python/C ... Estoy tratando de agregar una nueva funcionalidad a mi programa C, donde puedo incrustar Python en ella y ampliar al mismo tiempo la funcionalidad para que El intérprete incorporado puede ejecutar un script que interactuará con un módulo de extensión de python escrito como parte de mi programa C. Mi programa C no tiene variables globales. Me gustaría mantener las cosas de esta manera; Al mismo tiempo, para exponer la funcionalidad C a python, parece que la función C extendida necesita acceso a variables globales para acceder al estado del programa. ¿Cómo puedo evitar esto?Pasando un puntero C con la API de Python/C
p. Ej. Aquí es cómo planeo incorporar en PYINTERFACE_Initialize principal se llama desde
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**
}
aquí es la función ampliada:
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);
}
Es esta la forma más limpia para pasar el Estado * ptr alrededor? Ciertamente no veo la necesidad de exponer el estado interno a Python. He pensado en usar cápsulas, pero no parece ser la intención de las cápsulas para apoyar este tipo de comportamiento.
¡Gracias de antemano! V