私はPython/C APIを初めて使っています...私のPythonに新しい機能を追加しようとしています。組み込みインタプリタは、Cプログラムの一部として記述された拡張Pythonモジュールと対話するスクリプトを実行できます。私のCプログラムはグローバル変数を持っていません。私はこのように物事を維持したいと思います。同時に、PythonにCの機能を公開するために、プログラムの状態にアクセスするためにグローバル変数にアクセスする必要があるときに拡張C関数が必要になります。これをどうやって回避するのですか?Python/C APIでCポインタを渡す
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);
}
* ptrは周りの状態を渡すためにクリーンな方法は、これは次のようになります。ここでは、ここでは拡張機能がある私はPYINTERFACE_Initializeがメイン
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**
}
から呼び出された場所に埋め込むことを計画する方法ですか?私は確かにPythonに内部状態を公開する必要はありません。私はカプセルの使用について考えましたが、この種の動作をサポートするカプセルの意図とは思われません。
ありがとうございます!基本的には http://docs.python.org/c-api/capsule.html
PyCObject:あなただけのpython 2.7を使用する場合は、PyCapsuleを使用することができます http://docs.python.org/c-api/cobject.html
: V