Frage

Ich versuche, die ACE_Service_Object oder die ACE_Shared_Object zu verwenden. Ich bin nicht sicher, welche anwendbar ist. Ich versuche, einige Funktionen in einer DLL kapseln so ein Verbraucher der DLL würde die Bibliothek öffnen, eine Instanz der exportierten Klasse erstellen, einige Funktionen auf der Klasse aufrufen und dann die Klasse zerstören. Eine grundlegende Plugin-Architektur der Arten. Was wäre der beste Weg, um dies mit den ACE-Klassen zu gehen. Sie scheinen eine Menge von dem DLL-Laden, Nachschlagen und Entladen Minutien zu setzen, das wäre schön, zu verwenden.

Der folgende Code ist im Grunde, was ich die ACE mit Klassen imitieren will.

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 );
War es hilfreich?

Lösung

Wenn alles, was Sie brauchen zu laden ist, zu entladen, und einige Funktionen in einer gemeinsamen Bibliothek aufrufen, können Sie die ACE_DLL Klasse stattdessen verwenden. Das ist, was ACE_Shared_Object landet unter der Decke mit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top