2010-03-09 19 views
1

J'essaie d'utiliser ACE_Service_Object ou ACE_Shared_Object. Je ne suis pas sûr de savoir lequel est applicable. J'essaye d'encapsuler une certaine fonctionnalité dans une DLL ainsi un consommateur de la DLL ouvrirait la bibliothèque, créerait une instance de la classe exportée, appellerait quelques fonctions sur la classe, et détruirait alors la classe. Une architecture de plug-in de base de toutes sortes. Quel serait le meilleur moyen d'y parvenir en utilisant les classes ACE. Ils semblent emballer beaucoup de chargement de la DLL, recherche & minutia de déchargement, ce qui serait agréable à utiliser.Utilisation de ACE_Service_Object

Le code ci-dessous est fondamentalement ce que je veux imiter en utilisant les classes 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); 
+0

Voici le lien vers la conversation par e-mail sur la liste des utilisateurs d'ACE où j'ai également posé cette question. http://groups.google.com/group/comp.soft-sys.ace/browse_thread/thread/f8b5abecb3f216e6?pli=1&utoken=1_l8ujQAAADOucmN4oZYfOFx6aRSU9AumAK6R-0U9m9OvSe8m7knAN-kGJXhO8YlYHlXvigQWoXxnRIF9Cpdb4bb5YrWEuAf –

Répondre

2

Si tout ce que vous avez besoin est de charger, décharger et appeler des fonctions dans une bibliothèque partagée, vous pouvez utiliser la classe à la place de ACE_DLL. C'est ce que ACE_Shared_Object finit par utiliser sous les couvertures.