【问题标题】:How to programmatically wrap a C++ dll with Python如何使用 Python 以编程方式包装 C++ dll
【发布时间】:2016-05-03 10:51:56
【问题描述】:

我知道如何使用 ctypes 通过创建一个将 Python 输入类型转换为 C 的“包装器”函数来从 Python 中的 C++ .dll 调用函数。我认为这实质上是在Python,其中函数体包含转换为 C 的类型和对应的 .dll 函数调用。

我目前有一组 C++ .dll 文件。每个库都包含 许多 函数,其中一些是重载的。我的任务是为每个.dll 文件编写一个 Python 接口。我目前的前进方式是“使用我拥有的锤子”并遍历每个函数,为每个函数精心制作相应的 Python 包装器......这将涉及我查看.dlls 中每个函数的 API 文档并将它们一一编码。不过,我的直觉告诉我,可能有更有效的方法来解决这个问题。

我的问题是:是否有一种与 Windows C++ .dll 交互的编程方式,不需要为每个函数制作相应的包装器?谢谢。

【问题讨论】:

  • 使用例如编写包装模块可能更容易。 Boost Python.
  • SWIG 可能更容易大规模使用,但仍然需要准备接口文件。
  • Cython 也支持 C++。

标签: python-3.x dll ctypes


【解决方案1】:

我建议使用 Cython 进行包装。 Cython 允许您直接使用 C/C++ 代码,只需很少的更改(除了一些样板文件)。对于包装大型库,通常很容易通过最少的额外包装工作(例如在 Ctypes 中)快速启动并运行某些东西。我的经验也是 Cython 的可扩展性更好......虽然需要更多的前端工作来支持 Cython 而不是 Ctypes,但在我看来,它更易于维护,并且非常适合您提到的包装代码的编程生成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多