utilizzando ACE_Service_Object
Domanda
Sto cercando di utilizzare l'ACE_Service_Object o ACE_Shared_Object. Non sono sicuro che uno è applicabile. Sto cercando di incapsulare alcune funzionalità in una DLL in modo un consumatore della DLL potrebbe aprire la libreria, creare un'istanza della classe esportata, chiamare alcune funzioni sulla classe, e poi distruggere la classe. Un'architettura plug-in di base di sorta. Quale sarebbe il modo migliore per andare su questo utilizzando le classi ACE. Essi sembrano avvolgere un sacco di caricamento della DLL, di ricerca e scarico minuzia, che sarebbe bello da usare.
Il codice qui sotto è fondamentalmente ciò che voglio imitare utilizzando le classi ACE.
void* handle = dlopen("./libdllbaseclass.so", RTLD_LAZY);
DllBaseClass* (*create)();
void (*destroy)(DllBaseClass*);
create = (DllBaseClass* (*)())dlsym(handle, "create_object");
destroy = (void (*)(DllBaseClass*))dlsym(handle, "destroy_object");
DllBaseClass* myClass = (DllBaseClass*)create();
myClass->DoSomething();
destroy( myClass );
Soluzione
Se tutto ciò che serve è quello di caricare, scaricare, e chiamare alcune funzioni in una libreria condivisa, è possibile utilizzare invece la classe ACE_DLL. Questo è ciò che ACE_Shared_Object finisce usando sotto le coperte.