【问题标题】:win32 CreateProcess cannot convert parameter 2 from 'char *__w64 ' to 'LPWSTR' errorwin32 CreateProcess 无法将参数 2 从 'char *__w64' 转换为 'LPWSTR' 错误
【发布时间】:2011-08-25 01:07:51
【问题描述】:

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

感谢您的帮助

【问题讨论】:

  • pszAPI 从何而来?将其从问题中删除,以便您可以将其作为新问题重新发布。

标签: c++ winapi unicode


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    对于第一个使用 vector&lt;wchar_t&gt; 而不是 vector&lt;char&gt;
    对于第二个,使用 L"ERROR: API = %s.\n error code = %d.\n message = %s.\n" 而不是 "ERROR: API = %s.\n error code = %d.\n message = %s.\n"(注意开头的 L

    【讨论】:

    • 第一个问题已解决,但第二个问题仍然给我错误:错误 C2664: 'wsprintfW' : cannot convert parameter 1 from 'CHAR [512]' to 'LPWSTR' ,它的 CHAR szPrintBuffer [512];那是有问题的
    • 请改用wchar_t szPrintBuffer[512]
    【解决方案3】:

    您需要使用 std::wstringvector&lt;wchar_t&gt; 并在字符串和字符前加上 L。

    【讨论】:

      【解决方案4】:

      改为这样做:

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

      【讨论】:

      • @Dani,如果FullPathToExewstring
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 2021-03-01
      相关资源
      最近更新 更多