![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| mspuz |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 20.6.2005 Где: Ногинск Репутация: нет Всего: нет |
У меня есть программа(А), которая по таймеру запускает другую программу(В). В программе В возможны системные сбои и мне бы хотелось, чтобы после отработки, программа В возвращала результаты - все хорошо, либо произошла ошибка. Как это осуществить??? Пока на уме лишь создание программой В файла txt, в котором будет подробный отчет, который программа А считывает и заносит в БД Журнал. Но наверняка есть что-то покруче!!!!
|
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Есть, конечно.
Программой В послылай SendMessage программе А константу, а программой A принимай сообщения. -------------------- Ll 2 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
1. Запускаешь программу через CreateProcess.
2. Ждешь ее завершения (примеры ожидания в FAQ) 3. Вызванную программу завершаешь по Halt(код); 4. В вызывающей программе получаешь этот код через GetExitCodeProcess. |
|||
|
||||
| mspuz |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 20.6.2005 Где: Ногинск Репутация: нет Всего: нет |
У меня могут быть различного рода ошибки и значение "завершился"-"незавершился" меня не совсем устраивают. Например Программа В не смогла выполнить SQL-запрос, она формирует сообщение, в котором сказанно в какой процедуре это произошло и саму строчку SQL-запроса и это все надо передать в программу А. Можно ли это организовать через SendMessage??? И еще, я запускаю программу через CreatProcess, но не могу ждать её завершения, т.к. мне нужно запускать другие программы паралельно и от них от всех получать отчеты о проделанной работе.
|
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Создаешь константы типа:
Потом послыаешь это своей второй программе. Программа ловит SM, и сравнивает с константами. Вот и все. -------------------- Ll 2 |
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: 1 Всего: 5 |
Все зависит от цели...
1) Проще всего и информативней (как, впрочем, mspuz и собирался), чтобы программа (запускаемая) вела файл протокола, например - в обычном текстовом файле при возникновении интересующих событий открываем на запись командой append, записываем подробно информацию, закрываем CloseFile. Поскольку формат данных произвольный - фиксирум все что необходимо вплоть до времени возникновения события. 2) Есть специальные средства(например, в библиотеке JEDI), позволяющие вести специализированный файлы протоколов типа .CSV. Их использование предпочтительней с точки зрения стандартизации и унификации. Кроме того, для них уже есть готовый инструментарий. 3) Если необходимо, чтобы вызывающая программа каким-то образом реагировала, то проще всего использовать предложенный Snowy подход через Halt/GetExitCodeProcess. Это вообще стандартные действия для объединения разных программ еще со времен DOS. В принципе, можно анализировать возвращаемый код даже в BAT-файлах. 4) Если во время работы запускаемой программы возникает необходимость неоднократной перадачи информации, то здесь лучше воспользоваться SendMessage, как предлагает Guedda . В принципе, с помощью этого подхода можно организовать даже обратную связь. -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Если нужна немедленная реакция на события в вызванной программе, то тогда, конечно, метод ведения протокола не подходит.
Решений такой проблемы предостаточно: - Pipes - Socket - Messages - Технологии COM/DCOM -------------------- |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Поиск по форуму по слову WM_COPYDATA.
Никаких проблем с передачей любых данных между приложениями нет. |
|||
|
||||
| mspuz |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 20.6.2005 Где: Ногинск Репутация: нет Всего: нет |
Блин, чето я туплю, ну никак не могу найти подробного описания WM_COPYDATA, подскажите что неправильно???
Отправляющая часть:
Принимающая часть
Я использую Memo для примера, но на самом деле хочу использовать переменную типа TStringList, в которую помещу нужные данные и переправлю программе. |
||||
|
|||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Сначала присвой текст в стринговую переменную, а потом ее передавай:
Добавлено @ 13:13 Вот пример передачи стринга из одной программы в другую: http://forum.vingrad.ru/index.php?showtopi...st&p=642109 |
||||
|
|||||
| mspuz |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 20.6.2005 Где: Ногинск Репутация: нет Всего: нет |
Snowy, YES!!!! Заработало!!! Обалдеть!!! Огромное спасибо!!! А можно для справки???
Что такое - cd.dwData Какая разница между pointer и @ (сработало с pointer) |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
имхо одинаково Добавлено @ 13:52
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Это любое число. Можешь его использовать, а можешь нет. Его можно использовать, например, для того, чтобы различать, что именно ты шлешь: строку, какую-то свою структури или что-то другое на свое усмотрение.
А можно вообще не использовать. @ - это получить адрес. а pointer - прямое преобразование переменной в поинтер. То есть @s - даст нам указатель на переменную s. А pointer(s) - даст нам указатель на первый символ строки. Аналогично можно сделать так: @s[1] Верно и то и другое, но не @s - так мы получим указатель на указатель. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |