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

替代文本 http://img32.imageshack.us/img32/8902/integration1.png

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

  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

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

笔记:

  • 我在 Windows 上使用 C++,插件作为 DLL 分发。
  • 将使用的数据类型总是预先知道的,我只需要一些通用方法将其从源移动到处理程序。
有帮助吗?

解决方案

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

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

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

其他提示

查看windows有的IPC选项 这里

对我来说,COM 看起来也是一个不错的选择。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top