Ich habe eine DLL für einen Treiber in C entwickelt. Ich habe ein Testprogramm in C ++ geschrieben und die DLL funktioniert einwandfrei.
Ich möchte jetzt mit dieser DLL mit Python interagieren. Ich habe erfolgreich die meisten benutzerdefinierten C-Strukturen versteckt, aber es gibt einen Punkt, an dem ich C-Strukturen verwenden muss. Ich bin ziemlich neu bei Python, damit ich etwas falsch machen kann.
Meine Methode besteht darin, einige Strukturen in Python mit ctype neu zu definieren und dann die Variable an meine DLL zu übergeben. In diesen Klassen habe ich jedoch eine benutzerdefinierte verknüpfte Liste, die rekursive Typen wie folgt enthält
%Vor%Dies schlägt fehl, da in EthercatDatagram EthercatDatagram nicht bereits definiert ist, so dass der Parser einen Fehler zurückgibt.
Wie soll ich diese verkettete Liste in Python darstellen, damit meine DLL sie richtig versteht?
Der Grund warum
%Vor% funktioniert nicht, das ist die Maschinerie, die die Deskriptor-Objekte erzeugt (siehe die Quelle der PyCStructType_setattro
Funktion) für den Zugriff auf das next_command
-Attribut wird nur bei Zuweisung aktiviert zum _fields_
-Attribut der Klasse.
Lediglich das neue Feld an die Liste anzuhängen wird völlig unbemerkt.
Um diesen Fehler zu vermeiden, verwenden Sie immer ein Tupel (und nicht eine Liste) als Wert des Attributs _fields_
: das macht deutlich, dass Sie dem Attribut einen neuen Wert zuweisen und es nicht an Ort und Stelle ändern müssen .
Sie müssen _fields_
nach dem Erstellen statisch aufrufen.