首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++ Builder 2010 (而不是Delphi)应用程序中嵌入Python?

如何在C++ Builder 2010 (而不是Delphi)应用程序中嵌入Python?
EN

Stack Overflow用户
提问于 2020-09-28 10:44:55
回答 2查看 772关注 0票数 1

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

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

我还找到了一些将Python嵌入到C++项目(示例)中的示例,因此我正在尝试这种方法。问题是我连第一个简单的"Hello“示例都无法编译。

以下是我遵循的步骤:

  1. 在C++生成器中创建一个新的控制台应用程序项目
  2. 包括Python.h文件
  3. 编译以下代码:
代码语言:javascript
复制
#pragma hdrstop
#pragma argsused

#ifdef _WIN32
#include <tchar.h>
#else
  typedef char _TCHAR;
  #define _tmain main
#endif

#include <stdio.h>
#include <conio.h>
#include <Python.h>

int main()
{
    PyObject* pInt;

    Py_Initialize();

    PyRun_SimpleString("print('Hello World from Embedded Python!!!')");

    Py_Finalize();

    printf("\nPress any key to exit...\n");
    if(!_getch()) _getch();
    return 0;
}

在编译过程中,我得到以下错误倍数:

bcc32c错误pymath.h(22):声明与使用已在作用域中的声明的目标冲突。

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

代码语言:javascript
复制
#ifndef HAVE_ROUND
extern double round(double);
#endif

我认为这可能是因为编译器和/或pyconfig.h配置。作为C++的初学者和这件事的王者,我很难解决这个问题。

你能帮我吗,你有什么建议吗?

编辑

自2020年4月以来,C++Builder似乎支持Boost库,它可以用于在C++程序中实现Python。所以前面的错误不再出现,相反,我有一个不同的错误。

使用与前面相同的脚本,但使用#include <boost/Python.hpp>,我有一个错误:

ilink32错误致命:无法打开文件‘LIBBOOST_PYTHON38 38-BCB32C-MT-S-x32-1_68.LIB’

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

EN

回答 2

Stack Overflow用户

发布于 2021-03-03 16:53:33

根据Python文档,Borland编译器是受支持的。

因此,目前唯一的方法是恢复使用"Project > Building > C++ Compiler“选项卡中的”经典“。

然后,您需要从安装所提供的dll中创建与OMF兼容的库,并将它们添加到项目中:

代码语言:javascript
复制
implib -aa python3.lib python3.dll
implib -aa python39.lib python39.dll

如果您收到链接器错误:

代码语言:javascript
复制
[ilink32 Error] Error: Unresolved external '__Py_RefTotal' referenced from ...
[ilink32 Error] Error: Unresolved external '__Py_NegativeRefcount' referenced from ...

您需要修改包含文件pyconfig.h:

代码语言:javascript
复制
#ifdef _DEBUG
//#       define Py_DEBUG  <<--- comment this!!
#endif
票数 1
EN

Stack Overflow用户

发布于 2020-10-10 22:34:16

我在C++Builder 10.4和Python4Delphi一起使用。

我安装了:

Python版本3.8.2 (标记/v3.8.2:7b3ab59,2020年2月25日,22:45:29) MSC v.1916 32位(Intel)版本信息。sys.version_info(major=3,minor=8,micro=2,releaselevel='final',serial=0)

安装和测试步骤:

  1. 抢占了Python4Delphi on GitHub (https://github.com/pyscripter/python4delphi)的最新版本。把它解压缩到我的项目文件夹。
  2. 打开Python_D.dproj包项目。
  3. 为Delphi \ C/C++输出文件生成选项设置项目选项,以生成所有C++Builder文件(包括包库)
  4. 构建和安装Delphi4Python组件
  5. 打开Demo1德尔菲项目并对其进行测试,以确保组件和Python都能正常工作。C:\Users\david\Documents\Embarcadero\Studio\Projects\Python4Delphi\python4delphi-master\Demos\Demo01
  6. 创建了一个新的C++Builder VCL应用程序。复制德尔菲Demo01表单中的所有组件。
  7. 为以下3个按钮添加了事件处理程序: 空白//--------------------------------------------------------------------------- TForm2 2::Button1Click(TObject*发件人){ PythonEngine1->ExecStrings(回忆录1->行);} Button2Click( //--------------------------------------------------------------------------- *发件人){ if (OpenDialog1-> __fastcall ()){Memo1->__fastcall->LoadFromFile(OpenDialog1->文件名);} __fastcall TForm2 2::Button3Click(TObject*发件人){ if (SaveDialog1->Execute()) {Memo1->行->SaveToFile( SaveDialog1->FileName );}}
  8. 当被问到头文件和库文件在哪里时,我把它们指向了哪里(您也可以只更新项目的搜索目录)。

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

C:\Users\Public\Documents\Embarcadero\Studio\21.0\Dcp,Python_D.bpi,Python_D.dcp,Python_D.lib

  1. 运行Demo1 C++版本-并且可以放入Python代码并成功地进行测试:D

我将在博客上写一篇文章,在那里我可以放置屏幕截图和源代码链接。

目前还没有安装C++BUilder 2020的地方。我认为您应该能够使用C++Builder附带的Delphi命令行编译器,但是必须尝试--我在不同的机器上有RADStudio10.4和RADStudio10.4.1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64100660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档