首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问cffi枚举

访问cffi枚举
EN

Stack Overflow用户
提问于 2014-12-01 07:22:56
回答 3查看 2.2K关注 0票数 3

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

代码语言:javascript
复制
from cffi import FFI
ffi = FFI()
ffi.cdef('typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;')

现在,当再次调用cdef时,可以很容易地访问它。但是,我想如何访问python中的这个枚举,而不重新声明它呢?在文档中找不到任何提及。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-01 07:48:18

使用ffi.dlopen,并通过使用ffi.dlopen的返回值限定枚举值来访问枚举值

代码语言:javascript
复制
>>> 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
票数 4
EN

Stack Overflow用户

发布于 2018-04-24 16:15:52

如果您已经对库进行了包装,您可以使用上面的内容如下:

代码语言:javascript
复制
import _wrappedlib

print _wrappedlib.lib.RANDOM
票数 1
EN

Stack Overflow用户

发布于 2019-06-18 09:26:34

按照@falsetru的回答,ffi.dlopen('c')不再适用于Windows7和Python3.7,但我今天发现,我们可以使用任何库而不是'c',而且它仍然有效。https://bugs.python.org/issue23606推荐的方法是使用ucrtbase.dll,因此我们可以这样做:

代码语言:javascript
复制
>>> ffi.cdef('#define MAX_PATH 260')
>>> ffi.dlopen('kernel32.dll').MAX_PATH
260

枚举的另一种更复杂的方法是使用self.typeof('strategy').relements['RANDOM'],但这并不适用于#define,因此上述方法更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27223489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档