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 );
È stato utile?

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.

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