我正在尝试使用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在幕后使用的最终结果。