我扩展了answer中提供的示例,添加了一个私有成员变量,并将其打印到bar()
函数中:
#include <iostream>
class Foo{
private:
double m;
public:
Foo() { m = 2.344; };
void bar(){
std::cout << "Hello, number is " << m << std::endl;
}
};
extern "C" {
Foo* Foo_new(){ return new Foo(); }
void Foo_bar(Foo* foo){ foo->bar(); }
}
ctypes
包装未更改,为:
当我运行Python代码(在已经编译了C++代码之后),我得到了一个分割错误,我已经在^ {< CD1>}中缩小到^ {< CD3>}的打印。在
seg故障没有发生
m
的打印,但将其保留为变量m
中的任何一个固定数来代替m
。在我真的很困惑为什么会发生这种事。由于这是一个学习ctypes的实验,任何帮助都将不胜感激。在
如果使用64位Python,则需要定义}。否则,ctypes默认将值转换为32位C
restype
和{int
。在以下是2.7.5的源链接,Modules/\u ctypes/callproc.c:
对于64位Windows,C
long
是32位的,但在大多数其他64位平台上是64位的。通过强制int
得到的结果至少是一致的。在相关问题 更多 >
编程相关推荐