Интеграция внешних приложений с моими приложениями - PullRequest
3 голосов
/ 20 мая 2009

У меня есть 2 настольных приложения, которые я хочу интегрировать с внешними приложениями. Одно из приложений дополнено плагинами, разработанными мной, чтобы обеспечить специфические функции, которые не являются общими для всех дистрибутивов. Ситуацию можно описать на следующей диаграмме:

альтернативный текст http://img32.imageshack.us/img32/8902/integration1.png

Как я уже говорил, я хочу интегрировать (получать и отправлять данные) свои приложения с внешними приложениями или SDK. Обычно существует 2 типа данных из внешних приложений:

  1. Общие / Общие данные - которые всегда актуальны
  2. Конкретные данные - которые должны обрабатываться по-разному для каждого внешнего приложения

В «Базовом приложении» требуемая ситуация может описываться на этой диаграмме:

альтернативный текст http://img32.imageshack.us/img32/3299/integration2.png

Общие данные обрабатываются в базовом приложении, а конкретные данные обрабатываются в плагинах (вспомогательных плагинах).

Распространение этого приложения может быть одним из

  • Базовое приложение + приложение Yakko + интегратор приложений Yakko + плагин поддержки приложения Yakko
  • Базовое приложение + Dot App + Интегратор Dot App

Для другого приложения я хочу оставить те же «Интеграторы», но по-разному обрабатывать их внутри приложения:

альтернативный текст http://img32.imageshack.us/img32/2088/integration3x.png

Как бы вы порекомендовали реализовать поддержку в моих приложениях для интеграции внешних приложений и SDKS, как я только что описал?

Примечания:

  • Я использую C ++ в Windows, и плагины распространяются как DLL.
  • Типы данных, которые будут использоваться, всегда известны заранее, мне просто нужен какой-то общий способ переместить их из источника в обработчик.

Ответы [ 2 ]

1 голос
/ 20 мая 2009

Я согласен с комментатором, COM кажется хорошей стратегией. Когда они установлены, ваши dll поддержки регистрируются, и тогда ваше основное приложение может искать плагины, например:

hr = CLSIDFromProgID(L"Wakko.1.0", &clsid);  
hr = GetActiveObject(clsid, NULL, &punk);

или
hr = CoCreateInstance(clsid, ...,..., IID_IWAKKO, ...);

0 голосов
/ 21 мая 2009

Посмотрите на параметры IPC, которые Windows имеет здесь

Для меня также COM выглядит хорошим вариантом здесь.

Еще один способ сделать это - запустить ваше основное приложение на сервере, который прослушивает вызовы от ваших плагинов. Вы можете добиться этого с помощью имен каналов. Теперь ваши приложения поддержки будут использовать эти плагины для связи (по именованным каналам) с вашим основным приложением.

...