如何将一个Structure对象数组转换为void指针并将其指定给Structure字段?

时间:2016-08-23 16:32:44

标签: python arrays ctypes

我想将一个Structure对象数组作为类似的结构发送到外部函数。

我目前正在将嵌套列表/数组([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], … ])转换为_FFIArray个对象,如下所示:

class _FFIArray(Structure):
    _fields_ = [("data", c_void_p),
                ("len", c_size_t)]

    @classmethod
    def from_param(cls, seq):
        """  Allow implicit conversions """
        return seq if isinstance(seq, cls) else cls(seq)

    def __init__(self, seq):
        self.data = cast(
            np.array(seq, dtype=np.float64).ctypes.data_as(POINTER(c_double)),
            c_void_p
        )
        self.len = len(seq)

但是我还需要将这些_FFIArray对象的数组转换为具有与上面相同的两个字段的结构,并将data字段作为指向数组的void指针。

使用以下方法调用以下类时无效:

[
    [[3.5, 3.5], [4.4, 2.0], [2.6, 2.0], [3.5, 3.5]],
    [[4.0, 3.0], [4.0, 3.2], [4.5, 3.2], [4.0, 3.0]]
]

class _InnerArray(Structure):
    _fields_ = [("data", c_void_p),
                ("len", c_size_t)]

    @classmethod
    def from_param(cls, seq):
        """  Allow implicit conversions """
        return seq if isinstance(seq, cls) else cls(seq)


    def __init__(self, seq):
        self.arr = np.asarray([_FFIArray(s) for s in seq])
        self.data= cast(self.arr.ctypes.data_as(POINTER(_FFIArray)), c_void_p)
        self.len = len(self.arr)

0 个答案:

没有答案