Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обмен данными двух программ.
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
upc2
Две программы на одном компьютере.Потребовалось организовать песылку данных из одной
программы в другую.Т.к. программы мои , то сделал это быстро, используя буфер обмена.
Все хорошо.Все работает.Потребовали программу наблюдения за процессом по сети.Разработал
новую и модернизировал старые программы.И выяснилось , что функция API CopyFile тоже
использует буфер обмена.И начались глюки с использованием буфера обмена. Решил отказаться
от использования буфера обмена в основных программах.Полезло в голову DDE,OLE и прочее, но и
они используют буфер обмена.Пока выкрутился так.Одна программа пишет данные в текстовый
файл на диск, а другая его забирает.
Поделитесь опытом как вы организовываете обмен данными между программами.Или как это сделать
правильно.С использованием COM и DCOM не предлагать.
sff
Цитата(upc2 @ Nov 10 2006, 09:57) *
Две программы на одном компьютере.Потребовалось организовать песылку данных из одной
программы в другую.Т.к. программы мои , то сделал это быстро, используя буфер обмена.
Все хорошо.Все работает.

Я что-то не особо представляю как это сделано через буфер обмена..

Вообще есть уйма способов, и по-видимому, вам подойдет отображение файла на память MapViewOfFile. Тогда у двух процессов будет один общий болк памяти и никакого промежуточного буфера.

А так в Windows есть ещё Named Pipes, Mailslots (уже на любителя).
upc2
Одна программа засылает данные в буфер обмена, другая забирает.
Спасибо.Я сейчас и рассматриваю отображение в память.Здесь есть один ньюанс.
Необходимо подобрать функции, которые работали бы и в 98 ,и в 2000 без
контроля версии. Или придется много переделывать.
sff
Цитата(upc2 @ Nov 10 2006, 12:39) *
Необходимо подобрать функции, которые работали бы и в 98 ,и в 2000 без
контроля версии. Или придется много переделывать.

Работал с отображением достаточно давно, но по-моему, таких проблем не было.
Зависимо в MapViewOfFile это атрибут EXECUTE, а он в вашем случае не нужен.
А в CreateFileMapping тоже всё что связано с созданием отображения с выполняемым кодом.
jorikdima
сокеты, каналы.... в общем средства межпроцессного взаимодействия. много написано
upc2
Цитата(jorikdima @ Nov 10 2006, 14:40) *
сокеты, каналы.... в общем средства межпроцессного взаимодействия. много написано


Нет с сокетами тоже не хочу связываться.Программы уже 4 года работают.Необходимо внести
минимум дополнительного кода.Уже набросал отображение файла на память .В понедельник
буду тестировать.
_artem_
Там не только сокеты. Посмотрите мсдн для interprocess communication.
upc2
Спасибо всем.Проанализировал все ваши советы.В данной ситуации остановился на буфере обмена.
Отображение файла в память ,в данном случае, ничего нового не вносит.Одна программ должна
создавать файл стандартными файловыми функциями В/В, а другая уже связывает этот файл с некоторой областью памяти.Проще и во второй использовать функции В/В.Меньше мороки.Так сейчас и
делается .Связь через текстовый файл.
Буфер обмена я использовал не корректно.Задействовал когда-то стандартный текстовый формат и
успокоился.Мои программы обмениваются с частотой около 1 сек.Если другая программа занесет
в буфер свои данные , то произойдет сбой.
Оказывается этого можно избежать использованием собственного формата.Создается формат для
своих данных и регистрируется.Для него резервируется обьем динамической памяти.И данными
пользуются те программы , которые поддерживают этот формат.Главное уход от использования
общего текстового формата.И все функции работают в Win98 и 2000.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.