I need to make a list of instances of a Structure, then I need to make an instance of another Structure, one of the fields of which needs to be an arbitrary-length array of pointers to the instances in the list. How do I do that?
Just in case it helps, I'll include what I tried that didn't work: ------ class NoteEvent(ctypes.Structure): _fields_ = [('type', ctypes.c_int), ('byteSize', ctypes.c_int), ('deltaFrames', ctypes.c_int), ('flags', ctypes.c_int), ('noteLength', ctypes.c_int), ('noteOffset', ctypes.c_int), ('commandCode', ctypes.c_char), ('noteNumber', ctypes.c_char), ('velocity', ctypes.c_char)] def mkVstEvents(events): class Events(ctypes.Structure): _fields_ = [('numEvents', ctypes.c_int), ('reserved', ctypes.c_int), ('eventspointerarray', ctypes.c_void_p * len(events))] return Events(len(events), 0, tuple([ctypes.pointer(event) for event in events])) def mkNoteEvent(deltaFrames, flags, noteNumber, channel, velocity, noteLength, noteOffset, detune, noteOffVelocity): vstEvent = NoteEvent(type=1, bytesize=11, deltaFrames=deltaFrames, flags=1, noteLength=0, noteOffset=0, commandCode=chr(144+channel), noteNumber=chr(noteNumber), velocity=chr(velocity)) return vstEvent def onSendMidiButton(self, event): plugins[0].plugin.process_events(ctypes.pointer(mkVstEvents([mkNoteEvent(deltaFrames=0, flags=1, noteNumber=60, channel=0, velocity=127, noteLength=0, noteOffset=0, detune=0, noteOffVelocity=0)]))) ------ Here's the error I got: ------ Traceback (most recent call last): File "soundshop.9.1.2.py", line 216, in onSendMidiButton noteOffVelocity=0)]))) File "soundshop.9.1.2.py", line 76, in mkVstEvents return Events(len(events), 0, tuple([ctypes.pointer(event) for event in events])) RuntimeError: (c_void_p_Array_1) <type 'exceptions.TypeError'>: incompatible types, LP_NoteEvent instance instead of c_void_p instance ------ I also tried to use struct.pack: ------ def mkVstEvents(events): st = struct.pack("=ii"+"L"*len(events), len(events), 0, *(ctypes.pointer(event) for event in events)) return st ------- Here's the error I got: ------ Traceback (most recent call last): File "soundshop.9.3.py", line 213, in onSendMidiButton noteOffVelocity=0)]))) File "soundshop.9.3.py", line 72, in mkVstEvents st = struct.pack("=ii"+"p"*len(events), len(events), 0, *(ctypes.pointer(event) for event in events)) struct.error: argument for 'p' must be a string ------ I also tried replacing "p"*len(events) with "i"*len(events) and also with "L"*len(events), both of which gave me errors. Thanks for your help. -- https://mail.python.org/mailman/listinfo/python-list