So geben Sie char * in einer Rückruffunktion mit ctypes in Python zurück

Das einzige Beispiel für den Aufruf aus der C-Sprache in Python ist das Beispiel für die Rückgabe des int-Typs von qsort. Es scheint, dass es eine Möglichkeit gab, eine schwierige Windows-Struktur zurückzugeben, die nicht gefunden werden konnte.

Dieser Rückruftyp

CBFUNC=CFUNCTYPE(c_char_p,c_char_p)
cbfunc=CBFUNC(py_cb_func)

Normalerweise

msg = "Hello, Trusterd.this is Python."
buf = create_string_buffer(msg.encode('UTF-8'))
return buf

Dann

Traceback (most recent call last):
  File "_ctypes/callbacks.c", line 302, in 'converting callback result'
TypeError: bytes or integer address expected instead of c_char_Array_32 instance
Exception ignored in: <function py_cb_func at 0x1041dd510>

Obwohl der Rückgabewert auf der Seite der C-Sprache empfangen werden kann, Ich konnte die beabsichtigte Zeichenfolge nicht empfangen.

Ergebnisse von Versuch und Irrtum

msg = "Hello, Trusterd.this is Python."
buf = create_string_buffer(msg.encode('UTF-8'))
c = cast(buf, POINTER(c_char))
return addressof(c.contents)

Damit kann die beabsichtigte Zeichenfolge an die C-Sprachseite zurückgegeben werden.

Übrigens lautet die Angabe des Arguments beim Aufruf der normalen C-Sprachseite

hogefunc(create_string_buffer(msg.encode('UTF-8')))

Sie können es ohne Probleme tun.

In Verbindung stehender Artikel

Recommended Posts

So geben Sie char * in einer Rückruffunktion mit ctypes in Python zurück
Erstellen Sie eine Funktion in Python
Verwenden Sie die Rückruffunktion in Python
So führen Sie einen Befehl mit einem Unterprozess in Python aus
[Python] So rufen Sie eine Funktion von c aus Python auf (ctypes edition)
So testen Sie eine Funktion, die die aktuelle Zeit enthält, mit Freezegun in Python
Ein Memo, dass ich eine Grundfunktion in Python mit Wiederholung geschrieben habe
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Versuchen Sie, eine in Python geschriebene Funktion mit Fn Project auszuführen
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Melden Sie sich mit Anforderungen in Python bei Slack an
Wie bekomme ich Stacktrace in Python?
Zeichnen Sie mit graphviz eine Baumstruktur in Python 3
So generieren Sie eine neue Protokollgruppe in CloudWatch mit Python in Lambda
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
[Python] [Word] [python-docx] Versuchen Sie, mit python-docx eine Vorlage für einen Wortsatz in Python zu erstellen
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Erstellen Sie eine GIF-Datei mit Pillow in Python
Berechnen wir das statistische Problem mit Python
Registrieren Sie Funktionsargumente automatisch in argparse in Python
So löschen Sie einen Taple in einer Liste (Python)
Holen Sie sich den Aufrufer einer Funktion in Python
Ich möchte mit Python ein Fenster erstellen
So erstellen Sie eine JSON-Datei in Python
Eine clevere Möglichkeit zur Zeitverarbeitung mit Python
Schritte zum Entwickeln einer Webanwendung in Python
Anzeigen von Arzneimittelbewertungen mithilfe von Listen in Python
Abrufen von Zeigern auf Strukturelemente in Python-ctypes
So fügen Sie Python ein Modul hinzu, das Sie in Julialang eingefügt haben
So benachrichtigen Sie Discord-Kanäle in Python
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
Wie man eine öffentliche Funktion in Pytest verspottet
[Python] Smasher hat versucht, den Video-Ladevorgang mithilfe eines Generators zu einer Funktion zu machen
Analysieren Sie eine JSON-Zeichenfolge, die in eine Datei in Python geschrieben wurde
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
So richten Sie eine Python-Umgebung mit pyenv ein
Funktion zum Zurückgeben mehrerer Spalten an einzelne Spalten in DataFrame
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
[Road to Intermediate Python] Definieren Sie die Funktion __getattr__ in der Klasse
[Python] So erweitern Sie Variablen in einer Zeichenfolge
Erstellen Sie ein Plug-In, das Python Doctest auf Vim ausführt (2)
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Erstellen Sie ein Plug-In, um Python Doctest mit Vim (1) auszuführen.
Ein Memorandum zum Ausführen eines Python-Skripts in einer Bat-Datei
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit einem Roboter in Python arbeiten.
Beachten Sie beim Initialisieren einer Liste in Python
So erstellen Sie ein Python-Paket mit VS Code
Konvertieren / Zurückgeben von Klassenobjekten in das JSON-Format in Python
Beenden bei Verwendung von Python in Terminal (Mac)
Betrachten Sie die Konvertierung von Python rekursiv in nicht rekursiv
Einführung in die lineare Algebra mit Python: A = LU-Zerlegung
[Python] Erstellt eine Methode zum Konvertieren von Radix in 1 Sekunde