如何将Python嵌入C++;Builder2010(非Delphi)应用程序?

如何将Python嵌入C++;Builder2010(非Delphi)应用程序?,python,c++,c++builder,Python,C++,C++builder,我正在尝试将Python嵌入Windows的C++Builder应用程序中 在对这个主题()进行了大量研究之后,我发现Python4Delphi项目似乎非常有趣,这正是我想要做的。问题是,我没有使用Delphi(我也不想使用它),只使用C++Builder 我还发现了一些例子,将Python嵌入C++项目中,因此我正在尝试这个方法。问题是我甚至不能编译第一个简单的“Hello world”示例 以下是我遵循的步骤: < LI>在C++ Builder中创建一个新的控制台应用程序 包括Python

我正在尝试将Python嵌入Windows的C++Builder应用程序中

在对这个主题()进行了大量研究之后,我发现Python4Delphi项目似乎非常有趣,这正是我想要做的。问题是,我没有使用Delphi(我也不想使用它),只使用C++Builder

我还发现了一些例子,将Python嵌入C++项目中,因此我正在尝试这个方法。问题是我甚至不能编译第一个简单的“Hello world”示例

以下是我遵循的步骤:

< LI>在C++ Builder中创建一个新的控制台应用程序
  • 包括Python.h文件
  • 编译以下代码:
  • #pragma hdrstop
    #布拉格语
    #ifdef_WIN32
    #包括
    #否则
    typedef char_TCHAR;
    #在main中定义
    #恩迪夫
    #包括
    #包括
    #包括
    int main()
    {
    PyObject*品脱;
    Py_初始化();
    PyRun_SimpleString(“print('helloworld from Embedded Python!!!'));
    Py_Finalize();
    printf(“\n按任意键退出…\n”);
    如果(!\u getch())\u getch();
    返回0;
    }
    
    在编译过程中,我得到以下错误倍数:

    [bcc32c错误]pymath.h(22):声明与已在范围中使用声明的目标冲突

    例如,当编译
    pymath.h
    中的第22行时,就会发生这种情况:

    #如果NDEF有一轮
    外部双圆(双);
    #恩迪夫
    
    我认为这可能是因为编译器和/或
    pyconfig.h
    配置。作为C++初学者和这类事物的初学者,我很难解决这个问题。 你能帮帮我吗,你有什么建议吗

    编辑

    2020年4月以来,C++ Builder支持Boost库,可以用于在C++程序中实现Python。因此,前面的错误不再出现,而是我有一个不同的错误

    使用与前面相同的脚本,但使用
    #include
    ,我有一个错误:

    [ilink32错误]致命:无法打开文件“LIBBOOST_PYTHON38-BCB32C-MT-S-X32-1_68.LIB”


    你有办法解决这个问题吗?

    我使用C++Builder 10.4和Python4Delphi

    我已安装Python for Windows:

    Python版本 3.8.2(tags/v3.8.2:7B3ab592020年2月25日22:45:29)[MSC v.1916 32位(英特尔)] 版本信息。 系统版本信息(主版本=3,次版本=8,微版本=2,最终版本=0)

    安装和测试的步骤:

  • 在GitHub()上获取了最新版本的Python4Delphi。将其解压缩到“我的项目”文件夹

  • 打开Python_D.dproj包项目

  • 设置Delphi编译器| C/C++输出文件生成选项的项目选项,以生成所有C++Builder文件(包括包库)

  • 构建并安装Delphi4Python组件

  • 打开Demo1 Delphi项目并对其进行测试,以确保组件和Python正常工作。C:\Users\david\Documents\Embarcadero\Studio\Projects\Python4Delphi\Python4Delphi master\Demos\Demo01

  • 创建了一个新的C++Builder VCL应用程序。从Delphi Demo01表单复制了所有组件

  • 为3个按钮添加了事件处理程序:

    void\uu fastcall TForm2::button1单击(TObject*Sender) { PythonEngine1->ExecStrings(Memo1->line); } //---------------------------------------------------------------------------

    void\uu fastcall TForm2::Button2Click(TObject*发送方) { if(OpenDialog1->Execute()){ Memo1->Lines->LoadFromFile(OpenDialog1->FileName); } } //---------------------------------------------------------------------------

    void\uu fastcall TForm2::Button3Click(TObject*发送方) { 如果(SaveDialog1->Execute()){ 备忘录1->行->保存文件(保存对话框1->文件名); } }

  • 做一个项目-当被问到头文件和lib文件在哪里时,我将它们指向(你也可以只更新项目的搜索目录)

  • PythonEngine.hpp-C:\Users\david\Documents\Embarcadero\Studio\Projects\Python4Delphi\Python4Delphi master\Source

    Python\u D.bpi、Python\u D.dcp、Python\u D.lib-C:\Users\Public\Documents\Embarcadero\Studio\21.0\dcp

  • 运行DeMO1C++版本,并可以成功地放入Python脚本代码并进行测试:D
  • 我将写一篇博客文章,在那里我可以放屏幕截图和源代码链接


    目前还没有在任何地方安装C++BUilder 2020。我认为您应该能够使用C++Builder附带的Delphi命令行编译器,但必须尝试一下——我在不同的机器上使用了RAD Studio 10.4和RAD Studio 10.4.1。

    我使用了C++Builder 10.4和Python4Delphi

    我已安装Python for Windows:

    Python版本 3.8.2(tags/v3.8.2:7B3ab592020年2月25日22:45:29)[MSC v.1916 32位(英特尔)] 版本信息。 系统版本信息(主版本=3,次版本=8,微版本=2,最终版本=0)

    安装和测试的步骤:

  • 在GitHub()上获取了最新版本的Python4Delphi。将其解压缩到“我的项目”文件夹

  • 打开Python_D.dproj包项目

  • 设置Delphi编译器| C/C++输出文件生成选项的项目选项,以生成所有C++Builder文件(包括包库)

  • 构建并安装Delphi4Python组件

  • 打开Demo1 Delphi项目并对其进行测试,以确保组件和Python正常工作。C:\Users\david\Documents\Embarcadero\Studio\Projects\Python4Delphi\Python4Delphi master\Demos\Demo01

  • 创建了一个新的C++Builder VCL应用程序。从Delphi Demo01表单复制了所有组件

  • 为3个按钮添加了事件处理程序:

    void\uu fastcall TForm2::button1单击(TObject*Sender) { PythonEngine1->ExecStrings(Memo1->line); } //---------------------------------------------------------------------------<
    implib -aa python3.lib python3.dll
    implib -aa python39.lib python39.dll
    
    [ilink32 Error] Error: Unresolved external '__Py_RefTotal' referenced from ...
    [ilink32 Error] Error: Unresolved external '__Py_NegativeRefcount' referenced from ...
    
    #ifdef _DEBUG
    //#       define Py_DEBUG  <<--- comment this!!
    #endif