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.
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.
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.
Recommended Posts