У меня есть некоторые данные из структуры, которая уже была выделена и инициализирована. Я могу гарантировать, что данные не будут освобождены во время жизни любого из этих объектов. Как обернуть это в объект Python в Cython? Далее делает не работу, но я надеюсь, что это объясняет мое намерение:Как написать тип расширения, который обертывает предварительно выделенные данные?
from libc.stdlib cimport malloc
ctypedef struct Point:
int x
int y
cdef class _MyWrapper:
cdef Point* foo
def __cinit__(self, Point* foo):
self.foo = foo
def create_eternal_MyWrapper(int x, int y):
cdef Point* p
p = <Point*>malloc(sizeof(Point))
p.x = x
p.y = y
return _MyWrapper(p)
Результат выполнения Cython на этом:
Error compiling Cython file:
------------------------------------------------------------
...
def create_eternal_MyWrapper(int x, int y):
cdef Point* p
p = <Point*>malloc(sizeof(Point))
p.x = x
p.y = y
return _MyWrapper(p)
^
------------------------------------------------------------
examplecy.pyx:17:23: Cannot convert 'Point *' to Python object
Что такое 'MyAllocatedData'? C-структура? Класс 'cdef? Какой-то объект Python? – delnan
A тип C. В частности, структура. Вы хотите точное определение структуры в C и Cython? –
Я не думаю, что эти детали имеют значение. Но * как * это «не работает»? Можете ли вы предоставить пример [лучше] (http://sscce.org/)? – delnan