你好 我有来自开源项目的代码,我已经集成到我的代码中。 现在我在visual studio 2008字符集中的代码设置是Unicode。而外部代码是 多字节字符集。当我在添加新源后更改我的应用程序中的字符设置时 我在我的代码中得到其他错误 所以从网上读取我想我需要对外部代码进行一些更改以支持unicode。 这是我的代码:
string FullPathToExe = c:\\foo\\boo.exe;
vector<char> str2(FullPathToExe.begin(), FullPathToExe.end());
str2.push_back('\0');
if (!CreateProcess(NULL,
&str2[0],
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&si,
&pi))
and the error is :
: error C2664: 'CreateProcessW' : cannot convert parameter 2 from 'char *__w64 '
to 'LPWSTR'
我不是win32程序员,这对我来说是新的。
我如何支持使用多字节和Unicode的开发人员?
感谢您的帮助
答案 0 :(得分:4)
您需要使用std::wstring
和vector<wchar_t>
并在字符串和字符前加上L。
答案 1 :(得分:3)
对于第一个使用vector<wchar_t>
而不是vector<char>
对于第二个使用L"ERROR: API = %s.\n error code = %d.\n message = %s.\n"
而不是"ERROR: API = %s.\n error code = %d.\n message = %s.\n"
(请注意开头的L
。
答案 2 :(得分:1)
请改为:
wstring FullPathToExe = "c:\\foo\\boo.exe";
if (!CreateProcess(NULL,
FullPathToExe.c_str(),
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&si,
&pi))
答案 3 :(得分:0)
a)您可以在项目设置中取消定义UNICODE宏
b)您可以使用您调用的函数的ascii版本,将wsprintf替换为sprintf,将CreateProcess替换为CreateProcessA