代码之家  ›  专栏  ›  技术社区  ›  kshahar

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

  •  3
  • kshahar  · 技术社区  · 15 年前

    我有两个桌面应用程序希望与外部应用程序集成。其中一个应用程序通过我开发的插件进行扩展,以提供并非所有发行版都通用的特定功能。具体情况如下图所示:

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

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

    1. 一般/通用数据-始终相关
    2. 特定数据-应针对每个外部应用程序分别处理这些数据

    使用“核心应用程序”,可以在此图中描述所需的情况:

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

    一般数据在核心应用程序中处理,具体数据在插件(支持插件)中处理。

    此应用程序的分发可能是

    • 核心应用+Yakko应用+Yakko应用集成器+Yakko应用支持插件
    • 核心应用+点应用+点应用集成器

    对于另一个应用程序,我希望保留相同的“积分器”,但要在应用程序内部以不同的方式处理它们:

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

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

    笔记:

    • 我在Windows上使用C++,插件是作为DLL分发的。
    • 将要使用的数据类型总是预先知道的,我只需要一些通用的方法将其从源移动到处理程序。
    2 回复  |  直到 15 年前
        1
  •  1
  •   Number8    15 年前

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

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


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

        2
  •  0
  •   Prashast    15 年前

    查看Windows的IPC选项 here

    在我看来,COM也是一个不错的选择。

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