Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2011, 16:48   #1
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию Не создается процесс

В общем проблема вселенского маштаба. Не создается процесс. Как ни крути всегда возвращает false. Создаю так
Код:
PROCESS_INFORMATION piProcInfo;
 STARTUPINFO siStartInfo;
 char *cmdline = new char[strlen(ExeName)+strlen(CommandLine)+2];

 strcpy(cmdline,ExeName);
 strcat(cmdline," ");
 strcat(cmdline,CommandLine);
 // Set up members of STARTUPINFO structure.
 ZeroMemory(&siStartInfo, sizeof(siStartInfo));
 siStartInfo.cb = sizeof(siStartInfo);

 siStartInfo.hStdInput =StdIn;
 //siStartInfo.hStdInput =GetStdHandle(STD_INPUT_HANDLE); 
 siStartInfo.hStdOutput = StdOut;
 //siStartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
 
 siStartInfo.dwFlags = STARTF_USESTDHANDLES;
 // Create the child process.
bool bRes = CreateProcess(NULL,
                      (LPWSTR)cmdline,       // command line
                      NULL,          // process security attributes
                      NULL,          // primary thread security attributes
                      true,          // handles are inherited
                      0,             // creation flags
                      NULL,          // use parent's environment
                      NULL,          // use parent's current directory
                      &siStartInfo,  // STARTUPINFO pointer
                      &piProcInfo);  // receives PROCESS_INFORMATION
 delete cmdline;
 return bRes;
В чем ошибка??? Помогите. Среда Viual Studio 2010
alexprey вне форума Ответить с цитированием
Старый 14.09.2011, 17:01   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вижу две ошибки:
1)вы конвертите char* в wchar_t*, а это разные вещи.
надо было тогда использовать широкие строки wchar_t*(соответственно литеры L"Я широкая строчка!")
либо указывать явно CreateProcessA
либо в настройках проекта отключить юникод по умолчанию.

не спроста же(я так думаю) вам компилятор сначало заявлял о несовместимости типов char* и LPWSTR, судя по всему от этого вы и впихнули приведение типов.

2)не правильно удаляете cmdline
надо: delete[] cmdline;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.09.2011, 17:17   #3
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

C++ начал изучать недавно. Код взял с какого то сайта. Добавил только LPWSTR.
Не очень понял как заменить строчку.
wchar_t *cmdline;
cmdline* = ExeName* + L" "+CommandLine*;
Выдает синтаксическую ошибку
alexprey вне форума Ответить с цитированием
Старый 14.09.2011, 17:22   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а кто разрешил складывать строки?

wcscat если не ошибаюсь(параметр тоже юникодный нужен тогда)
и если консоль, то wcin,wcout для таких строк.

кстати вот инфа(чтоб не дублировать)
http://programmersforum.ru/showthrea...hlight=Unicode
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.09.2011, 17:37   #5
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

Ура. Заработало. Спасибо огромное!!!!
alexprey вне форума Ответить с цитированием
Старый 14.09.2011, 17:39   #6
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

А как отключить юникод в проекте?
alexprey вне форума Ответить с цитированием
Старый 14.09.2011, 17:48   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

свойства проекта->С++ ->Общие->используемый набор символов.
помоему так, я с юникодом работаю, (либо явно указываю версию функций), потому как то и забыл..
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не создается TComboBox Alex Cones Общие вопросы Delphi 5 02.06.2010 17:00
Не создается диалог -CrAzYMaN- Общие вопросы C/C++ 4 23.11.2009 11:06
при setsid() создается лишний процесс z-s Общие вопросы C/C++ 0 02.10.2009 01:30
не создается socket() isPolin C/C++ Сетевое программирование 2 24.06.2009 14:41
Кнопка не создается Манжосов Денис :) Компоненты Delphi 10 28.04.2008 17:43