无法将“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);
代码摘录:
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);