Jestem nowym interfejsem API Python/C ... Próbuję dodać nowe funkcje do mojego programu C, w którym mogę osadzić w nim pythona i jednocześnie rozszerzyć jego funkcjonalność tak, aby wbudowany interpreter może wykonać skrypt, który będzie współdziałać z rozszerzającym się modułem pythona napisanym w ramach mojego programu C. Mój program C nie ma zmiennych globalnych. Chciałbym zachować rzeczy w ten sposób; W tym samym czasie, aby udostępnić funkcje P pythonowi, wydaje się, że rozszerzona funkcja C potrzebuje dostępu do zmiennych globalnych, aby uzyskać dostęp do stanu programu. Jak sobie z tym poradzić?Przekazywanie wskaźnika C za pomocą interfejsu API Python/C
np. Oto jak ja planuję na osadzanie gdzie PYINTERFACE_Initialize jest wywoływana z głównego
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**
}
Oto rozszerzona funkcja:
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);
}
Jest to najczystszy sposób przekazać państwu * ptr wokół? Na pewno nie widzę potrzeby ujawnienia wewnętrznego stanu pytonowi. Zastanawiałem się nad użyciem kapsułek, ale nie wydaje się, aby kapsułki miały na celu wspieranie tego rodzaju zachowań.
Z góry dziękuję! V