![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить результат выполнения команды консоли? [D7, 2003]
Vyacheslav © (2011-11-26 05:03:00)Здравствуйте.
Хотелось бы не просто запустить консольное приложение на выполнение, например:
dir:=ExtractFilePath(ParamStr(0))+'ffmpeg.exe';
params:=' -i test.flv';
ShellExecute(Handle, PWideChar('open'), PWideChar(dir), Pwidechar(params), PWideChar(''), SW_SHOW);
но и получить результат работы консоли, например в TMemo..
Может кто-то подскажет как это реализовать?
Anatoly Podgoretsky (2011-11-27 08:12:00) [1]Хотя если не понимаешь 60% то это не твое, тебе, как минимум, противопоказано использовать ХЕ2
Anatoly Podgoretsky (2011-11-27 08:08:00) [2]> Vyacheslav (26.11.2011 23:13:18) [18]
Это код для Д7 для ХЕ2 надо дорабатывать
Германн (2011-11-27 03:12:00) [3]
> Но не писал бы я в ветке для новичков, если бы понимал,
> что в этом модуле делается хотябы на 60%.
А вот и не надо было его использовать, если не понимаешь.
Иначе ССЗБ!
sniknik (2011-11-27 02:27:00) [4]> А проблему решил, воспользовавшись Delphi 7. Родная среда!
оно у тебя с самого начало было...
> Получить результат выполнения команды консоли? [ D7, 2003]
или опять мозг парил?
> Начну сначала!
> 1) Windows 7 64 bit, Intel i5, Delphi XE2
ну, точно... блин.
Vyacheslav (2011-11-27 01:14:00) [5]Вобщем, вызвало подозрения.. Но не писал бы я в ветке для новичков, если бы понимал, что в этом модуле делается хотябы на 60%.
А проблему решил, воспользовавшись Delphi 7. Родная среда!
Сам модуль не асилил переделывать, не для моих знаний задача Было бы интересно узнать, в чём проблема в совместимости этих версий.
Германн (2011-11-27 00:23:00) [6]
> Vyacheslav (26.11.11 23:13) [18]
>
> Начну сначала!
>
> 2) unit uZpRunConsoleApp; не скомпилировался сразу:
> szCurrentDir := PCharOrNil(Trim(aCurrentDir));
> [DCC Error] uZpRunConsoleApp.pas(617): E2010 Incompatible
> types: 'PWideChar' and 'PAnsiChar'
> Меняю на
> szCurrentDir := PChar(Trim(aCurrentDir));
> Компилится.
>
Ничего не вызвало подозрений?
Ошибка сообщала о несовместимых типах. Изменили функцию в исходнике стороннего компонента (как я подозреваю), но типы остались прежними. Ошибка на этапе компиляции исчезла. А вот что после этого можно сказать о работоспособности компонента, который разработан кем-то там ещё?
Simon (2011-11-26 23:22:00) [7]
> Delphi XE2
О так модуль-то старый. Наверное его надо править под юникодовскую дельфю.
Amoeba_ (2011-11-26 23:20:00) [8]
> получить результат работы консоли, например в TMemo..
Здесь:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=801
Simon (2011-11-26 23:20:00) [9]На какой строке вылетает?
Vyacheslav (2011-11-26 23:13:00) [10]Начну сначала!
1) Windows 7 64 bit, Intel i5, Delphi XE2
2) unit uZpRunConsoleApp; не скомпилировался сразу:
szCurrentDir := PCharOrNil(Trim(aCurrentDir));
[DCC Error] uZpRunConsoleApp.pas(617): E2010 Incompatible types: 'PWideChar' and 'PAnsiChar'
Меняю на
szCurrentDir := PChar(Trim(aCurrentDir));
Компилится.
3) Добаляю модуль в проект, добавляю Memo1 и Button1 на форму..
4) в код кнопки пишу:
procedure TForm1.Button1Click(Sender: TObject);
begin
ExecuteConsoleApp('ffmpeg.exe -i', 'c:\bin\', Memo1.Lines);
end;
5) При нажатии на Button1 Вылетает ошибка:
Access violation at address 7519B763 in module 'kernell32.dll'. Write of address 00515754.
--------------
В случае с ExecuteConsoleApp('cmd', '', Memo1.Lines);
Access violation at address 7519B763 in module 'kernell32.dll'. Write of address 0051578A
Vyacheslav (2011-11-26 23:04:00) [11]Дк та же самая ошибка в случае с ExecuteConsoleApp('ffmpeg.exe -i', 'c:\bin\', Memo1.Lines);
sniknik (2011-11-26 22:34:00) [12]> в данном случае - это ffmpeg.exe
так чего ты нам с cmd мозг "паришь"?
> ExecuteConsoleApp('ffmpeg.exe -i', 'c:\bin\', Memo1.Lines);
иии....?
все хорошо? ну хорошо тогда.
Vyacheslav (2011-11-26 21:49:00) [13]ExecuteConsoleApp('ffmpeg.exe -i', 'c:\bin\', Memo1.Lines);
Vyacheslav (2011-11-26 21:38:00) [14]Ох, камрады, запутался окончательно...
> Возьми любое или напиши 32-разрядное консольное приложение для теста.
Вобщем-то я и хочу запустить 32х разрядное приложение, в данном случае - это ffmpeg.exe
Anatoly Podgoretsky (2011-11-26 21:26:00) [15]> Омлет (26.11.2011 21:16:12) [12]
Системная переменная
PROCESSOR_ARCHITECTURE
Омлет (2011-11-26 21:16:00) [16]
> Но вот только как проверить cmd.exe разрядность
Возьми любое или напиши 32-разрядное консольное приложение для теста.
Омлет (2011-11-26 21:15:00) [17]
> почему то нормально закрыть программу не дает, не охота
> разбираться почему, но ошибок на старте нет.
Надо вызвать StopConsoleApp для остановки процесса.
Vyacheslav (2011-11-26 19:03:00) [18]> а приложение 32 разрядное...
Да, 32х разрядное. Пробовал и 64, тоже самое, только адреса ошибок больше!
>> cmd есть, проверил
> 32 разрядная версия?
А вот это хороший вопрос! Но вот только как проверить cmd.exe разрядность и может ли это как-то помочь направить на решение проблемы?
sniknik (2011-11-26 18:34:00) [19]> Windows 7 64 bit
а приложение 32 разрядное...
> cmd есть, проверил
32 разрядная версия? я как то столкнулся в 64-х винде не было 32-х разрядного IE ... ну вернее не самого, а части объектов COM, ну те, что в TWebBrowser-е используются. печать из него не работала... а так пожалуйста запускай IE печатает, любой причем.
Vyacheslav (2011-11-26 16:06:00) [20]Как искать причину?
Какие в какую сторону крутить поисковик?