你需要打电话
dlopen('c')
将枚举加载到C命名空间。
>>> from cffi import FFI
>>> ffibuilder = FFI()
>>> ffibuilder.cdef('typedef enum { dense, sparse } dimension_mode;')
>>> dim = ffibuilder.new('dimension_mode', 'sparse')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/anaconda3/lib/python3.6/site-packages/cffi/api.py", line 258, in new
return self._backend.newp(cdecl, init)
TypeError: expected a pointer or array ctype, got 'dimension_mode'
调用DLPEN():
>>> c = ffibuilder.dlopen('c')
现在,访问/分配枚举值:
>>> c.dense
0
>>> c.sparse
1
>>>
从
ffi docs
:
可以使用library对象以前调用函数
由ffi.cdef()声明,用于读取常量,以及读取或写入全局
变量。注意,可以使用单个cdef()来声明函数
从多个库中,只要加载每个库
dlopen()并从正确的函数访问函数。
libpath是共享库的文件名,它可以包含
是否为完整路径(在这种情况下,在标准中搜索
位置,如man dlopen中所述),是否有扩展。
或者,如果libpath为none,则返回标准C库
(可用于访问Linux上的glibc函数)。