Можно ли общаться через COM-объект? - PullRequest
0 голосов
/ 22 августа 2009

Возможно ли взаимодействие двух exes через интерфейс COM (ActiveX?)? Может ли COM DLL координировать обмен данными между двумя отдельными процессами?

Ответы [ 6 ]

1 голос
/ 23 августа 2009

Ответ на ваш вопрос, очевидно, да.

Продолжение:

  1. Почему вы хотите поделиться данными? Что вы пытаетесь достичь? Как выглядят данные? Вам нужно распределить сложные структуры и сделать сложные вызовы RPC, или у вас просто большой кусок данных в памяти, и вы хотите, чтобы на нем присутствовали два человека?
  2. Почему вы думаете, что COM - лучший способ сделать это? Рассматривали ли вы просто отправку оконных сообщений или использование именованного канала (как предложено @avakar), или использование общей памяти с именованными мьютексами?

Ответы на # 1 сообщат # 2.

Но скажем, COM - лучшее решение для вас. Если у вас есть код в процессе A, который хочет что-то сделать в процессе B, вы регистрируете COM-объект в b.exe, а затем выполняете процесс A CoCreateInstance () объект. COM запустит b.exe, создаст объект, указанный в CLSID, который вы передадите в CoCreateInstance (), а затем предоставит вам poitner для указанного интерфейса, который вы запросили в параметре IID для CoCreateInstance (). Теперь вы можете вызывать методы для объекта в процессе B из процесса A.

Если у вас есть дополнительные вопросы или разъяснения, не стесняйтесь продолжать.

COM соберет для вас основные типы данных (в основном все, что поддерживает VARIANT).

1 голос
/ 22 августа 2009

Если вы хотите установить связь между двумя процессами, используйте именованный канал .

(Можно вызывать удаленный COM-объект и обмениваться данными таким образом, но это излишне сложно.)

0 голосов
/ 23 августа 2009

DCOM (Распределенный COM) - это технология для связи с COM-объектом, работающим в отдельном процессе (или даже в машине). Хотя было бы полезно, если бы вы подробно остановились на своем сценарии, возможно, есть лучший вариант того, что вы пытаетесь сделать.

0 голосов
/ 22 августа 2009

Да, 2 exes могут общаться через интерфейс COM.

COM-клиент и COM-сервер могут находиться в одном процессе, в два отдельных процесса на одном компьютере или на двух разные компьютеры.

0 голосов
/ 22 августа 2009

Может ли комплекс координировать обмен данными между двумя отдельными процессами?

Внимание: будет два экземпляра этой DLL, по одному в каждом процессе. Если DLL имеет / управляет данными, каждый экземпляр DLL будет иметь свои собственные данные: эти данные не будут разделены между процессами.

Это - это для двух ex-ов, которые могут общаться через интерфейс com, где интерфейс COM поддерживает такие методы, как, я не знаю, putData и getData, однако я думаю, что вы можете собрать / упаковать / установить этот COM-объект как COM-объект вне процесса (*.exe), а не как COM-объект (*.dll) в процессе.

Или, если вы используете DLL, вам придется реализовать их, чтобы справиться с двумя отдельными их экземплярами: например, он должен использовать межпроцессные мьютексы вместо внутрипроцессного критического раздела и межпроцессную разделяемую память вместо внутрипроцессной памяти кучи.

Возможно, это не лучший способ 1020 * для координации обмена данными, но это может быть способ.

0 голосов
/ 22 августа 2009

Вы можете посмотреть на Совместное использование CoffeeMonitor для простого примера, написанного на VB6. Это, вероятно, наиболее полезно для n-way коммуникаций, а не для простых сценариев один на один.

Еще одним подходом может быть использование почтовых ящиков , которое в отличие от именованных каналов может использовать широковещательные сообщения аналогично широковещательным UDP-рассылкам.

...