Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 26, 2012 18:11:44

ntohins
Зарегистрирован: 2012-06-26
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать указатель типа void* из кода на С++ в код на Python?

Насколько я понял, можно легко преобразовать стандартные типы при помощи функции Py_BuildValue.
Вопрос: как передать в Питоновский код указатель на void, т.е на произвольный тип, и чтобы потом Питоновский код отдал этот указатель обратно в С++ код.
В строке формата Py_BuildValue есть что-то похожее, что мне нужно:

O& (object)
Convert anything to a Python object through a converter function. The function is called with anything (which should be compatible with void *) as its argument and should return a “new” Python object, or NULL if an error occurred.

но непонятно, что за функция converter и т.д.
Приводить указатель к типу int мне кажется небезопасно, а привлекать ctypes для этого - еще больший гемор.

Как правильно сделать?

Офлайн

#2 Июнь 26, 2012 20:15:55

ntohins
Зарегистрирован: 2012-06-26
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать указатель типа void* из кода на С++ в код на Python?

Нашел решение
Специально для этого используется тип PyCObject (или PyCapsule в последних версиях), и функция, создающая этот тип
PyObject* PyCObject_FromVoidPtr( void* cobj, void (*destr)(void *))
Вопрос снят.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version