Что передать в качестве аргумента "capsule" в Python, после обертки С++ библиотеки с помощью pybind11?

Есть библиотека на С++, я ее обернул с помощью pybind11 для использования в Python. В этой библиотеке есть метод, который на вход принимает параметр типа "void *".

ssize_t saRead(uint16_t sa, void *data, size_t size, SA_Mode_t mode = SA_WRITE);

Cам по себе это - перегруженный метод, поэтому, в pybind11, я его обернул как:

.def("saRead", py::overload_cast<uint16_t, void *, size_t, lib_ta1::RT::SA_Mode_t>(&lib_ta1::RT::saRead))

Python показывает, что на вход этого метода должен быть передан аргумент типа "capsule".

saRead(self: ta1.RT, arg0: int, arg1: capsule, arg2: int, arg3: lib_ta1::RT::SA_Mode_t) -> int

По итогу, подскажите, что я должен передать в качастве "capsule"? Или же мне нужно подругому обернуть этот метод в pybind11?


Ответы (1 шт):

Автор решения: Baggy Ray

нашел ответ на собственный вопрос:

import ctypes
PyCapsule_Destructor = ctypes.CFUNCTYPE(None, ctypes.py_object)
PyCapsule_New = ctypes.pythonapi.PyCapsule_New
PyCapsule_New.restype = ctypes.py_object
PyCapsule_New.argtypes = (ctypes.c_void_p, ctypes.c_char_p, PyCapsule_Destructor)
capsule = PyCapsule_New(0xdeadbeef, None, PyCapsule_Destructor(0))
→ Ссылка