|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Фев 3, 2004 23:54:21 Сабж. Кажется такое делает RadAsm при компиляции, вобщем примеры в исходниках приветствуются или дельные подсказки. |
|
|
Дата: Фев 4, 2004 00:13:04 Iczelion прятал консоль и подсовывал ей пайп в 21 уроке. |
|
|
Дата: Фев 4, 2004 00:17:11 · Поправил: Asterix Спасибо, это то что нужно! Гы, я сам оказывается Ицзелиона не читаю :-))) |
|
|
Дата: Фев 23, 2004 21:00:57 Asterix А у тебя уже есть готовый пример. У Iczelion'а, как всегда, есть небольшие недочёты в коде :-) Зато в примере xpolis показан более правильный подход. |
|
|
Дата: Фев 24, 2004 18:41:35 А Икзелион что-то толи недоделал, то ли я не понимаю, но у меня появляется под Windows 2000 Pro такое сообщение: "Error During Process Creation". Очень долго занимаюсь с этой проблемой, может быть исходником рабочим поделитесь? |
|
|
Дата: Фев 24, 2004 22:32:29 Может быть просто ссылку кто-нибудь кинет? |
|
|
Дата: Фев 25, 2004 03:04:56 1990 А Икзелион что-то толи недоделал Во-во. Про пайпы книги писаны, т.е. тема эта не настолько тривиальна как Iczelion её преподносит в своём туториале. Вообще, наиболее правильное решение зависит от конкретного консольного приложения. Во многих случаях следует читать/писать в пайп асинхронно. Также рекомендуется запрещать наследование неиспользуемого конца анонимного пайпа через DuplicateHandle. Мой исходник очень узкоспециализирован и врядли Вам поможет. Ссылки можно найти в поисковике, но для C/C++. Error During Process Creation Тогда проблема скорее не в пайпе, а в CreateProcess |
|
|
Дата: Фев 26, 2004 09:45:54 Quantum Буду искать в чём трабла. |
|
|
Дата: Фев 26, 2004 11:43:10 · Поправил: rst
LockSelf();
string rv="";
STARTUPINFO si={0};
PROCESS_INFORMATION pi={0};
si.cb=sizeof(STARTUPINFO);
HANDLE hStdIn;
HANDLE hStdOut;
SECURITY_ATTRIBUTES saAttr;
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
BOOL br = CreatePipe(&hStdIn,&hStdOut,&saAttr,10);
si.hStdError=hStdOut;
si.hStdInput=hStdIn;
si.hStdOutput=hStdOut;
si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
CreateProcess(apg_path.c_str()," -n 1",0,0,TRUE,0,0,0,&si,?);
while (true)
{
DWORD dwWaitResult;
dwWaitResult=WaitForSingleObject(pi.hProcess,0);
if (dwWaitResult!=WAIT_TIMEOUT )
{
break;
}
DWORD dwDataSz=GetFileSize(hStdIn,NULL);
if (dwDataSz)
{
char * buff=new char[dwDataSz];
DWORD cbRead=0;
ReadFile(hStdIn,buff,dwDataSz,&cbRead,0);
if (cbRead)
{
buff[cbRead-2]='\0';
rv+=buff;
}
delete [] buff;
}
Sleep(1);
}
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(hStdIn);
CloseHandle(hStdOut);
UnLockSelf();
return rv;
|
|
|
Дата: Фев 27, 2004 11:16:14 rst Thx! Попробую. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.041 |