Форум программистов, компьютерный форум CyberForum.ru

CreatProcess() и 2012 Студия - C++

Восстановить пароль Регистрация
 
saserlend
10 / 10 / 1
Регистрация: 25.11.2011
Сообщений: 138
02.03.2014, 11:57     CreatProcess() и 2012 Студия #1
Не могу разобраться с типом LPWSTR. В 6.0 работает и не жужжит, а в 12 ругается.
Что такого особенного в 12, и как проще всего решить этот вопрос?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
 
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    
    CreateProcess(NULL, "calc.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    printf("END\n");
}
error C2664: CreateProcessW: невозможно преобразовать параметр 2 из "const char [9]" в "LPWSTR"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2014, 11:57     CreatProcess() и 2012 Студия
Посмотрите здесь:

Студия 2010 C++
Так установилась ли студия? C++
C++ Ух ты мне визуал студия что-то подсказывает
C++ Ошибка со списком, возможно студия тупит
C++ >< студия косячит или я?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14219 / 6234 / 988
Регистрация: 02.05.2013
Сообщений: 10,391
Завершенные тесты: 1
02.03.2014, 12:24     CreatProcess() и 2012 Студия #2
LPWSTR - это Long Pointer to Wide-char STRing, указатель на строку в "широких" символах.
Т.е. там подразумевается использование wchar_t.

В Visual C++, начиная, кажется, то ли с 2003, то ли с 2005, Unicode задействован
по умолчанию и отключать его я крайне не советую (будут кракозябры на других
локализациях Windows, можете сами проверить и убедиться).

Поэтому должно быть не "calc.exe", а L"calc.exe". Это во-первых.

Во-вторых, юникодная версия CreateProcess может изменять аргумент
command line, об этом явно сказано в документации.
Поэтому правильнее так, например:

C
1
2
3
wchar_t pCmdLine[] = {L"calc.exe"};
 
CreateProcess(NULL, pCmdLine, ...
saserlend
10 / 10 / 1
Регистрация: 25.11.2011
Сообщений: 138
02.03.2014, 12:35  [ТС]     CreatProcess() и 2012 Студия #3
А что за 'L' ?
C++
1
wchar_t pCmdLine[] = {L"calc.exe"};
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.03.2014, 12:39     CreatProcess() и 2012 Студия #4
http://habrahabr.ru/post/164193/
Убежденный
Системный программист
 Аватар для Убежденный
14219 / 6234 / 988
Регистрация: 02.05.2013
Сообщений: 10,391
Завершенные тесты: 1
02.03.2014, 12:41     CreatProcess() и 2012 Студия #5
Строковой литерал.
Такой же, как и обычно, только для "широких" символов (2 байта на символ в Win32).
Yandex
Объявления
02.03.2014, 12:41     CreatProcess() и 2012 Студия
Ответ Создать тему
Опции темы

Текущее время: 01:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru