Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633

Как записать правильно ReadFile

21.08.2009, 13:39. Показов 4758. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
procedure TForm1.Button1Click(Sender: TObject);
var ZapisanoBytes : Cardinal;
    readpipe,writepipe: Thandle;
    Security: TSecurityAttributes;
    str:string;
    start: TStartUpInfo;
    ProcessInfo: TProcessInformation;
 
begin
 
with Security do
  begin
    nlength := SizeOf(TSecurityAttributes);
    binherithandle := true;
    lpsecuritydescriptor := nil;
  end;
if CreatePipe(readPipe,writepipe,@Security,0) then
 begin
    FillChar(Start, Sizeof(Start), #0);
    start.cb := SizeOf(start);
    start.hStdOutput := WritePipe;
    start.hStdInput := ReadPipe;
    start.dwFlags := STARTF_USESTDHANDLES +
    STARTF_USESHOWWINDOW;
    start.wShowWindow := SW_show;
 
 end;
 ShowMessage('da');
if CreateProcess(nil,
      'c:\cons.exe',
      @Security,
      @Security,
      true,
      NORMAL_PRIORITY_CLASS,
      nil,
      nil,
      start,
      ProcessInfo) then
    begin
 
      ShowMessage('da2');
      ReadFile(readpipe, str, Length(str), ZapisanoBytes, Nil);
      Memo1.Text:=str;
      CloseHandle(ProcessInfo.hProcess);
      CloseHandle(ProcessInfo.hThread);
      CloseHandle(ReadPipe);
      CloseHandle(WritePipe);
    end;
 
end;
есть такой код, смысл в том что создаются каналы, запускается приложение , и надо считать результат работы приложения, но вот не задача как правильно записать вот эту строку
Delphi
1
ReadFile(readpipe, str, Length(str), ZapisanoBytes, Nil);
, я ее как то не так записал

Добавлено через 3 часа 3 минуты 19 секунд
неужели никто не сталкивался с подобным???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.08.2009, 13:39
Ответы с готовыми решениями:

как правильно записать?
Здравствуйте я новичек в delphi поэтому и вопрос у меня как у новичка:) подскажите как правильно записать? begin ...

Как правильно записать?
Как правильно записать код: procedure TForm1.Button7Click(Sender: TObject); var n, q, w: string; begin q:= Form1.Edit2.Text; ...

Как правильно записать
На форме есть 6 checkbox. В каждом checkbox если checked выводим в memo строку , например - checkbox1 для checkbox1 ,checkbox2 для...

4
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
21.08.2009, 15:03
Сначало надо установить размер буфера - SetLength(str, 999);, а сам буфер при этом будет не str (так как string - это указатель на структуру данных - кроме самой строки там ещё по отрицательному смещению длина строки и количество ссылок), а str[1].
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
21.08.2009, 23:36
Delphi
1
ReadFile(readpipe, str, Length(str), ZapisanoBytes, Nil);
Все зависит от того на какой версии Дельфи ты компилишь данный код, если на ANSI, то один символ = один байт, если на Unicode, то один символ - два байта. Функция Length возвращает, кол-во в символах, а ReadFile() нужно третьим параметром кол-во в байтах байт.
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
24.08.2009, 10:29  [ТС]
что я только не делал не получается ничего, может как то не так делаю, или может просто нельзя сделать так что бы программу написанную например на pascal можно было бы запустить и получить результат ее работы, код указан выше изменения которые надо было сделать то есть setlength(str,999); я сделал но все равно ничего не получается
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
25.08.2009, 13:13
CreatePipe создаёт один пайп, информацию через него можно передавать в одну сторону. Read и Write хэндлы - это два его конца. Если нужно передавать ввод в прогу и брать вывод из неё, то нужно два пайпа, а так получается, что прога выводит в свой же ввод или ещё что-то нехорошее. Кроме того, здесь получается, что ReadFile читает только то, что прога успела вывести в самом начале работы. Если надо читать весь вывод, нужно подождать, пока процесс не завершится (WaitForSingleObject/MsgWaitForMultipleObjects), а потом читать. Или читать сразу, но в цикле, до тех пор, пока процесс не завершится (GetExitCodeProcess).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.08.2009, 13:13
Помогаю со студенческими работами здесь

Как правильно записать?
всем привет! Хочу создать программу типо поисковик ( будет искать в инете всё для телефона). Но только не могу правильно записать...

Как правильно записать Random ?
Условие такое, что должен использоваться Random, но диапазон дан не целыми числами... Данные : (5,2 ; 33,67] Попытка записать, но это...

Как правильно записать выражение?
x^2+4x-5/x^9

Как правильно записать выражение?
tg(e)+(y^3)+3

Как правильно записать выражение?
lg(2^x)+|x|+1


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru