Python/C++互操作性

2024-06-11 13:04:12 发布

您现在位置:Python中文网/ 问答频道 /正文

< >我想扩展我的C++应用程序,包括Python解释器。经过一段时间的研究,boost.python似乎是我想要的。但不知怎么的,我不能让它工作。基本上,我想用我的C++应用程序加载和执行Python脚本。我将传递PyEditor类的实例,脚本可以调用各种方法。我使用回调机制通知脚本更改。在

现在我不能编译代码了。它一直在告诉我

libs/boost-1.5.8/boost/python/module_init.hpp:79:8: error: expected unqualified-id before string constant
extern "C" __attribute__ ((__visibility__("default"))) _BOOST_PYTHON_MODULE_INIT(name)
libs/boost-1.5.8/boost/python/module.hpp:11:30: note: in expansion of macro ‘BOOST_PYTHON_MODULE_INIT’
# define BOOST_PYTHON_MODULE BOOST_PYTHON_MODULE_INIT

这是我用来加载脚本的函数

void PythonManager::LoadModules()
{

    BOOST_PYTHON_MODULE(PyManager)
    {
        boost::python::class_<PyEditor>("PyEditor", boost::python::no_init)
        .def("GetText",&PyEditor::GetText)
        .def("GetText",&PyEditor::SetText)
        .def("AddCallable",&PyEditor::AddCallable);
    }
    PyImport_AppendInittab("PyManager");

    Py_Initialize();

    boost::python::object pyManagerModule((handle<>(PyImport_ImportModule("PyManager"))));
    main_namespace["PyManager"] = pyManagerModule;
    scope(cpp_module).attr("editor") = boost::python::ptr(new PyEditor());

    //Load the .py files 
}

我已经阅读了几乎所有的资源,但我无法理解我的错误


Tags: 脚本应用程序initdeflibsgettextmodulehpp
1条回答
网友
1楼 · 发布于 2024-06-11 13:04:12

^{}宏是用于声明Pythonmodule initialization function的语法糖。编译器抱怨有人试图定义一个嵌套的命名函数。将BOOST_PYTHON_MODULE块移动到允许定义命名函数的范围(如全局命名空间)中,应该可以解决问题:

BOOST_PYTHON_MODULE(PyManager)
{
  ...
}

void PythonManager::LoadModules()
{
  PyImport_AppendInittab("PyManager", &initPyManager);
  ...
}

下面是一个完整的示例demonstrating在嵌入时导入静态链接的Python模块:

^{pr2}$

上面的程序运行到完全没有错误,并且在注释中注释了等效的Python代码。在

相关问题 更多 >