Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Вниз

Console redirect   Найти похожие ветки 

 
Rurik   (2002-06-06 12:23) [0]

Как перенаправить вывод консольного приложения в экранный элемент на форме -
например в Memo ?


 
VuDZ   (2002-06-06 12:41) [1]

named pipes


 
Rurik   (2002-06-06 12:48) [2]

что это такое и где искать? есть ли какой примерчик ?


 
Song   (2002-06-06 13:00) [3]

CreatePipe()


 
Rurik   (2002-06-06 13:33) [4]

Вот нашел пример на С++ почти все понятно кроме аналогов на Delphi
1) CloseHandle - при невызове грозят неприятностями
2) аналог их векторов , т.е. как читать из полученного пайпа ?


#include <windows.h>
#include <vector>
using namespace std;

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
// Создаём пайп.
SECURITY_ATTRIBUTES sa;
ZeroMemory(&sa, sizeof(sa));
sa.nLength = sizeof(sa);
sa.bInheritHandle = TRUE;
HANDLE hRead, hWrite;
if(!::CreatePipe(&hRead, &hWrite, &sa, 0))
return 1;
// Создаём процесс, перенаправляя его вывод в наш пайп.
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.hStdOutput = hWrite;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USECOUNTCHARS;
si.dwXCountChars = si.dwYCountChars = 1;
::CreateProcess(
"hello.exe", // или любая другая программа
NULL,
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&si,
&pi);
// Закрываем хэндлы!!! Иначе возможны неприятности.
CloseHandle(hWrite);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
// Читаем из пайпа в std::vector.
// Это можно делать в отдельном потоке, если дочерний процесс
// работает долго.
char temp[255];
vector<char> result;
DWORD dwBytesRead;
while(1)
{
if (!::ReadFile(hRead, temp, 255, &dwBytesRead, NULL) || !dwBytesRead)
break;
result.insert(result.end(), temp, temp+dwBytesRead);
}
CloseHandle(hRead);
// Все байты загружены в вектор result.
// Можно делать с ними что угодно, например, вывести на экран.
result.push_back("\0");
printf(result.begin());
return 0;
}


 
Игорь Шевченко   (2002-06-06 14:37) [5]

vector в данном случае - изврат, IMHO.
Про CloseHandle правильно говорят, по хорошему, их незакрытие может привести к утечке системных ресурсов, если основной процесс живет на машине вечно. Если не вечно, и не делать CloseHandle, то ресурсы будут возвращены системе в момент закрытия как основного, так и порожденного процессов


 
Rurik   (2002-06-06 15:15) [6]

а закрывать(уничтожать) Pipe не нужно ?


 
Игорь Шевченко   (2002-06-06 15:23) [7]

Нет, CloseHandle(hWrite) уже выдан, она закроется и уничтожится по завершению порожденного процесса


 
Rurik   (2002-06-06 17:34) [8]

и все же нельзя ли привести пример как мне прочитать из полученного Pipe ?
функция
res := ReadFile(hRead, aa, 255, dwBytesRead, nil) ;
возвращает всегда False
aa : array[0..255] of char ;


 
Игорь Шевченко   (2002-06-07 10:01) [9]

var FBuffer : Pointer;
xSize : DWORD;

const FBufSize = 65535;

rc := ReadFile (hPipe, FBuffer^, FBufSize, xSize, nil);

Может быть, в этот pipe никто не пишет ?
Что GetLastError говорит ?


 
Rurik   (2002-06-07 11:40) [10]

>Что GetLastError говорит ?
998 - Неверная попытка доступа к адресу памяти



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-35378
Dinara
2002-07-30 21:15
2002.08.12
Как узнать, какие модули уже не используются в программе?


3-35172
voyager_s
2002-07-22 00:56
2002.08.12
Печать таблицы в QReport


1-35335
sdram
2002-07-30 10:47
2002.08.12
Как вернуть код завершения?


14-35467
NailMan
2002-07-16 06:50
2002.08.12
Кастрация сетевой карты


1-35307
Alibaba
2002-07-29 17:21
2002.08.12
StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский