【问题标题】:Python: retrieving an enum variable from c++ using ctypesPython:使用 ctypes 从 c++ 中检索枚举变量
【发布时间】:2016-06-07 08:06:12
【问题描述】:

我在 C++ API 中定义了以下枚举:

typedef enum RESULT_ENUM
{
    SUCCESS,
    ERR_INVALID_PORT_DEFINITION,
    ERR_TOO_MANY_SAMPLES,
    ERR_RECORDING_THREAD_ALREADY_RUNNING,
    ERR_RECORDING_WITHOUT_APPLY_SETTINGS,
    ...
}RESULT;

我有一个使用 API 并创建的 C++ 程序:

RESULT res;

然后它使用 API 中的函数来设置 res 内部的值,例如:

res = SetProfile(APP_PROFILE);
res = SetDynamicImageFilter(filterType);
res = StartCalibration();

我想使用 ctypes 创建一个执行相同(字面意思)的 Python 程序。 如何以 Python 方式翻译 RESULT res;?我如何使它包含 函数的期望结果?

编辑:

这些函数返回与RESULT 枚举器匹配的值。我想在 Python 中获取这些枚举器,我该怎么做?我目前正在获取与枚举器值相对应的数字。

【问题讨论】:

  • 在 Python 中重新创建 enum 有点笨拙,因为它不适合语言的设计。有关示例,请参阅this post
  • 在 C++ 中,res 在内部由 API 更改,并且可由 C++ 程序访问。有没有办法在 Python 中模仿这种行为?就像创建一个 ctypes 变量,它将根据 C++ API 发生变化?

标签: python c++ enums ctypes


【解决方案1】:

名称到值的映射未编译到二进制文件中。

所有需要枚举值的 ctypes 代码在 python 中硬编码该值。

如果您将 C++ 代码包装在 python 扩展中,您可以选择将枚举值公开为模块的 python 符号。

如果您控制您正在调用的 C++ 实现,您可以添加一个辅助函数来返回您需要的枚举值。

【讨论】:

  • 我不控制 C++ API。所以我想我正在寻找的是将枚举值公开为 python 符号。我该怎么做?
猜你喜欢
  • 2023-03-16
  • 2020-08-24
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多