3

假设我在 cffi 下定义了一个枚举:

from cffi import FFI
ffi = FFI()
ffi.cdef('typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;')

现在再次调用时可以轻松访问它cdef。但是我如何在不重新声明的情况下在 python 中访问这个枚举呢?在文档中找不到任何提及。

4

3 回答 3

4

使用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
于 2014-12-01T07:48:18.317 回答
1

如果您已经包装了一个库,您可以使用与以下相同的内容:

import _wrappedlib

print _wrappedlib.lib.RANDOM
于 2018-04-24T16:15:52.350 回答
0

按照@falsetru 的回答,ffi.dlopen('c')Windows 7 和 Python 3.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'],但这对 s 不起作用#define,所以上面的方式更好。

于 2019-06-18T09:26:34.990 回答