Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача информации между двумя и более exe 
:(
    Опции темы
BeeMaster
Дата 4.4.2012, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 3.4.2008

Репутация: нет
Всего: нет



В общем задача. Есть главное приложение которое должно принимать общую статистику о работе. И вторичные приложения которые будут работать и передавать информацию полученную главному ехе. Нужно именно так т.к. это связано с особенностями выполняемой задачи.

Была мысль создать свое API для функционирования приложений наподобие как это реализовано у скайпа, но так и не нашел как это сделать.

Передача информации с помощью файлов... Вариант но слишком часто будут сохраняться файлы и считываться... В общем боюсь что повлияет на работоспособность машины в целом...


Подскажите пожалуйста как реализовать. Желательно с примером
PM MAIL   Вверх
baldina
Дата 4.4.2012, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



PM MAIL   Вверх
kami
Дата 4.4.2012, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(BeeMaster @  4.4.2012,  19:15 Найти цитируемый пост)
Подскажите пожалуйста как реализовать.

Есть такая штука, называется IPC - "межпроцессное взаимодействие".
Способов куча:
1. Post|SendMessage - обычно используется для небольших объемов данных, которые "влезают" в 2 integer числа.
2. MemoryMappedFiles (MMF) - не особо просто обеспечить синхронизацию записи/чтения.
3. NamedPipes - наиболее применимо для обмена информацией в пределах одного компьютера. На Vista и Win7 появились подводные камни, связанные с различием прав доступа: к примеру, нельзя просто так подключиться к именованному каналу, если один из процессов запущен от системной учетки (например, служба), а второй - как обычное десктопное приложение, нужно поиграться с правами доступа
4. Sockets. Наиболее универсальное решение, но в пределах одного компьютера - избыточное.

Наверняка перечислил не всё, гугл на запрос IPC скажет гораздо больше.

Нужно определиться с конкретным способом, а потом уже конкретизировать вопрос.

Это сообщение отредактировал(а) kami - 4.4.2012, 22:02
PM MAIL WWW   Вверх
baldina
Дата 4.4.2012, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



пример
хотя имхо это не самый удобный способ. чем Вам файлы не угодили? см. CreateNamedPipe()
PM MAIL   Вверх
kami
Дата 4.4.2012, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



baldina,  я слегка опоздал smile

Это сообщение отредактировал(а) kami - 4.4.2012, 22:03
PM MAIL WWW   Вверх
baldina
Дата 4.4.2012, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



угу, пиши короче  smile

Добавлено через 2 минуты и 29 секунд
 smile kami, не поверишь. у нас с тобой ДР совпадают.  smile 
PM MAIL   Вверх
kami
Дата 4.4.2012, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



<offtopic> baldina, прикольно smile </off topic>
PM MAIL WWW   Вверх
BeeMaster
Дата 4.4.2012, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 3.4.2008

Репутация: нет
Всего: нет



Ребята... Помогите плиз. Покажите пожалуйста пример кода для взаимодействия. А то я никак не вкуриваю(



Просто форма на нем edit1 и button. При нажатие на кнопку данные из edit1 передавались бы другому процессу. Нужен исходник...

Заранее благодарен!


PM MAIL   Вверх
kami
Дата 4.4.2012, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Лови.
Писалось в незапамятные времена для D7, на D2009+ придется подшаманить, могут быть утечки памяти, хотя, если память не изменяет - тестировал это.

Использовать просто:
в каждом приложении создать экземпляр TMMF с одним и тем же параметром в конструкторе и одинаковым максимальным размером MMF.

Затем, на передающем конце:
Код

myMMF.SyncAddData(edit1.text[1], Length(edit1.text));


на приемном конце:
Код

var
  myData: TMMFData;

myMMF.SyncGetAllData(myData);
if myData.DataCount>0 then
  edit1.text:=myData.Data[0];


Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  uMMFThread.pas 18,73 Kb
PM MAIL WWW   Вверх
RelictOs
Дата 5.4.2012, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 14.2.2012

Репутация: нет
Всего: 1



Вот небольшое клиент-серверное приложение на Socket. на мой взгляд - наиболее простой пример.
реализована передача текста и файлов.


Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  ClientServer2.rar 408,46 Kb
PM MAIL ICQ Skype   Вверх
kami
Дата 5.4.2012, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(RelictOs @  5.4.2012,  11:25 Найти цитируемый пост)
наиболее простой пример.

Некорректная работа с сокетами, увы
PM MAIL WWW   Вверх
Чучмек
Дата 5.4.2012, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 14
Всего: 41



Ну не стоит забывать про такую замечательную вещь как COM
Создаешь COM сервер
File->New->Other->ActiveX->COM Object

"Class Name":MyClass
"Instancing":Multiple Instance
"Threading Model":Apartament
check "Include Type Library" and "Mark interface Oleautomation"
OK

Выделяешь IMyClass
Нажимаешь NewMethod
На вкладке Attributes задаешь имя метода 
Name:MyFunc
На вкладке Parameters добавляешь передаваемые параметры и  задаешь тип.
"Name":str  "Type":BSTR  "Modifier":[in]
Нажимаешь обновить "Refresh Iplementation"
В проект добавится два модуля Unit* и ***_TLB
В Unit* пишешь реализацию  MyFunc
Например:
Код

function TMyClass.MyFunc(const str: WideString): HResult;
begin
unit1.Form1.Memo1.Lines.Add(str);
end;
 
Из ***_TLB копируешь описание интерфейса IMyClass
и константу CLASS_MyClass

В клиенте:
Код

type
 IMyClass = interface(IUnknown)
    ['{1331A90D-7D30-49E5-8C56-9803C2337621}']
    function MyFunc(const str: WideString): HResult; stdcall;
  end;
const CLASS_MyClass: TGUID = '{6D01482C-F601-45C7-8AA5-DC992137B5FA}';


var myclass:IMyClass;

...
myclass:=comobj.CreateComObject(CLASS_MyClass)as IMyClass;
...

myclass.MyFunc('Прувэт');



Вот пример.




Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  com.7z 224,36 Kb


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0998 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.