0

我有一个名为“m1”的python 对象,它有一个方法“coor()”。我将把它传递给 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_GetAttrStringand PyErr_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 回答