Hier ist mein C-Code, ich habe eine gemeinsame Lib daraus gemacht. Wenn ich die freigegebene Lib in Python lade und den unten stehenden Python-Code ausführe, stürzt ich ab. Warum?Warum stürzt Python beim Zurückgeben einer C-Zeichenfolge ab?
extern "C" {
PyObject* foo2(char* b)
{
return Py_BuildValue("s", b);
}
}
Und hier ist, was ich in Python tue:
from ctypes import *
d = cdll.LoadLibrary('./foo.so')
d.foo2.restype = c_char_p
v = d.foo2('hello world')
print pythonapi.PyString_Size(v)
Wenn es hilft, ich bin python2.6.
'c_char_p' - bedeutet das nicht' char * '? Sie sind ** nicht ** zurückgeben ein 'char *' ... –
Warum verwenden Sie 'ctypes', um eine Bibliothek zu öffnen, die die Python-API verwendet, anstatt diese Bibliothek zu einem Python-Erweiterungsmodul zu machen? – interjay