如何将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
。