2

代码摘录:

int main(int argc, char *argv[]){  
    PySys_SetArgv(argc, argv);

产生错误信息

错误:无法将参数 '2' 的 'char**' 转换为 'wchar_t**' 到 'void PySys_SetArgv(int, wchar_t**)'</p>

我该如何转换argv

4

3 回答 3

3

您可以查看您的编译器是否支持wmain。如果是这样,您可以替换main为:

int wmain(int argc, wchar_t *argv[])
{  
    PySys_SetArgv(argc, argv);
于 2015-07-07T15:59:00.463 回答
2

请参考以下链接:

如何将 char 数组转换为 wchar_t 数组?

您可以编写一个转换例程:

#include <iostream>
#include <stdlib.h>
#include <string>

using namespace std;
using namespace System;


int main(int argc, char* argv[])
{
    char *orig = "Hello, World!";
    cout << orig << " (char *)" << endl;

    // Convert to a wchar_t*
    size_t origsize = strlen(orig) + 1;
    const size_t newsize = 100;
    size_t convertedChars = 0;
    wchar_t wcstring[newsize];
    mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);
    wcscat_s(wcstring, L" (wchar_t *)");
    wcout << wcstring << endl;
}
于 2015-07-07T14:28:02.923 回答
1

这个 API 是 python 3.0 及更高版本的一部分,据我所知,没有简单的方法可以完成这项工作。但是,我认为,您可以尝试将 转换argv为 aw_char **然后调用PySys_SetArgv()mbstowcs()在这种情况下可能会派上用场。

例如,一些伪代码(未经测试)看起来像

wchar_t **changed_argv;

changed_argv = malloc((argc)* sizeof*changed_argv);

for (int i = 0; i < argc, i++)
{
    changed_argv[i] = malloc(strlen(argv[i]) + 1);
    mbstowcs(changed_argv[i], argv[i], strlen(argv[i]) + 1);
}
于 2015-07-07T14:29:55.420 回答