На самом деле, я пытаюсь преобразовать массивы ctypes в списки python и обратно.Как получить объект типа ctypes из массива ctypes
Если найдено this thread. Но он предполагает, что мы знаем тип во время компиляции.
Но возможно ли получить тип ctypes для элемента?
У меня есть список python, содержащий хотя бы один элемент. Я хочу сделать что-то вроде этого
import ctypes
arr = (type(pyarr[0]) * len(pyarr))(*pyarr)
Это, очевидно, не работает, потому что type()
не возвращает ctypes совместимого класса. Но даже если список содержит объект, созданный непосредственно из ctypes, вышеуказанный код не работает, потому что его экземпляр объекта типа.
Есть ли способ выполнить эту задачу?
[EDIT]
Ok, вот код, который работает для меня. Я использую его для преобразования входных paraters из метода comtypes сервера к спискам питона и возвращаемые значения указателей массива:
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)
требует, по меньшей мере, один элемент.
Вы правы. Моя проблема на самом деле заключалась в том, что я сделал что-то вроде 'error = HRESULT(); error = E_FAIL'. Затем в список, который я хотел преобразовать, была добавлена ошибка. Проблема заключалась в том, что E_FAIL был типа int, а не HRESULT. Таким образом, оба 'error = HRESULT (E_FAIL)' или 'error = HRESULT(); (...) error.value = E_FAIL'. – jaw
Привет, у меня есть '>>> result' whitch дает мне:' <__ main __. C_wchar_p_Array_2 объект в 0x049CF1C0> 'but' >>> result [0] 'не работает для меня. Я получаю: 'UnicodeEncodeError: кодек 'charmap' не может кодировать символы в позиции 2-7: символьные карты до'. Вы можете мне помочь? –
Aleksandar