win32 CreateProcess не может преобразовать параметр 2 из 'char * __ w64' в ошибку 'LPWSTR' - PullRequest
1 голос
/ 13 мая 2011

Привет всем, у меня есть код из проекта с открытым исходным кодом, который я интегрирую в мой код.теперь мои настройки кода в Visual Studio 2008 - 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 ]

4 голосов
/ 13 мая 2011

Вам нужно использовать std::wstring и vector<wchar_t> и добавлять префиксы к строкам и символам с помощью L.

3 голосов
/ 13 мая 2011

Для первого используйте 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 в начале.

1 голос
/ 13 мая 2011

Сделайте это вместо:

wstring FullPathToExe = "c:\\foo\\boo.exe";
    if (!CreateProcess(NULL,
                     FullPathToExe.c_str(),
                    NULL,
                    NULL,
                    TRUE,
                    0,
                    NULL,
                    NULL,
                    &si,
                    &pi))
0 голосов
/ 13 мая 2011

а) вы можете отменить определение UNICODE макроса в настройках вашего проекта

b) Вы можете использовать ascii версии функций, которые вы вызвали, заменить wsprintf на sprintf и CreateProcess на CreateProcessA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...