Pregunta

Estoy tratando de utilizar el ACE_Service_Object o la ACE_Shared_Object. No estoy seguro de cuál es aplicable. Estoy tratando de encapsular algunas funciones en un DLL por lo que un consumidor de la DLL abriría la biblioteca, cree una instancia de la clase exportada, llamar a algunas funciones en la clase, y luego destruir la clase. Una arquitectura plug-in básico de clases. ¿Cuál sería la mejor manera de hacer esto utilizando las clases de la ECA. Ellos parecen envolver una gran parte de la carga de DLL, las operaciones de búsqueda y descarga de minucias, que sería bueno para su uso.

El código siguiente es básicamente lo que quiero para imitar el uso de las clases de la ECA.

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 );
¿Fue útil?

Solución

Si todo lo que necesita es para cargar, descargar, y llamar a algunas funciones en una biblioteca compartida, puede utilizar la clase ACE_DLL lugar. Eso es lo que ACE_Shared_Object termina usando debajo de las sábanas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top