win32 创建进程无法将参数 2 从'char *__w64 '转换为'LPWSTR'错误

win32 CreateProcess cannot convert parameter 2 from 'char *__w64 ' to 'LPWSTR' error

本文关键字:w64 转换 错误 LPWSTR char 创建 参数 进程 win32      更新时间:2023-10-16

hello all我有来自开源项目的代码,IM 集成到我的代码中。现在我在Visual Studio 2008字符集中的代码设置是Unicode。并且外部代码是多字节字符集。 添加新源后更改应用程序中的字符设置时我在我的代码中遇到其他错误.
所以从网上阅读我想我需要对外部代码进行一些更改以支持 Unicode。这是我的代码:

string FullPathToExe = c:\foo\boo.exe;
vector<char> str2(FullPathToExe.begin(), FullPathToExe.end());
    str2.push_back('');
    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 的开发人员?

感谢您的帮助

您需要

使用 std::wstringvector<wchar_t> 并在字符串和字符前面加上 L 前缀。

对于第一个,请使用 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

改为执行以下操作:

wstring FullPathToExe = "c:\foo\boo.exe";
    if (!CreateProcess(NULL,
                     FullPathToExe.c_str(),
                    NULL,
                    NULL,
                    TRUE,
                    0,
                    NULL,
                    NULL,
                    &si,
                    &pi))

a) 您可以在项目设置中取消定义 UNICODE 宏

b) 您可以使用您调用的函数的 ASCII 版本,将 wsprintf 替换为 sprintf,将 CreateProcess 替换为 CreateProcessA