Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1252088993
Гость
2009-09-04 22:29
2009.11.01
Подскажите Эксперт для Дельфи


15-1251906031
AlexDan
2009-09-02 19:40
2009.11.01
вроде биос пикает..


15-1251715556
Kolan
2009-08-31 14:45
2009.11.01
Компонент Линия


2-1252341586
fics)
2009-09-07 20:39
2009.11.01
Вопрос по копмонентам


3-1229263633
Впервые
2008-12-14 17:07
2009.11.01
Сортировка в БД





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский