【问题标题】:Get enum definition from shared library从共享库中获取枚举定义
【发布时间】:2011-06-03 08:04:40
【问题描述】:

我正在使用 ctypes 访问一个用 C 编写的共享库。共享库的 C 源包含一个类似

的枚举
enum {
   invalid = 0,
   type1   = 1,
   type2   = 2
} type_enum;

在 Python 方面,我打算只为各种枚举值定义整数常量,例如:

INVALID = 0
TYPE1 = 1
TYPE2 = 2  

然后在调用 C 函数的 Python 代码中使用这些数字“常量”。这似乎工作正常,但是我强烈更喜欢直接从共享库中获取枚举的数值(自省?);但是使用例如nm 在共享库上它似乎不包含任何符号“无效”、“类型 1”或“类型 2”。所以我的问题是:

  1. 是否可以从共享库中的枚举定义中提取数值 - 或者编译器完成后整个枚举概念是否“掉在地上”?
  2. 如果枚举值存在于共享库中 - 我如何从 Python/ctypes 访问它们?

【问题讨论】:

  • 查看 this question 了解自动解析标​​头甚至创建 Python 等效枚举的方法。

标签: python c ctypes


【解决方案1】:

未导出枚举定义,因此您当前的解决方案是唯一可用的解决方案。

无论如何,C 枚举值只不过是整数常量。 C 端没有类型安全,您可以将任何整数值传递给枚举参数。所以无论如何,C 编译器并没有做太多事情。

【讨论】:

    【解决方案2】:

    请参阅MSDN 了解枚举的好处:“#define 预处理器指令的替代方案,其优点是可以为您生成值并遵守正常的范围规则” - 尤其缺少类型安全。这强烈表明,正如您所建议的那样,枚举一旦编译就会被丢弃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 2010-09-12
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多