如何将c ++类与ctypes一起使用?


问题内容

我刚刚开始使用ctypes,并且想使用我已经使用ctypes从python内的dll文件中导出的C 类。因此,可以说我的C 代码看起来像这样:

class MyClass {
  public:
    int test();
...

我会知道创建一个包含此类的.dll文件,然后使用ctypes在python中加载.dll文件。现在如何创建MyClass类型的Object并调用其测试函数?ctypes甚至可能吗?另外,我会考虑使用SWIG或Boost.Python,但对于小型项目,ctypes似乎是最简单的选择。


问题答案:

简短的故事是,对于C ,没有像C那样的标准二进制接口。由于名称修改和处理库函数调用之间的堆栈的方法不同,不同的编译器为相同的C

动态库输出不同的二进制文件。

所以,不幸的是,是不是真的有一个可移植的方式访问C ++库 一般 。但是,一次只需要一个编译器就没有问题。

这篇博客文章还简要概述了当前为何不起作用。也许在C 0x发布之后,我们将为C

提供标准的ABI吗?在那之前,您可能将无法通过Python的方法访问C ++类ctypes