假设我在cffi下定义了一个枚举:
from cffi import FFI
ffi = FFI()
ffi.cdef('typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;')现在,当再次调用cdef时,可以很容易地访问它。但是,我想如何访问python中的这个枚举,而不重新声明它呢?在文档中找不到任何提及。
发布于 2014-12-01 07:48:18
使用ffi.dlopen,并通过使用ffi.dlopen的返回值限定枚举值来访问枚举值
>>> from cffi import FFI
>>> ffi = FFI()
>>> ffi.cdef('typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;')
>>> c = ffi.dlopen('c')
>>> c.RANDOM
0
>>> c.IMMEDIATE
1
>>> c.SEARCH
2发布于 2018-04-24 16:15:52
如果您已经对库进行了包装,您可以使用上面的内容如下:
import _wrappedlib
print _wrappedlib.lib.RANDOM发布于 2019-06-18 09:26:34
按照@falsetru的回答,ffi.dlopen('c')不再适用于Windows7和Python3.7,但我今天发现,我们可以使用任何库而不是'c',而且它仍然有效。https://bugs.python.org/issue23606推荐的方法是使用ucrtbase.dll,因此我们可以这样做:
>>> ffi.cdef('#define MAX_PATH 260')
>>> ffi.dlopen('kernel32.dll').MAX_PATH
260枚举的另一种更复杂的方法是使用self.typeof('strategy').relements['RANDOM'],但这并不适用于#define,因此上述方法更好。
https://stackoverflow.com/questions/27223489
复制相似问题