L'integrazione di applicazioni esterne con le mie applicazioni
-
23-08-2019 - |
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:
- Generale / dati comune - che è sempre attuale
- 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.
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.