3

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

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

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

  1. 一般/通用数据 - 始终相关
  2. 特定数据 - 对于每个外部应用程序应以不同方式处理

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

替代文字 http://img32.imageshack.us/img32/3299/integration2.png

通用数据在核心应用程序中处理,特定数据在插件(支持插件)中处理。

此应用程序的分发可能是其中之一

  • 核心应用 + Yakko App + Yakko App Integrator + Yakko App Support Plugin
  • 核心应用+点应用+点应用集成商

对于另一个应用程序,我想保持相同的“集成器”,但在应用程序内部以不同方式处理它们:

替代文字 http://img32.imageshack.us/img32/2088/integration3x.png

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

笔记:

  • 我在 Windows 上使用 C++,插件作为 DLL 分发。
  • 将使用的数据类型总是提前知道的,我只需要一些通用的方法将它从源移动到处理程序。
4

2 回答 2

1

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

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

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

于 2009-05-20T11:06:44.543 回答
0

看看windows这里有的IPC选项

对我来说,COM 在这里也是一个不错的选择。

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

于 2009-05-21T18:24:23.267 回答