目标:我正在尝试使用 Boost::Python 库在我的 c++ 代码中以交互方式使用 python。我的目标是从 python 解释器更改我在 c++ 中定义的某些类的变量。
代码附在下面。
问题:我可以在python接口中加载库(即加载hello)并从中创建一个对象(obj = hello.World())。我什至可以访问没有变量的函数( obj.greet() ),但是当我想访问带变量的函数(obj.Set("Hello") )时,我会遇到内存访问冲突(“访问冲突读取位置 0xffffffffffffffff”)。即使该函数是一个只需要一些字符串的空函数。
struct World
{
void set(string _msg) {}
string greet() { return msg; }
string msg;
};
typedef boost::shared_ptr<World> World_ptr;
BOOST_PYTHON_MODULE(hello)
{
bp::class_<World, World_ptr>("World")
.def("greet", &World::greet)
.def("set", &World::set)
;
}
int main(int argc, char **argv)
{
Py_Initialize();
bp::object main = bp::object(bp::handle<>(bp::borrowed(PyImport_AddModule("__main__"))));
bp::object global(main.attr("__dict__"));
inithello();
// Bring up Python interpreter
Py_Main(argc, argv);
Py_Finalize();
return 0;
}
实际上,这来自 Boost::Python 教程,对使用 Python 解释器进行了一些修改 http://www.boost.org/doc/libs/1_51_0/libs/python/doc/tutorial/doc/html/python/exposing.html
非常感谢
---------------------编辑---------
我进行了很多测试,发现问题仅出在字符串输入上。即char* 或int 没有问题。boost python中的字符串有问题吗?