这个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的函数签名。
2条答案
按热度按时间46scxncf1#
就像1995年说的,答案是写这个Python函数:
t2a7ltrp2#
这似乎不是cffi的一个特点。我能够用C扩展得到我所想象的,这个答案中的例子:Compiler can't find Py_InitModule() .. is it deprecated and if so what should I use?
这更类似于Lua C API,但似乎与cffi无关。我还发现了ctypes,我还没有尝试过。