win32 CreateProcess无法将参数2从“char * __ w64”转换为“LPWSTR”错误

时间:2011-05-13 15:22:09

标签: c++ winapi unicode

你好 我有来自开源项目的代码,我已经集成到我的代码中。 现在我在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的开发人员?

感谢您的帮助

4 个答案:

答案 0 :(得分:4)

您需要使用std::wstringvector<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