从cffi函数返回一个普通的Python字符串?

pxq42qpu  于 12个月前  发布在  Python
关注(0)|答案(2)|浏览(86)

这个cffi的解释给出了一个如何声明一个返回浮点数的C函数的例子。你也可以声明它返回一个char*。我改编了这个玩具的例子:

# my_ffi.py
...

ffibuilder.cdef("""
    char * my_cfun(void);
""")

...

如果我这样做,那么我需要在调用站点使用下面的Python将其返回到Python字符串中:

# user.py
from _my_ffi import ffi, lib

print(ffi.string(lib.my_cfun()))

我如何声明它,使得调用Python的代码看到一个普通的Python字符串,从而不需要转换?我尝试使用PyObject * 作为返回类型,但这导致cdef无法解析它:

cffi.CDefError: cannot parse "PyObject * my_cfun(void);"

这个应用程序的Googleability是相当糟糕.我怀疑有一种完全不同的方式来来回传递python对象,但我也确实看到过C中包含PyObject的函数签名。

46scxncf

46scxncf1#

就像1995年说的,答案是写这个Python函数:

def stuff():
    return ffi.string(lib.my_cfunc())
t2a7ltrp

t2a7ltrp2#

这似乎不是cffi的一个特点。我能够用C扩展得到我所想象的,这个答案中的例子:Compiler can't find Py_InitModule() .. is it deprecated and if so what should I use?
这更类似于Lua C API,但似乎与cffi无关。我还发现了ctypes,我还没有尝试过。

相关问题