Использование ACE_Service_Object - PullRequest
1 голос
/ 09 марта 2010

Я пытаюсь использовать ACE_Service_Object или ACE_Shared_Object. Я не уверен, какой из них применим. Я пытаюсь инкапсулировать некоторые функции в DLL, чтобы потребитель DLL открывал библиотеку, создавал экземпляр экспортируемого класса, вызывал некоторые функции в классе и затем уничтожал класс. Базовая архитектура плагинов. Что было бы лучшим способом сделать это с помощью классов ACE. Похоже, они оборачивают много мелочей загрузки, поиска и выгрузки DLL, которые было бы неплохо использовать.

Приведенный ниже код в основном то, что я хочу имитировать с помощью классов 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 );

1 Ответ

2 голосов
/ 09 марта 2010

Если все, что вам нужно, это загрузить, выгрузить и вызвать некоторые функции в общей библиотеке, вы можете вместо этого использовать класс ACE_DLL. Это то, что ACE_Shared_Object заканчивает тем, что использовал под покрытиями.

...