Форум: "Прочее";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];
ВнизКонсоль Найти похожие ветки
← →
Jeyson © (2009-09-01 07:23) [0]нашел у вас код работы с консольным приложение, у меня похожая задача, надо запустить вот такое приложение
#include <ctime>
#include <fstream>
#include <iostream>
using namespace std;
const int n=10;
int a[n];
int b[n];
int main()
{
cout << "Введите число";
int i;
cin >> i;
cout << i;
return 0;
}
но у меня почему то зависает программа, как я понимаю из за того что надо ввести число, но как мне сделать так что бы при запуске перехватывалась строка "Введите число", затем пользователь на форме вводил число и оно передавалось приложению, а затем у приложения брался результать работы с этим числом, в данном случае приложение выводит это же число.
делаю программу на Делфи
заранее всех благодарю
← →
MBo © (2009-09-01 07:59) [1]
program a;
{$APPTYPE CONSOLE}
var
i: Integer;
begin
Writeln("Введите число");
Readln(i);
Writeln("ООО, Das ist fantastisch! какое большое число ты ввел: ", i);
Writeln("Потрогай еще Enter");
Readln;
end.
← →
Jeyson © (2009-09-01 08:05) [2]
> MBo © (01.09.09 07:59) [1]
>
> program a;
> {$APPTYPE CONSOLE}
>
> var
> i: Integer;
> begin
> Writeln("Введите число");
> Readln(i);
> Writeln("ООО, Das ist fantastisch! какое большое число
> ты ввел: ", i);
> Writeln("Потрогай еще Enter");
> Readln;
> end.
Это вы создали консольное приложение в делфи, но я делаю в делфи программу которая запускает консольное приложение и берет то что оно выводит и передает то что она просит
← →
MBo © (2009-09-01 09:11) [3]CreateProcess + пайпы.
из свежего - см. несколько веток mamedovvms
Если пока трудно с этим разбираться, то можно модуль doscommand.pas взять тут:
http://forum.chertenok.ru/viewtopic.php?p=51996
← →
Jeyson © (2009-09-01 09:16) [4]спасибо я смотрел ветку mamedovvms и взял за основу его код, но вот только в чем проблема, если я открываю вот такую консольную программу
#include <ctime>
то моя программа берет вывод консольной то есть выводит "Введите число"
#include <fstream>
#include <iostream>
using namespace std;
const int n=10;
int a[n];
int b[n];
int main()
{
cout << "Введите число";
return 0;
}
а если я открываю вот такую консольную программу#include <ctime>
#include <fstream>
#include <iostream>
using namespace std;
const int n=10;
int a[n];
int b[n];
int main()
{
cout << "Введите число";
int i;
cin >> i;
cout << i;
return 0;
}
то она зависает, я как думаю что она зависает из за того что ждет ввода данных, но мне то надо сначала считать предложение "Введите число" что бы пользовать знал что ему нужно сделать
← →
Mystic © (2009-09-01 12:56) [5]Я когда-то писал такой компонентик
http://mu.webest.net/index.php?action=sources&id=TConsoleIO
Может еще работает :)
← →
Сергей М. © (2009-09-01 13:37) [6]
> я как думаю что она зависает из за того что ждет ввода данных
Она зависает из-за того что буфер пайпа, в который консольный процесс записывает свой вывод, не заполнен. Мамедов наступал именно на эти грабли)
← →
Jeyson © (2009-09-01 14:02) [7]
> Она зависает из-за того что буфер пайпа, в который консольный
> процесс записывает свой вывод, не заполнен. Мамедов наступал
> именно на эти грабли
я взял часть его кода за основу , если не трудно объясните пожалуйста почему не заполнен пайп, хотя на вывод есть текст, и как можно переделать, что бы все нормально могло функционировать
← →
Сергей М. © (2009-09-01 14:13) [8]BOOL CreatePipe(
...
DWORD nSize // number of bytes reserved for pipe
);
..
Parameters
...
nSize
Specifies the buffer size for the pipe. The size is only a suggestion; the system uses the value to calculate an appropriate buffering mechanism. If this parameter is zero, the system uses the default buffer size.
Не указывай зеро, вместо него указывай минимальный размер, достаточный для заполнения буфера первой же выводимой консолью строкой.
← →
Jeyson © (2009-09-01 14:20) [9]> Сергей М.
БОШОЕ спасибо получилось, теперь выводит результат, ладно буду делать дальше для передачи данных
← →
MBo © (2009-09-01 14:21) [10]Зачем ветку сюда перенесли???
← →
Anatoly Podgoretsky © (2009-09-01 14:44) [11]> MBo (01.09.2009 14:21:10) [10]
В других конференцияъ говорят о Дельфи
← →
Jeyson © (2009-09-01 14:44) [12]
> Зачем ветку сюда перенесли???
Я не знаю кто ее перенес.
Вопрос вот какой, я считал результат , что мне надо сделать дальше:
закрыть пайп для чтения , передать в пайп для записи строку которую надо будет передать(в данном случае у меня число), затем закрыть пайп для записи и открыть пайп для чтения???
правильно ли я написал все шаги????
и как правильно открыть пайп например для записи если он раньше был закрыт, просто обратится к нему, ну то есть вот так все будет нормально???
CloseHandle(WritePipe) ;
......
......
s:="2";
WriteFile(WritePipe,Pchar(s)^,length(s),bytesread,nil);
← →
test © (2009-09-01 15:07) [13]MBo © (01.09.09 14:21) [10]
Здесь мастеров больше.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c