无法将“char**”转换为“wchar_t**”

Cannot convert ‘char**’ to ‘wchar_t**’

代码摘录:

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

产生错误信息

error: cannot convert ‘char**’ to ‘wchar_t**’ for argument ‘2’ to ‘void PySys_SetArgv(int, wchar_t**)’

如何转换 argv

参考以下内容link:

how to convert char array to wchar_t array?

你可以写一个转换例程:

#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;
}

此 API 是 python 3.0 及更高版本的一部分,据我所知,没有 easy 方法可以完成此操作。但是,我认为,您可以尝试将 argv 转换为 w_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);
}

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

int wmain(int argc, wchar_t *argv[])
{  
    PySys_SetArgv(argc, argv);