无法将'char **'转换为'wchar_t **'

时间:2015-07-07 14:17:25

标签: c char wchar-t python-bindings

代码摘录:

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

生成错误消息

  

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

如何转换argv

3 个答案:

答案 0 :(得分:2)

请参阅以下链接:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

这个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);
}