2009-05-20 209 views
3

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

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

正如我所说,我想整合(接收和发送数据)与外部应用程序或软件开发工具包我的应用程序。通常有2种从外部应用程序的数据:

  1. 一般/通用数据 - 这始终是相关
  2. 具体数据 - 这应该是不同的处理为每个外部应用

随着“核心应用”想要的情况可以在这个图中描述:

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

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

这个应用程序的分发可能是

  • 核心应用+ Yakko应用+ Yakko应用集成+ Yakko应用程序支持插件
  • 核心应用+点应用+点应用集成
之一

对于其他应用程序,我想保持相同的“集成”,而是以不同的方式处理它们的应用程序中:

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

你会如何建议我刚才描述的实施在我的应用程序集成外部应用程序和SDK,支持?

注:

  • 我使用C++在Windows和插件分布的DLL。
  • 将使用事先都知道的数据类型,我只是需要一些通用的方法将它从源头到处理程序移动。
+0

COM不适合你吗? – 2009-05-20 10:29:04

回答

1

我同意这位意见提供者,COM似乎是一个很好的策略。 您的支持DLL的结婚登记在安装时,那么你的核心应用程序可以寻找插件,类似:

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


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

0

看看Windows有here

的IPC选项

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

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