Вопрос

Я пытаюсь использовать 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 );
Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top