【发布时间】:2020-09-28 10:44:55
【问题描述】:
我正在尝试将 Python 嵌入到适用于 Windows 的 C++Builder 应用程序中。
在对该主题 (example) 进行了多次研究之后,我发现 Python4Delphi 项目看起来非常有趣,并且正是我想要做的。问题是我没有使用 Delphi(我也不想使用它),而只是使用 C++Builder。
我还找到了一些将 Python 嵌入到 C++ 项目中的示例 (example),所以我正在尝试这种方法。问题是我什至无法编译第一个简单的“Hello world”示例。
这是我遵循的步骤:
- 在 C++ builder 中创建一个新的控制台应用程序项目
- 包含 Python.h 文件
- 编译如下代码:
#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 行被编译时,就会发生这种情况:
#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-BCB32C-MT-S-X32-1_68.LIB”
你有解决这个问题的想法吗?
【问题讨论】:
-
“问题是我没有使用 Delphi(我也不想使用它),而只是使用 C++Builder。” - 仅供参考,C ++Builder 包含一个 Delphi 编译器,因此您可以在 C++Builder 项目中使用 Delphi 组件/库。
-
你是对的,Delphi 编译器就在那里。我同意使用 P4D 应该是可能的,但是,我的发行版中没有 Delphi,我什至无法打开“演示”文件来学习如何使用 P4D 并尝试使其与 C++ 项目一起工作(另外,我不完全知道如何在 Delphi 中编写代码)。
-
您无需在 IDE 中打开 Delphi 项目 即可查看它们的源代码。但是,如果您至少不知道如何阅读 Delphi 代码,那么从长远来看,您可能很难在 C++Builder 中取得成功,因为大多数组件、演示、文档等可能应用于 C++Builder 仅针对 Delphi 编写。 C++Builder 与 Delphi 共享通用框架,并具有许多用于 Delphi 兼容性的编译器扩展。因此,对于任何 C++Builder 开发人员来说,至少对 Delphi 有一定的了解是一项相当重要的技能。
标签: python c++ c++builder