C++的In Pyththon集成示例代码?

2024-05-20 18:46:59 发布

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

< >我想找一个<强> >简单><强> >示例代码,用于< C++ > IrPython集成<强>,即在C++中嵌入Python代码,或者更好地,VisualC++程序。在

示例代码应该包括:如何在语言之间共享对象,如何来回调用函数\方法等。。。在

另外,显式的设置过程也会有帮助。(如何在visualstudio中包含Python运行时dll…)

我找到了一个很好的例子,用于C语言\ iRyPython here,但是找不到C++ + iRyPython示例代码。在


Tags: 对象方法代码程序语言示例here过程
2条回答

如果不需要.NET功能,可以依赖于嵌入Python而不是IronPython。有关更多信息和示例,请参阅Python的文档Embedding Python in Another Application。如果您不介意依赖BOOST,您可以试试它的Python integration library。在

更新-我写了一个更通用的例子(加上一个指向包含整个VS2008项目的zip文件的链接)作为我博客上的条目here.

对不起,我玩得太晚了,但这里是我如何将IrPython集成到VisualStudio 2008 .NET 3.5中的C++应用程序中。(实际上C/C++混合模式应用程序)

我为用汇编编写的地图制作应用程序编写附加组件。API被暴露,因此可以编写C/C++附加组件。我将C/C++与C++和CLI混合。本例中的一些元素来自API(例如XPCALL和CmdEnd()-请忽略它们)

///////////////////////////////////////////////////////////////////////
void XPCALL PythonCmd2(int Result, int Result1, int Result2) 
{
  if(Result==X_OK)
  {
        try
        {
              String^ filename = gcnew String(txtFileName);
              String^ path = Assembly::GetExecutingAssembly()->Location;
              ScriptEngine^ engine = Python::CreateEngine();
              ScriptScope^ scope = engine->CreateScope();
              ScriptSource^ source = engine->CreateScriptSourceFromFile(String::Concat(Path::GetDirectoryName(path), "\\scripts\\", filename + ".py"));

              scope->SetVariable("DrawingList", DynamicHelpers::GetPythonTypeFromType(AddIn::DrawingList::typeid));
              scope->SetVariable("DrawingElement", DynamicHelpers::GetPythonTypeFromType(AddIn::DrawingElement::typeid));
              scope->SetVariable("DrawingPath", DynamicHelpers::GetPythonTypeFromType(AddIn::DrawingPath::typeid));
              scope->SetVariable("Node", DynamicHelpers::GetPythonTypeFromType(AddIn::Node::typeid));

              source->Execute(scope);
        }
        catch(Exception ^e)
        {
              Console::WriteLine(e->ToString());
              CmdEnd();
        }
  }
  else
  {
        CmdEnd();
  }
}
///////////////////////////////////////////////////////////////////////////////

如您所见,我向IronPython公开了一些对象(DrawingList、DrawingElement、DrawingPath和Node)。这些对象是我创建的C++对象,它们将“事物”暴露给了iRyPython。在

当C++调用/CLI源-gt;执行(范围)行时,唯一的Python线 跑步是图纸列表.RequestData. 在

RequestData接受委托和数据类型。在

当C++执行CLI代码时,它调用指向 函数“diamond”

在函数diamond中,它通过调用 DrawingList.RequestedValue()呼叫图纸清单.附录(dp)添加 应用程序可视化数据库的新元素。在

最后是DrawingList.EndCommand()告诉FastCAD引擎 清理并结束插件的运行。在

^{pr2}$

我希望这就是你想要的。在

相关问题 更多 >