На самом деле, я пытаюсь преобразовать массивы ctypes в списки python и обратно.
Если найден этот поток а>. Но предполагается, что мы знаем тип во время компиляции.
Но можно ли получить тип ctypes для элемента?
У меня есть список Python, который содержит хотя бы один элемент. Я хочу сделать что-то подобное
import ctypes
arr = (type(pyarr[0]) * len(pyarr))(*pyarr)
Это явно не работает, потому что type()
не возвращает класс, совместимый с ctypes. Но даже если список содержит объект, созданный непосредственно из ctypes, приведенный выше код не работает, потому что это экземпляр объекта типа.
Есть ли способ выполнить эту задачу?
[ИЗМЕНИТЬ]
Хорошо, вот код, который работает для меня. Я использую его для преобразования входных параметров из метода сервера 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)
требуется как минимум один элемент.