0

メソッド「coor()」を持つ「m1」というPythonオブジェクトがあります。それをC"++"拡張機能に渡し、内部で "coor()"を呼び出します。最初に試しました:

PyArrayObject *coor = (PyArrayObject *) PyObject_CallMethod(m1,"coor","()",NULL);

そして、次の厄介なコードが機能することを発見しました:

char t1[]="coor, t3[]="()";
PyArrayObject *coor = (PyArrayObject *) PyObject_CallMethod(m1,t1,t3,NULL);

それを行う簡単な方法があると思います。これはおそらく初心者向けのchar[]に関するCの質問であり、アドバイスに感謝します。

4

1 に答える 1

0

ドキュメントには次のように記載されています。

形式はNULL、引数が指定されていないことを示す の場合があります。

さらに、配列は必要ありません。配列が必要だと思ったのは、おそらく文字列が定数であると宣言されていないという事実です。

PyObject* PyObject_CallMethod(PyObject *o, char *method, char *format, ...)

ただし、実際には変更されません。ソースを見てくださいmethodは と にのみ渡されPyObject_GetAttrStringPyErr_SetStringどちらもconst char *s を取ります。const char *したがって、リテラルをにキャストしても安全ですchar *が、実際の解決策は Python が宣言されたパラメーターの型を に変更することconst char *です。

とにかく、そうは言っても、これは:

result = object.method()

大まかに次のように変換されます。

PyObject *result = PyObject_CallMethod(object, (char *)"method", NULL);
于 2012-06-02T21:45:23.173 に答える