Я пытаюсь обернуть голову вокруг API ctypes. У меня есть структура C (zmsg_t), которую я хочу создать в Python, а затем вернуться из Python в C.
Таким образом, вызывается метод Python из C, и он должен вернуть объект, который мы затем обрабатываем в C снова.
У меня есть привязка для доступа и создания методов и структур C, поэтому в Python я могу вызывать конструктор Zmsg (). Теперь мне нужно вернуть это.
Мой метод тестирования python просто:
def actor_test(*args, **kwargs):
print("test")
msg = Zmsg()
frame = Zframe(b"Hello", 5)
msg.prepend(frame)
return msg
метод вызывается из C следующим образом:
PyObject *pReturn = PyObject_CallObject(pFunc, NULL);
Это правильно вызывает метод. Однако возвращаемый объект - это, конечно, PyObject *. Отладчик говорит, что это
"<czmq._czmq_ctypes.Zmsg object at 0x7ffff5f18e50>" PyObject
[class] "<class 'czmq._czmq_ctypes.Zmsg'>"
[super class] "<class 'object'>"
[meta type] "<class 'type'>"
ob_refcnt 1 Py_ssize_t
Как мне вернуть его к исходному типу C (zmsg_t *)
Любая помощь действительно ценится.
Определения ctypes дляZmsg можно увидеть здесь