На самом деле, я пытаюсь преобразовать массивы ctypes в списки Python и обратно.
Если найдено , эта тема . Но предполагается, что мы знаем тип во время компиляции.
Но возможно ли получить тип ctypes для элемента?
У меня есть список python, который содержит хотя бы один элемент. Я хочу сделать что-то подобное
import ctypes
arr = (type(pyarr[0]) * len(pyarr))(*pyarr)
Это, очевидно, не работает, потому что type()
не возвращает совместимый с ctypes класс. Но даже если список содержит объект, созданный непосредственно из ctypes, приведенный выше код не работает, потому что это экземпляр типа объекта.
Есть ли способ выполнить эту задачу?
[EDIT]
Хорошо, вот код, который работает для меня. Я использую его для преобразования входных параметров из метода сервера comtypes в списки Python и возврата значений в указатели на массив:
def list(count, p_items):
"""Returns a python list for the given times represented by a pointer and the number of items"""
items = []
for i in range(count):
items.append(p_items[i])
return items
def p_list(items):
"""Returns a pointer to a list of items"""
c_items = (type(items[0])*len(items))(*items)
p_items = cast(c_items, POINTER(type(items[0])))
return p_items
Как объяснялось ранее, для p_list(items)
требуется хотя бы один элемент.