7

我正在尝试在 C++ 中绑定 python3。

使用时:

Py_SetProgramName(argv[0]);

它给出了这个错误:

error C2664: 'Py_SetProgramName' : cannot convert parameter 1 from 'char *' to 'wchar_t *'

即使这就是文档示例的方式显示的方式。

我也试过这个:

Py_SetProgramName((wchar_t*)argv[0]);

但显然这是错误的做法。

那么我该如何解决这个问题,在 C++ 中绑定 Python 3 还有其他好的资源吗?

4

3 回答 3

4

现在从 char 转换为 wchar_t 的官方方法是:

wchar_t *program = Py_DecodeLocale(argv[0], NULL);
Py_SetProgramName(program);

附带说明 mbstowcs 在某些平台上不可靠。

在 c++ 中使用 python2/3 的一个很好的例子是 Panda3D。一个用 python 编写的 c++ 游戏引擎,它还提供了一个 c++ 模块构建器。

于 2018-04-05T09:00:20.907 回答
3

尝试以下操作:

wchar_t progname[FILENAME_MAX + 1];
mbstowcs(progname, argv[0], strlen(argv[0]) + 1);
Py_SetProgramName(progname);

http://www.cplusplus.com/reference/cstdlib/mbstowcs/

于 2013-08-15T08:20:50.803 回答
1

我建议你看看这个问题

Python 3 API 的示例文档似乎尚未从 Python 2 升级 - 您展示的示例就是其中之一(我已经报告了其他一些示例)。

我在这方面没有找到好的文档。即使是著名的 Python 书籍的新版(Python 3),要么很少涉及这个主题,要么存在代码错误(通常是因为代码来自 Py2)。

于 2013-08-15T08:32:35.333 回答