Ich bräuchte jetzt doch nochmal Hilfe. Zunächst einmal glaube ich, dass birkenfelds Vorschlag keine so gute Idee ist. Grund: Das liefert mir in jedem Fall ein `ctypes.Structure`-Objekt zurück. Ich muss aber AFAIK mit dem Originalobjekt weiterarbeiten, weil C mich sonst nicht mehr versteht. `restype` ist wohl nur dann angebracht, wenn man weiß, dass man das Ergebnis nur noch in Python verwenden möchte. Hunderprozentig sicher bin ich mir bei der Sache aber nicht. Wäre schön, falls jemand hier Klarheit schaffen könnte.
Und jetzt zu meiner von `Structure` abgeleiteten Klasse, die ja so aussieht:
Code: Alles auswählen
class SoupMessage(Structure):
_fields_ = [('method', c_char_p),
('status_code', c_int),
('reason_phrase', c_char_p),
('request_body', c_int), # SoupMessageBody
('request_headers', c_int), # SoupMessageHeaders
('response_body', c_int), # SoupMessageBody
('response_headers', c_int)] # SoupMessageHeaders
Die letzten 4 `c_int`s waren erstmal als Dummy-Objekte gedacht. Die Klassen wollte ich danach schreiben. Jetzt besteht aber das selbe Problem wie schon gerade erwähnt: Wenn ich `response->response_headers` auf die Nachricht anwenden will (Zeile 28 meines C-Codes), dann wäre das für meine `SoupMessage(Structure)` in Python `response.contents.response_headers`. Das würde mir ein `ctypes`-Objekt zurückliefern (entweder `c_int` oder eine eigene `Structure`-Instanz). Nun kann ich damit aber nichts mehr in C anfangen. Denn der nächste Schritt wäre ja:
Code: Alles auswählen
const char* contenttype = soup_message_headers_get_content_type (headers, NULL);
Meine Frage ist also: Wie verweise ich mit `ctypes` auf das ursprüngliche C-"Objekt"? Intern scheint es damit ja keine Probleme zu haben, ich werde nur aus der Doku nicht schlau, welche Methode dafür genommen wird. Also das "echte" C-`headers` soll an den Namen `headers` in Python gebunden werden. Über den besagten `Structure`-struct - versteht sich.