我在我的C ++应用程序中嵌入了一个Python解释器,并且还导出了一些可以在解释器中调用的类。
现在这个应用程序还加载了插件(DLL文件),我希望能够在加载插件时添加新方法,但是在谷歌搜索一天之后我找不到怎么做。 :/
MainApp致电
PyImport_AppendInittab("mymodule", &PyInit_mymodule);
Py_Initialize();
bp::import("mymodule");
和bp :: import调用init,即:
BOOST_PYTHON_MODULE(ROOT_PACKAGE_NAME)
{
... // Defines the classes and methods in the module
}
之后调用插件,现在我想向“mymodule”添加更多方法,或者如果不可能,添加到新的模块名称,但我无法让它工作!
这是我尝试过的十种不同方式之一,在这里创建一个新模块:
void OnWizard() // The function that I want to call
{ }
BOOST_PYTHON_MODULE(PluginModule)
{
docstring_options doc_options(true, true, false);
def("wizard", OnWizard);
}
void PluginDLL::RegisterPythonFunctions()
{
try {
// PyImport_AddModule("PluginModule"); // Creates an empty module
// PyModule_Create(&pluginmodule); // Doesn't seem to work
// PyImport_AppendInittab("PluginModule", &PyInit_PluginModule); // Needs to be called before Py_Initialize
// PyImport_ImportModule("PluginModule");
boost::python::import("PluginModule")
}
catch (error_already_set)
{
PyErr_Print();
}
}
那么在执行Py_Initialize后如何创建新模块?是否可以将“向导”功能添加到“mymodule”范围或更好的“mymodule.PluginModule”?
欢迎任何想法!使用Boost 1.56和Python 3.4。