如何以编程方式用 Python 包装 C++ dll

How to programmatically wrap a C++ dll with Python

我知道如何使用 ctypes 通过创建一个转换 Python 的 "wrapper" 函数从 Python 中的 C++ .dll 调用一个函数输入类型到 C。我认为这本质上是在 Python 中重新创建函数签名,其中函数体包含转换为 C 的类型和相应的 .dll 函数调用。

我目前有一组 C++ .dll 文件。每个库都包含许多 个函数,其中一些是重载的。我的任务是为每个 .dll 文件编写一个 Python 界面。我目前的前进方向是 "use the hammer I have" 并遍历每个函数,为每个函数精心制作一个相应的 Python 包装器......这将涉及我查看每个函数的 API 文档在 .dll 中并将它们一一编码。不过,我的直觉告诉我,可能有更有效的方法来解决这个问题。

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

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