将外部应用程序与我的应用程序集成

时间:2009-05-20 10:16:54

标签: c++ architecture plugins integration external

我有2个桌面应用程序,我希望与外部应用程序集成。其中一个应用程序扩展了我开​​发的插件,以提供所有发行版不常见的特定功能。可以在下图中描述这种情况:

alt text http://img32.imageshack.us/img32/8902/integration1.png

正如我所提到的,我想将我的应用程序与外部应用程序或SDK集成(接收和发送数据)。通常有两种来自外部应用程序的数据:

  1. 一般/公共数据 - 始终相关
  2. 特定数据 - 应针对每个外部应用程序进行不同的处理
  3. 使用“核心应用程序”,可以在此图中描述所需的情况:

    alt text http://img32.imageshack.us/img32/3299/integration2.png

    常规数据在Core Application中处理,特定数据在插件(支持插件)中处理。

    此应用程序的分发可能是

    之一
    • 核心应用程序+ Yakko App + Yakko App Integrator + Yakko App支持插件
    • 核心应用程序+ Dot App + Dot App Integrator

    对于其他应用程序,我想保留相同的“集成商”,但要在应用程序内部以不同方式处理它们:

    alt text http://img32.imageshack.us/img32/2088/integration3x.png

    如我刚才所述,您如何建议在我的应用程序中实现集成外部应用程序和SDKS的支持?

    注意:

    • 我在Windows上使用C ++,插件以DLL的形式发布。
    • 将使用的数据类型总是事先知道的,我只需要一些通用的方法将它从源代码移动到处理程序。

2 个答案:

答案 0 :(得分:1)

我同意评论者的意见,COM似乎是一个很好的策略。 您的支持dll在安装后会被注册,然后您的核心应用程序可以查找插件,例如:

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


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

答案 1 :(得分:0)

查看Windows here

的IPC选项

对我而言COM在这里看起来是个不错的选择。

另一种方法是让你的核心应用程序运行一个服务器来监听来自你的插件的调用。您可以使用名称管道来实现此目的。现在,您的支持应用程序将使用这些插件与您的核心应用程序进行通信(通过命名管道)。