He desarrollado una DLL para un controlador en C. Escribí un programa de prueba en C++ y la DLL funciona bien.python ctype recursive structures
Ahora me gustaría interactuar con esta DLL usando Python. He ocultado con éxito la mayoría de las estructuras C definidas por el usuario, pero hay un punto en el que tengo que usar estructuras C. Soy bastante nuevo para Python, así que puedo equivocarme.
Mi enfoque es redefinir algunas estructuras en python usando ctype y luego pasar la variable a mi DLL. Sin embargo, en estas clases que tengo una lista enlazada costumbre que contiene tipos recursivos como sigue
class EthercatDatagram(Structure):
_fields_ = [("header", EthercatDatagramHeader),
("packet_data_length", c_int),
("packet_data", c_char_p),
("work_count", c_ushort),
("next_command", EthercatDatagram)]
Esta falla, porque EthercatDatagram dentro, EthercatDatagram no está ya definido por lo que el analizador devuelve un error.
¿Cómo debo representar esta lista vinculada en python para que mi DLL lo entienda correctamente?
"no es posible (en ningún idioma)": eso es cierto acerca de las clases o estructuras de estilo c/C++/java, pero en los lenguajes con tipos de datos algebraicos no solo es posible sino que también es muy común. p.ej. 'data List a = Cons a (Lista a) | Nil' en los idiomas de la familia ML (ocaml/haskell/SML/etc). – sinelaw