我正在编写一个Windows DLL,用于另一个程序,我希望在Python脚本中有一些C++函数调用Python函数。C++函数位于实例化对象中;当对象调用脚本时,脚本也应该能够调用该对象的函数。我一直在努力做到这一点Boost.Python但是文件Boost.Python我对如何实现这一点非常模糊,我发现的一些教程相当于“。。。然后画出猫头鹰的其他部分。”
(我也听说过一些关于使用pybind的东西,但在这个开发阶段,我只限于MSVC 9.0和pre-C11)。为了达到我所处的位置,这是一段相当艰难的上坡路,这并不遥远。在
因此,基本上,我(非常粗略地)沿着以下路线进行观察:BOOST_PYTHON_MODULE(PythonModule)
{
class_("Functions", boost::python::no_init)
.def("foo", &CPythonModule::foo)
}
void CPythonModule::foo(string message)
{
some_function_that_prints_things(message);
}
int main_module_method()
{
Py_Initialize();
???
call_python_script_function(script.py, bar);
}
然后是剧本:
^{pr2}$
我假设我需要把C++对象的实例传递给Python脚本,理想的是脚本或Python解释器是一个对象,在DLL卸载之前我会一直保存它。我对调用脚本的具体细节也很模糊。我的搜寻毫无结果,令人沮丧。在
编辑:
通过一些费解的工作,我最大的未知数是如何将对象的当前实例发送到Python脚本并调用该对象的函数,而不必在Python中创建新对象。
通过这一行,我可以使对象不可初始化:class_("Functions", boost::python::no_init)
但是,我也不能调用类中的函数,因为Python需要一个类的实例来调用它们!如果对象创建类的自己的副本,它也会在死后调用该类的析构函数,从而导致运行DLL的主程序出现各种问题。在