Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.01;
Скачать: CL | DM;

Вниз

Консоль   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.011 c
4-1221118011
dmitry_12_08_73
2008-09-11 11:26
2009.11.01
Функция GetNextWindow ищет не все окна


15-1251492220
axis_of_evil
2009-08-29 00:43
2009.11.01
> Примечание: Гугль вооооон там =====>


1-1222068508
Decoding
2008-09-22 11:28
2009.11.01
CPL


1-1222101477
RustB
2008-09-22 20:37
2009.11.01
Смена стартовой страницы в браузере по умолчанию


2-1249031312
Nel
2009-07-31 13:08
2009.11.01
Многострочная надпись и иконка на кнопке