Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
[C++] а чего ты ожидал? 26.05.01 17:37 Число просмотров: 826
Автор: kabanchik Статус: Незарегистрированный пользователь
|
> короче создай прогу только с функцией main() и там пропиши > такие строки > #include <Windows.h> > #include <Winbase.h> > > а потом в проге дальше > if(CreateProcess(0,0,0,0,true,CREATE_NEW_CONSOLE,0,0,0,0)) > { > std::cout<<"OK"; > } > else > { > std::cout<<GetLastError(); > }
Тут и создавать нечего, сразу видно. Короче вот описание ф-ии CreateProcess:
BOOL CreateProcess(
LPCTSTR lpApplicationName, // name of executable module
LPTSTR lpCommandLine, // command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
BOOL bInheritHandles, // handle inheritance option
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCTSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFO lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInformation // process information
);
Значит так, если lpApplicationName == NULL, то в переменной lpCommandLine = / имя ЕХЕ файла / + / аргументы /
если lpCommandLine == NULL, то наоборот
и еще, если процесс 16-битный, то lpApplicationName == NULL, а lpCommandLine = ЕХЕ + аргументы
так что следует указать имя исполняемого модуля. исполнять то нечего, модуля нет, вот он и возвращает ошибку.
А может тебе не процесс а поток нужен? тогда и доступ будет свободный и асинхронность исполнения будет. все таки Win32 отличается от UNIX-a. тут ф-ии fork() нет.
А почему 98 его запустил - этого я не могу сказать, все таки я с ним мало работал. Хотя по логике, если просесс (как ты говоришь) создается, то он долго не держется, т.е. он сразу должен закончить работу.
|
<programming>
|
[C++] Конкретно для кабанчика.... 8-))) 26.05.01 16:13
Автор: Drongo Статус: Незарегистрированный пользователь
|
Значит так, уважая твою просьбу.... 8-)) Сразу говорю - ниче конкретного сказать не могу поскольку сам не понимаю, предположение:
2000-ая, типа винда с супер-пупер виртуальной памятью, как я понял, то Билли решил создать защищенную систему для ламеров, отсюда - невозможность свободной записи в память, то есть новая прога коли она запускается из другой проги создана быть не могеть.... коли хошь, могешь в МСДНе глянуть ошибку.... блин, глючит нехорошая студия..... 8-((
короче создай прогу только с функцией main() и там пропиши такие строки
#include <Windows.h>
#include <Winbase.h>
а потом в проге дальше
if(CreateProcess(0,0,0,0,true,CREATE_NEW_CONSOLE,0,0,0,0))
{
std::cout<<"OK";
}
else
{
std::cout<<GetLastError();
}
и всю эту ерунду попробуй откомпилить под W'2k...
предупреждаю сразу, 98-ая глотнет ее без траблов... 8-))
кстати SP1 только усугубляет положение, он выбрасывает прогу вшо до того как она ошибку прописала....
Коли чего раскопаешь, то пиши, буду оч признателен... 8-))
|
|
Где лежат такие 98е? 26.05.01 17:53
Автор: пупс Статус: Незарегистрированный пользователь
|
GetLastError() возвращает ERROR_INVALID_PARAMETER естессно.
|
|
[C++] а чего ты ожидал? 26.05.01 17:37
Автор: kabanchik Статус: Незарегистрированный пользователь
|
> короче создай прогу только с функцией main() и там пропиши > такие строки > #include <Windows.h> > #include <Winbase.h> > > а потом в проге дальше > if(CreateProcess(0,0,0,0,true,CREATE_NEW_CONSOLE,0,0,0,0)) > { > std::cout<<"OK"; > } > else > { > std::cout<<GetLastError(); > }
Тут и создавать нечего, сразу видно. Короче вот описание ф-ии CreateProcess:
BOOL CreateProcess(
LPCTSTR lpApplicationName, // name of executable module
LPTSTR lpCommandLine, // command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
BOOL bInheritHandles, // handle inheritance option
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCTSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFO lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInformation // process information
);
Значит так, если lpApplicationName == NULL, то в переменной lpCommandLine = / имя ЕХЕ файла / + / аргументы /
если lpCommandLine == NULL, то наоборот
и еще, если процесс 16-битный, то lpApplicationName == NULL, а lpCommandLine = ЕХЕ + аргументы
так что следует указать имя исполняемого модуля. исполнять то нечего, модуля нет, вот он и возвращает ошибку.
А может тебе не процесс а поток нужен? тогда и доступ будет свободный и асинхронность исполнения будет. все таки Win32 отличается от UNIX-a. тут ф-ии fork() нет.
А почему 98 его запустил - этого я не могу сказать, все таки я с ним мало работал. Хотя по логике, если просесс (как ты говоришь) создается, то он долго не держется, т.е. он сразу должен закончить работу.
|
|
|