在Cython中使用结构内的指针数组

2024-04-27 02:28:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图为C库编写一个Cython包装器。我对Cython很陌生,所以如果问题很明显,我会提前道歉。在

在文件中包装器.pxd,我定义了一个结构(简化示例):

cdef extern from "thiscouldbeyourlibrary.h":
    cdef struct foo:
        double **output

然后我要上一节课:

^{pr2}$

这失败了:

Cannot convert 'void *' to Python object.

显然,赛顿不能肯定自己__stuff.输出总是一个指针。但是我声明了它的类型,并且这个类是一个“cdef”类,所以我不太明白为什么。在


Tags: 文件from示例定义fooextern结构struct
1条回答
网友
1楼 · 发布于 2024-04-27 02:28:45

问题是NULL和{}之间的不兼容。您可以将其分配给charintvoid *,例如,执行以下操作:

在包装纸公司名称:

cdef extern from "thiscouldbeyourlibrary.h":
    cdef struct foo:
        char a
        int b
        void *c
        double **output

这可能是你的图书馆。h:

^{pr2}$

在主.pyx公司名称:

cimport wrapper

cdef class Bar:
    cdef wrapper.foo __stuff
    def __init__(self):
        self.__stuff.a = <char>NULL
        self.__stuff.b = <int>NULL
        self.__stuff.c = NULL

def main():
    bar = Bar()
    print bar.__stuff.a
    print bar.__stuff.b

如果之前为output分配了内存,则可以这样做:

self.__stuff.output[0] = NULL

如果不分配它就会崩溃。。。在

相关问题 更多 >