Eigentlich versuche ich Ctypes-Arrays in Python-Listen und zurück zu konvertieren.Wie bekomme ich Ctypes-Objekt von einem Ctypes-Array
Wenn gefunden this thread. Aber es setzt voraus, dass wir den Typ zur Kompilierzeit kennen.
Aber ist es möglich, einen Ctypes-Typ für ein Element abzurufen?
Ich habe eine Python-Liste, die mindestens ein Element enthält. Ich möchte, dass dieser
import ctypes
arr = (type(pyarr[0]) * len(pyarr))(*pyarr)
etwas tun, natürlich nicht, weil type()
funktioniert nicht über eine ctypes kompatible Klasse zurück. Aber selbst wenn die Liste Objekte enthält, die direkt aus Ctypes erstellt wurden, funktioniert der obige Code nicht, da es sich um eine Objektinstanz des Typs handelt.
Gibt es eine Möglichkeit, diese Aufgabe auszuführen?
[EDIT]
Ok, hier ist der Code, der für mich arbeitet. Ich verwende es Eingang paraters von comtypes Server-Methode zu Python Listen und Rückgabewerte Array Zeiger zu konvertieren:
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
Wie zuvor erläutert, erfordert p_list(items)
mindestens ein Element.
Sie haben Recht. Mein Problem war eigentlich, dass ich etwas wie "error = HRESULT(); error = E_FAIL" gemacht habe. Dann wurde der Fehler zu einer Liste hinzugefügt, die ich konvertieren wollte. Das Problem war, dass E_FAIL vom Typ int, nicht HRESULT war. Also beide "Fehler = HRESULT (E_FAIL)" oder "Fehler = HRESULT(); (...) error.value = E_FAIL's Arbeit. – jaw
Hallo, ich habe '>>> result', was mir gibt:' <__ main __. C_wchar_p_Array_2 Objekt bei 0x049CF1C0> 'aber' >>> Ergebnis [0] 'funktioniert nicht für mich. Ich bekomme: 'UnicodeEncodeError: 'Charmap' Codec kann Zeichen in Position 2-7 nicht codieren: Zeichenkarten zu'. Kannst du mir helfen? –
Aleksandar