2012-06-02 2 views
0

У меня есть объект python с именем «m1», который имеет метод «coor()». Я передам его расширению C++ и вызову «coor()» внутри. Сначала я попробовал:Как аккуратно передать char [] в PyObject_CallMethod в расширении Python C

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

и нашел следующий неуклюжий код работает:

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

Я считаю, что есть простой способ сделать это. Это может быть вопрос C на char [] для новичков, и спасибо за совет.

ответ

0

В документации сказано:

Формат может быть NULL, указывая, что никакие аргументы не предусмотрены.

Кроме того, нет необходимости в массивах. Что заставило вас думать, что нужны массивы, скорее всего, тот факт, что строки не объявлены постоянными:

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

Однако они фактически не изменены; look at the source; method передается только PyObject_GetAttrString и PyErr_SetString, оба из которых принимают const char * s. Поэтому должно быть безопасно отливать литерал const char * в char *, хотя реальное решение будет для Python равным change the declared parameter types to const char *.

Во всяком случае, с тем, что это:

result = object.method() 

бы быть примерно преобразованы в это:

PyObject *result = PyObject_CallMethod(object, (char *)"method", NULL); 

 Смежные вопросы

  • Нет связанных вопросов^_^