Domanda

Ho 2 applicazioni desktop che desidero per l'integrazione con applicazioni esterne. Una delle applicazioni è esteso con i plugin che vengono sviluppate da me, per fornire caratteristiche specifiche che non sono comuni per tutte le distribuzioni. La situazione può essere descritta nel seguente diagramma:

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

Come ho già detto, voglio integrare (ricevere e inviare dati) le mie applicazioni con applicazioni esterne o SDK. Di solito ci 2 tipi di dati provenienti da applicazioni esterne:

  1. Generale / dati comune - che è sempre attuale
  2. Dati specifico - che dovrebbero essere gestite in modo diverso per ogni applicazione esterna

Con "Core Application", la situazione voluta può è descritto in questo schema:

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

I dati generali sono trattati nella domanda Core e i dati specifici è gestito in plugin (plugin di supporto).

Una distribuzione di questa applicazione potrebbe essere uno dei

  • Nucleo Application + Yakko App + Yakko App Integrator + Yakko App supporto per i plugin
  • Nucleo Application + Dot App + Dot App Integrator

Per l'altra applicazione, voglio mantenere la stessa "integratori", ma per gestirli in modo diverso all'interno dell'applicazione:

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

Come mi consiglia di implementare il supporto nelle mie applicazioni per l'integrazione di applicazioni esterne e SDK, come ho appena descritto?

Note:

  • sto usando C ++ su Windows e plugin sono distribuiti come DLL.
  • I tipi di dati che verranno utilizzati sono sempre saputo in anticipo, ho solo bisogno di qualche modo generico per spostarlo dalla sorgente al gestore.
È stato utile?

Soluzione

Sono d'accordo con il commentatore, COM sembra una buona strategia. Le DLL di supporto vengono registrati quando vengono installati, quindi il vostro core applicazione può cercare per i plugin, qualcosa come:

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

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

Altri suggerimenti

Guarda le opzioni IPC che Windows ha qui

Per me pure COM si presenta come una buona opzione qui.

Un altro modo per farlo sarebbe quello di avere la vostra applicazione principale in esecuzione un server, che ascolta le chiamate dai tuoi plugin. È possibile raggiungere questo obiettivo utilizzando nomi tubi. Ora, le applicazioni di supporto avrebbe utilizzato questi plugin per comunicare (tramite named pipe) con il nucleo app.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top