我刚刚开始使用 ctypes,并且想使用我使用 ctypes 从 python 中导出到 dll 文件中的 C++ 类。所以假设我的 C++ 代码看起来像这样:
class MyClass {
public:
int test();
...
我会知道创建一个包含此类的 .dll 文件,然后使用 ctypes 在 python 中加载 .dll 文件。现在我将如何创建一个 MyClass 类型的对象并调用它的测试函数? ctypes甚至可能吗?或者,我会考虑使用 SWIG 或 Boost.Python,但 ctypes 似乎是小型项目最简单的选择。
原文由 jörg 发布,翻译遵循 CC BY-SA 4.0 许可协议
简短的故事是,C++ 没有像 C 那样的标准二进制接口。不同的编译器为相同的 C++ 动态库输出不同的二进制文件,这是由于名称修改和处理库函数调用之间的堆栈的不同方式。
因此,不幸的是,实际上并没有一种可移植的方式来访问 C++ 库 。 但是,对于一次一个编译器来说,这没问题。
这篇博 文还简要概述了为什么目前这不起作用。也许在 C++0x 出来之后,我们会有一个标准的 C++ ABI?在那之前,您可能无法通过 Python 的
ctypes
访问 C++ 类。