Cette réponse est un repost de un à une question connexe Framester posté à propos de l'utilisation de ctypes au lieu de swig. Je l'ai inclus ici au cas où des recherches sur le Web afficheraient un lien vers sa question originale.
Je l'ai utilisé ctypes pour plusieurs projets maintenant et ont été très heureux avec les résultats . Je ne pense pas que j'ai personnellement en théorie, besoin d'un wrapper pointeur à pointeur encore mais, vous devriez être en mesure effectuer les opérations suivantes:
from ctypes import *
your_dll = cdll.LoadLibrary("your_dll.dll")
PFloat = POINTER(c_float)
PInt = POINTER(c_int)
p_data = PFloat()
p_classes = PInt()
buff = create_string_buffer(1024)
n1 = c_int(0)
n2 = c_int(0)
ret = your_dll.read_data(buff, byref(n1), byref(n2), byref(p_data), byref(p_classes))
print('Data: ', p_data.contents)
print('Classes: ', p_classes.contents)
Je suppose que le read_data() La fonction prend ces pointeurs à des pointeurs afin que les valeurs peuvent être retournées par eux? Vous pourriez envisager de changer la fonction Python pour les retourner dans le cadre de la valeur de retour. – Petriborg
@Petriborg, La chose est, je dois retourner 'classes', 'données', 'm' et 'n' et je ne suis pas censé utiliser une structure. – Framester