2009-05-20 236 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在這裏看起來是個不錯的選擇。

另一種方法是讓你的核心應用程序運行一個服務器來監聽來自插件的調用。您可以通過使用名稱管道來實現此目的。現在,您的支持應用程序將使用這些插件與您的核心應用程序進行通信(通過命名管道)。