2011-05-13 89 views
1

hello全部 我有来自开源项目的代码,即将集成到我的代码中。 现在我在Visual Studio 2008字符集中的代码设置是Unicode。并且外部代码是 多字节字符集。当我在添加新源代码后在我的应用程序中更改字符设置时,我的代码中出现其他错误。
所以从网上读取我想我需要对外部代码进行一些更改以支持unicode。 这里是我的代码:win32 CreateProcess无法将参数2从'char * __ w64'转换为'LPWSTR'错误

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

pszAPI从哪里来?从问题中删除这个,所以你可以重新发布它作为一个新的问题。 – ralphtheninja 2011-05-13 15:27:04

回答

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起步。

+0

第一个问题已修复,但第二个问题仍然给我错误:错误C2664:'wsprintfW':无法将参数1从'CHAR [512]'转换为'LPWSTR',其CHAR szPrintBuffer [512];那就是有问题的那个 – user63898 2011-05-14 04:25:34

+0

而不是使用'wchar_t szPrintBuffer [512]'。 – Dani 2011-05-14 09:12:02

1

而是执行此操作:

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

这不行,'FullPathToExe.c_str()'不是宽字符串 – Dani 2011-05-13 15:26:22

+0

@Dani:谢谢。编辑。 – ralphtheninja 2011-05-13 15:29:26

+0

@Dani,这是'FullPathToExe'是'wstring'。 – 2011-05-13 15:30:25

4

您需要使用std::wstringvector<wchar_t>和前缀字符串的字符,并用L.

0

a)您可能取消定义UNICODE宏在您的项目设置

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

相关问题