在结构内的结构中传递指向 ndarray 的指针(ctypes)

Passing pointer to ndarray in a struct within a struct (ctypes)

我有一个 ctypes 函数,它有一个结构,其中包含另一个结构作为其参数之一。 我创建了如下结构;

class ChannelDataBuffers(Structure):
_pack_ = PACK
_fields_ = [
            ("bufferMax",  c_void_p),
            ("bufferMin", c_void_p),
            ("dataType", c_int32)
            ]


class DataBuffers(Structure):
_pack_ = PACK
_fields_ =  [
                ("channel",               c_int32),
                ("waveform",              c_uint64),
                ("downSampleRatioMode",   c_int32),
                ("read",                  c_int32),
                ("buffers",               ChannelDataBuffers),
                ("nbuffers",              c_uint32),
                ("nDistributionPoints",   c_uint32)
            ]
def __init__(self, channel, waveform, ratiomode, read, ref_buffermax, ref_buffermin, datatype, nbuffers, nDistributionPoints):

    self.channel = c_int32(channel)
    self.waveform = c_uint64(waveform)
    self.downSampleRatioMode = c_int32(ratiomode)
    self.read = c_int32(read)
    self.buffers.bufferMax = (ref_buffermax)
    self.buffers.bufferMin = (ref_buffermin)
    self.buffers.datatype = c_int32(datatype)
    self.nbuffers = c_uint32(nbuffers)
    self.nDistributionPoints = c_uint32(nDistributionPoints)

bufferMax 和 bufferMin 都是 numpy 数组,使用 .ctypes 参数传递 - 即定义如下:

bufMax = self._buffers[bufIndex].data.ctypes

这导致对象被传递到

的 DataBuffers 初始化函数
numpy.core._internal._ctypes object at 0x08D99D90

这似乎是明智的。 但是我随后遇到了一个例外

 cannot be converted to pointer <type 'exceptions.TypeError'>

self.buffers.bufferMax = (ref_buffermax) 

有人知道我能做些什么来解决这个问题吗??

可能您需要使用 ctypes.cast:

self.buffers.bufferMax = ctypes.cast(ref_buffermax, c_void_p)