Ho sviluppato una DLL per un driver in C. Ho scritto un programma di test in C++ e la DLL funziona correttamente.strutture ricorsive di tipo ctype
Ora mi piacerebbe interagire con questa DLL usando Python. Ho nascosto con successo la maggior parte delle strutture C definite dall'utente, ma c'è un punto in cui devo usare le strutture C. Sono piuttosto nuovo in Python quindi potrei sbagliare.
Il mio approccio è ridefinire alcune strutture in python usando ctype e poi passare la variabile alla mia DLL. Tuttavia, in questi classe ho una lista collegata personalizzato che contiene tipi ricorsivi come seguire
class EthercatDatagram(Structure):
_fields_ = [("header", EthercatDatagramHeader),
("packet_data_length", c_int),
("packet_data", c_char_p),
("work_count", c_ushort),
("next_command", EthercatDatagram)]
Questo non riesce, perché EthercatDatagram all'interno, EthercatDatagram non è già definito in modo che il parser restituisce un errore.
Come dovrei rappresentare questo elenco collegato in python in modo che la mia DLL lo capisca correttamente?
"non è possibile (in qualsiasi lingua)" - questo è vero per le classi o le classi c/C++/java, ma nelle lingue con tipi di dati algebrici non è solo possibile ma anche molto comune. per esempio. 'Elenco dati a = Cons a (Elenco a) | Nil' nelle lingue della famiglia ML (ocaml/haskell/SML/etc). – sinelaw