Python C++调用Python调用C++

2024-09-27 07:21:57 发布

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

我有一个可以通过Python代码扩展的应用程序,但是扩展代码也将使用来自应用程序的代码。我正在努力实现的目标:

//已包装_模块.cpp在

void api_call()
{
 std::cout << "API call" << std::endl;
}

BOOST_PYTHON_MODULE(API)
{
  boost::python::def("api_call", api_call);
}

//扩展名.py在

^{pr2}$

//应用程序_主.cpp在

int main()
{
 // initialize interpreter
 // load "extension.py"
 // make "API" module available for "extension.py", so "import API" works
 // load "myExtension" from "extension.py"
 // myExtension()
 // <see "API call" in console output>

 return 0;
}

““扩展名.py“永远不会作为独立脚本调用,它将始终由c++应用程序加载-因此我不需要单独构建API.dllpython要导入的模块-还是要导入?在


Tags: 模块代码pyapi应用程序目标extensionload
1条回答
网友
1楼 · 发布于 2024-09-27 07:21:57

这是可能的,但并不完全直接。在

您需要使用未记录的生成函数名,在您的大小写initAPI(它由单词init和模块名组成,区分大小写)。在调用Py_Initialize之前,需要将此函数作为参数传递给PyImport_AppendInittab。在

下面是一个完整的工作程序,它嵌入Python并用您的模块扩展它,然后运行一个使用您的模块的简单程序。在

#include <boost/python.hpp>
#include <iostream>

void api_call()
{
     std::cout << "API call" << std::endl;
}

BOOST_PYTHON_MODULE(API)
{
      boost::python::def("api_call", api_call);
}

int main (int argc, char* argv[])
{
    // Import your module to embedded Python
    PyImport_AppendInittab("API", &initAPI);

    // Initialise Python
    Py_Initialize();

    // Run Python code
    PyRun_SimpleString("import API\n"
                       "API.api_call()\n");

}

相关问题 更多 >

    热门问题