| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Передача параметров между приложениями |
| Автор: aktuba 19.10.2006, 21:04 |
| Такой вопрос: запущены две копии одной и той-же программы с разными параметрами коммандной строки: 1. c:/app.exe /strings_1 2. c:/app.exe /strings_2 Как из второй программы, которая запущена позже, передать данные коммандной строки в первую программу? |
| Автор: Alexeis 19.10.2006, 21:58 |
| 1) Через буфер обмена 2) Через пересылку сообщений 3) Через DDE 4) Через OLE |
| Автор: aktuba 19.10.2006, 22:09 | ||||
| 1. Буфер обмена не подходит, т.к. не очень хорошо портить данные пользователя. 2. Сообщения - то, что надо. Но у меня мало опыта в этом. Как с помощью сообщений передать строку? 3 и 4. Не знаю... Вообще никогда с этим не работал. Может это лучше чем сообщения? Есть примеры? Добавлено @ 22:21 в DelphiWorld нашел пример: получатель:
отправитель:
А еще какие есть способы? |
| Автор: Snowy 19.10.2006, 22:54 |
| Нет. Строка передаётся через WM_COPYDATA. Через WM_USER её не передать. Примеров на форуме масса. Нужно только в строке поиска набрать WM_COPYDATA |
| Автор: Alexeis 19.10.2006, 23:07 |
Почему? Я вроде такое тоже встречал, вот только сейчас не могу найти. |
| Автор: Romikgy 19.10.2006, 23:10 |
имхо если извратится то можно |
| Автор: Snowy 19.10.2006, 23:12 |
| Нельзя передать между приложениями. Внутри одного процесса можно. Между процессами - нет. У них области памяти разные. Для этого и придумана WM_COPYDATA - для упрощения процесса. Она создаёт MM файл, копирует туда данные, передаёт другому процессу, ждёт возврата, уничтожает MM файл. Специальное сообщение - чтобы всё это руками не делать. Добавлено @ 23:14 Ага. Не дочитал твой вариант до конца. Так конечно тоже можно. Но это нерациональный вариант. WM_COPYDATA куда проще. Добавлено @ 23:24 А вот и готовый примерчик: http://forum.vingrad.ru/index.php?showtopic=83144&view=findpost&p=642109 |
| Автор: Sansa 20.10.2006, 10:04 |
| В JVCL есть модуль JvAppInst.pas. В нем реализован компонент, который определяет, одна ли копия приложения запущена, и что делать, если их несколько. |
| Автор: BUGOR 20.10.2006, 10:30 | ||
Анонимные пайпы Глобальные атомы Мэилслоты Ну и именованые Memory Mapped File регионы(что кстати и использует WM_COPYDATA) Но в обычных рядовых ситуациях конечно WM_COPYDATA очень хорошо подходит. |
| Автор: Gawron 21.9.2008, 20:04 |
| Стандартные средства для работы с DDE в Делфи позволяют передавать типы PChar и TStrings. А как можно организовать передачу данных другого типа через DDE (а именно: массив чисел типа Integer или Real)? Есть ли какие-либо компоненты для работы с DDE, позволяющие организовать такую передачу? |
| Автор: aktuba 21.9.2008, 22:38 |
| Gawron, а новый пост создать не судьба, вместо того, чтобы поднимать пост 2006-го года? |
| Автор: Alexeis 21.9.2008, 22:50 |
| aktuba, все нормально. Вопрос по теме. Зачем плодить сущности. Gawron, PChar это ж просто указатель на буфер в памяти. Туда можно записать все что хош |
| Автор: Gawron 24.9.2008, 10:31 |
| Спасибо. А не будет никаких сбоев, если к общему массиву (целых чисел) будут обращаться сразу два разных приложения? |
| Автор: Alexeis 24.9.2008, 10:59 | ||
Если только читать, то проблем быть не должно. |
| Автор: Gawron 24.9.2008, 15:01 |
| Суть проблемы: одна программа формирует числовой массив. При каждом движении мыши значения элементов массива меняются. А другая программа читает эти данные. Насколько вероятны сбои в такой ситуации? |
| Автор: Rohoss 24.9.2008, 19:19 |
| Немножко офтоп: А маршалинг в данной ситуации не подходит? |
| Автор: AntonN 24.9.2008, 20:41 |
| добавлю к списку Alexeis - можно еще сокеты прикрутить |