开发者

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

开发者 https://www.devze.com 2023-03-05 23:33 出处:网络
hello all i have code from open source project that im integrating into my code . now my code settings in visual studio 2008 character set is Unicode . and the external code is

hello all i have code from open source project that im integrating into my code . now my code settings in visual studio 2008 character set is Unicode . and the external code is Multi-Byte Character Set. when i change the character setting in my application after adding the new source im getting other errors in my code .

so reading from the net i guess i need to make some changes to the external code to support unicode. here is my code :

string 开发者_如何学JAVAFullPathToExe = 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'

im not win32 programmer and this is new to me.

how can i support both developer that are using multi byte and Unicode ?

Thanks for helping


You need to use std::wstring and vector<wchar_t> and prefix your strings and chars with L.


For the first one use vector<wchar_t> instead of vector<char>.
For the second one use L"ERROR: API = %s.\n error code = %d.\n message = %s.\n" instead of "ERROR: API = %s.\n error code = %d.\n message = %s.\n" (note the L at the start.


Do this instead:

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


a) you may undefine UNICODE macro in your project settings

b) You may use ascii versions of functions you called, replace wsprintf with sprintf and CreateProcess with CreateProcessA

0

精彩评论

暂无评论...
验证码 换一张
取 消