Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CreateProcess

311
17 апреля 2009 года
plastictown
309 / / 08.01.2006
Чтобы создать процесс взял пример из книжки (Щупак, Win32 API), но при дебаге получаю ошибку "Нарушение прав доступа". Разница только в том, что я вывзываю CreateProcess при обработке WM_LBUTTONDOWN, а в примере при вызове команды меню. Скажите, что не так в коде:

Код:
[SIZE=2]STARTUPINFO si;
static PROCESS_INFORMATION pi;
BOOL success=FALSE;
ZeroMemory( &si, [/SIZE][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][SIZE=2](si) );
si.cb = [/SIZE][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][SIZE=2](si);
success = CreateProcess( NULL, _T("[/SIZE][SIZE=2][COLOR=#a31515]calc.exe" [COLOR=black])[/COLOR][/COLOR][/SIZE][SIZE=2], NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi);
//- - - - - -  - - - -  - - -  --
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
[/SIZE]


Компилятор VC++ Express
Спасибо!
11
17 апреля 2009 года
oxotnik333
2.9K / / 03.08.2007
вот так работает:
Код:
STARTUPINFOA si;
    PROCESS_INFORMATION pi;
    BOOL success=FALSE;
    ZeroMemory( &si, sizeof(si) );
    ZeroMemory( &pi, sizeof(pi) );
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_SHOW;
    success = CreateProcessA( NULL, "calc.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    //- - - - - -  - - - -  - - -  --
    TerminateProcess(pi.hProcess, 0);
7
17 апреля 2009 года
@pixo $oft
3.4K / / 20.09.2006
Могу предположить,что не заполнена структура StartupInfo(ну там какого размера окно показать)…А так больше идей нет.Явно не в том,что ты из WM_LBUTTONDOWN вызываешь обработчик:)
А строкой _T("calc.exe") ты что хотел сделать?



P.S.Попробуй,что будет без отладчика,вживую
311
17 апреля 2009 года
plastictown
309 / / 08.01.2006
Цитата: oxotnik333
вот так работает:
Код:
STARTUPINFOA si;
    PROCESS_INFORMATION pi;
    BOOL success=FALSE;
    ZeroMemory( &si, sizeof(si) );
    ZeroMemory( &pi, sizeof(pi) );
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_SHOW;
    success = CreateProcessA( NULL, "calc.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    //- - - - - -  - - - -  - - -  --
    TerminateProcess(pi.hProcess, 0);




Действительно работает... Спасибо!!!

311
17 апреля 2009 года
plastictown
309 / / 08.01.2006
Цитата: @pixo $oft

А строкой _T("calc.exe") ты что хотел сделать?



Да как-то так вышло, что в VS 2008 и Express не очень получается передать в качестве параметра LPCTSTR "Text". Приходится чудить всякое. Порылся на форуме, в гугле. вроде так делается. По крайней мере, так компилируется :). Если вдруг я не прав, поравьте меня.

P.S.: Без дебага просто закрывается.

7
17 апреля 2009 года
@pixo $oft
3.4K / / 20.09.2006
А насчёт ответа я оказался прав…Разве что оксотник меня немного опередил:)
311
17 апреля 2009 года
plastictown
309 / / 08.01.2006
Цитата: @pixo $oft
А насчёт ответа я оказался прав…Разве что оксотник меня немного опередил:)



Вездесущего оксотника трудно опередить...

3
17 апреля 2009 года
Green
4.8K / / 20.01.2000
Цитата: plastictown
Да как-то так вышло, что в VS 2008 и Express не очень получается передать в качестве параметра LPCTSTR "Text".


Это как? :)
И при чем тут VS 2008 или Express ? :)

311
18 апреля 2009 года
plastictown
309 / / 08.01.2006
Цитата: Green
Это как? :)
И при чем тут VS 2008 или Express ? :)



Я создавал тему в разделе Microsoft Visual C++, связанную с этим вопросом. Вы отправили меня в поиск. Я не уверен, что _T("***") - правильный способ преобразования строки. Хотя он работает. В 6-й студии эти преобразования не нужны были.

3
18 апреля 2009 года
Green
4.8K / / 20.01.2000
Цитата: plastictown
Я создавал тему в разделе Microsoft Visual C++, связанную с этим вопросом. Вы отправили меня в поиск.


Ну и правильно сделали, тема поднимается раз в месяц, и каждый считает, что это просто уникальная проблема.

Цитата: plastictown
Я не уверен, что _T("***") - правильный способ преобразования строки.


А это, вообще, не преобразование. Смотри определение этого макроса.

Цитата: plastictown

Хотя он работает. В 6-й студии эти преобразования не нужны были.


В VC6 по-умолчанию создается проект с multibite string, а в Vc2008 unicode. Никто не мешает тебе изменить настройк проекта.

Советую разобраться, что есть multibite и unicode, что, вообще, такое префикс t, и как определены макросы _T и TEXT.
Это элементарные вещи.

311
18 апреля 2009 года
plastictown
309 / / 08.01.2006
Товарищ, Green! Так гораздо лучше:) Хотя бы торнули пальцем куда смотреть. Спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог