Raccomandazione per C ++ wrapper per piattaforma trasversale in-process binding librerie dinamiche (cioè un peso leggero, COM prestazioni o CORBA) [chiuso]

StackOverflow https://stackoverflow.com/questions/1854323

Domanda

Stiamo sviluppando un'applicazione che avrà un plug-in "architettura" per consentire ai consumatori di app per fornire i propri algoritmi proprietari. (Ci sarà fondamentalmente avere un set di parser e permettere a terzi di fornire il proprio così)

Lo spazio dominio richiede prestazioni molto elevate, in modo da out-of-process attacchi non stanno andando a lavorare e preferiamo lasciare le cose pesanti come CORBA e COM solo.

In sostanza stiamo cercando un semplice involucro cross-platform in giro:

  • libreria di caricamento da un percorso relativo
  • fornire una mappatura della particolare dll / .so in una certa configurazione / nome
  • fare un po 'di inizializzazione e interrogare il catalogo per assicurarsi che fornisce le funzionalità necessarie

Credo che questo è in realtà solo un involucro intorno LoadLibrary () e le chiamate di metodo esportati. Siamo in grado di scrivere questo noi stessi, ma noi preferiamo usare il codice esistente come abbiamo abbastanza sul nostro piatto.

Anche in questo caso, il throughput e le prestazioni sono molto molto importante.

Domande simili sono:

cross-piattaforma alternativa a COM - questo è vicino, ma vogliamo in-process solo - senza bisogno di fuori dei processi e le nostre esigenze sono un po ' "più leggero"

.

C ++ Cross Platform librerie dinamiche; Linux e Windows

Questo è per unmanaged C ++ - non possiamo usare .NET

Modifica - cosa abbiamo trovato

Abbiamo scoperto che Poco funziona alla grande per le nostre esigenze. Come bonus Questa pagina è un commento molto apprezzata sullo stato di sviluppo C ++ e la direzione di traduzione ...

E 'stata una semplice croce involucro piattaforma che abbiamo bisogno che Poco fornisce. Davvero non c'è molto da esso, ma ancora ci fa risparmiare tempo e la sperimentazione. Nessun ulteriore sovraccarico durante la fase di esecuzione.

È stato utile?

Soluzione 2

Penso che questo potrebbe anche funzionare: http://pocoproject.org/docs/Poco.SharedLibrary.html

Altri suggerimenti

Il biblioteca ACE contiene wrapper per la libreria di caricamento dinamico che funzionano croce piattaforma. Se si desidera più comfort rispetto loadlibrary pianura poi guardare TAO L'ACE ORB . Utilizzando corba con TAO è estremamente performante e molto probabilmente batte qualsiasi auto realizzato infrastrutture plug soprattutto se si utilizza nelle chiamate di processo, come TAO li ottimizza.

Per utilizzare la libreria multi uso involucro piattaforma dinamica ACE_DLL . Esso fornisce la più elementare involucro cross platform intorno LoadLibrary (), che lei ha citato.

Tra usando ACE_DLL e utilizzando Tao è la quadro di configurazione del servizio di ACE che permette di caricare in modo dinamico gli oggetti. Dopo il caricamento è possibile ottenere un puntatore upcast all'oggetto caricato che è stato implementato e possibile chiamare qualsiasi metodo sull'oggetto caricato.

Il codice per fare questo sarebbe simile a questa:

char const * const cpc_myClass = ACE_DYNAMIC_SERVICE_DIRECTIVE(
  "myclass",
  "dllname",
  "_make_MyClass",
  ""
);
result = ACE_Service_Config::process_directive(cpc_myClass);
MyClass * p_obj = ACE_Dynamic_Service<MyClass>::instance ("myclass");
p_obj->callAnyMethodYouLike();

Qui viene spiegato che TAO conosce due tipi di ottimizzazione colocation (thru_poa e diretti):

  

Quando si utilizza la strategia diretta, chiamate di metodo su oggetti collocate diventano chiamate dirette a servo senza controllare lo stato del POA.

Potreste essere sorpresi quanto sia efficace TAO può essere se usato correttamente. Suggerisco per creare un semplice proof of concept e fare misurazioni.

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