Pour renvoyer char * dans une fonction de rappel à l'aide de ctypes en Python

Le seul exemple d'appel à partir du langage C en Python est l'exemple de retour du type int de qsort. Il semble qu'il y avait un moyen de retourner une structure Windows difficile qui ne pouvait pas être trouvée.

Ce type de rappel

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

Normalement

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

Puis

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>

Bien que la valeur de retour puisse être reçue du côté du langage C, Je n'ai pas pu recevoir la chaîne prévue.

Résultats d'essais et d'erreurs

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

Avec cela, la chaîne de caractères prévue peut être renvoyée du côté du langage C.

À propos, la spécification de l'argument lors de l'appel du côté du langage C normal est

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

Vous pouvez le faire sans aucun problème.

Article associé

Recommended Posts

Pour renvoyer char * dans une fonction de rappel à l'aide de ctypes en Python
Créer une fonction en Python
Utiliser la fonction de rappel en Python
Comment exécuter une commande à l'aide d'un sous-processus en Python
[Python] Comment appeler une fonction de c depuis python (édition ctypes)
Comment tester unitaire une fonction contenant l'heure actuelle à l'aide de Freezegun en Python
Un mémo que j'ai écrit une fonction de base en Python en utilisant la récurrence
J'ai fait un chronomètre en utilisant tkinter avec python
Essayez d'exécuter une fonction écrite en Python à l'aide de Fn Project
Précautions lors du décapage d'une fonction en python
Connectez-vous à Slack à l'aide de requêtes en Python
Comment obtenir stacktrace en python
Dessinez une structure arborescente en Python 3 à l'aide de graphviz
Comment générer un nouveau groupe de journaux dans CloudWatch à l'aide de python dans Lambda
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
[Python] [Word] [python-docx] Essayez de créer un modèle de phrase de mot en Python en utilisant python-docx
Dessiner un graphique d'une fonction quadratique en Python
Créer un fichier GIF en utilisant Pillow en Python
Calculons en fait le problème statistique avec Python
Enregistrer automatiquement les arguments de fonction dans argparse en Python
Comment effacer un taple dans une liste (Python)
Récupérer l'appelant d'une fonction en Python
Je veux créer une fenêtre avec Python
Comment créer un fichier JSON en Python
Une manière intelligente de chronométrer le traitement avec Python
Étapes pour développer une application Web en Python
Afficher les avis sur les médicaments à l'aide de listes en Python
Obtenir des pointeurs vers des membres de structure dans les ctypes Python
Pour ajouter un module à python que vous mettez dans Julialang
Comment notifier les canaux Discord en Python
[Python] Comment dessiner un histogramme avec Matplotlib
Créez un fichier MIDI en Python en utilisant pretty_midi
Comment se moquer d'une fonction publique dans Pytest
[Python] Smasher a essayé de faire du processus de chargement de la vidéo une fonction à l'aide d'un générateur
Analyser une chaîne JSON écrite dans un fichier en Python
Créer un bot de collecte de données en Python à l'aide de Selenium
Comment convertir / restaurer une chaîne avec [] en python
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Essayez de créer un module Python en langage C
Comment configurer un environnement Python à l'aide de pyenv
Fonction pour renvoyer plusieurs colonnes à des colonnes uniques dans DataFrame
(Python) Essayez de développer une application Web en utilisant Django
Je veux écrire en Python! (2) Écrivons un test
[Route vers Python intermédiaire] Définir la fonction __getattr__ dans la classe
[Python] Comment développer des variables dans une chaîne de caractères
Créer un plugin pour exécuter Python Doctest sur Vim (2)
J'ai essayé d'implémenter un pseudo pachislot en Python
Créez un plug-in pour exécuter Python Doctest avec Vim (1)
Un mémorandum pour exécuter un script python dans un fichier bat
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
Choses à noter lors de l'initialisation d'une liste en Python
Comment créer un package Python à l'aide de VS Code
Convertir / renvoyer des objets de classe au format JSON en Python
Comment quitter lors de l'utilisation de Python dans Terminal (Mac)
Envisagez la conversion de Python récursif en non récursif
Introduction à l'algèbre linéaire avec Python: Décomposition A = LU
[Python] Création d'une méthode pour convertir la base en 1 seconde