python ctype rekursive Strukturen

8

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?

    
Eric 04.08.2009, 15:25
quelle

3 Antworten

15

Sie wollen fast sicher next_command als Zeiger deklarieren. Eine Struktur zu haben, die sich selbst enthält, ist (in keiner Sprache) möglich.

Ich denke, das ist was du willst:

%Vor%     
user9876 04.08.2009, 16:12
quelle
0

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 .

    
DrV 24.07.2013 12:11
quelle
-1

Sie müssen _fields_ nach dem Erstellen statisch aufrufen.

%Vor%     
Richard Levasseur 04.08.2009 15:33
quelle