添加方法到现有的python模块(boost python)?

时间:2015-01-08 15:54:16

标签: python c++ boost-python

我在我的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。

0 个答案:

没有答案