我正在尝试使用 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 最终在幕后使用的内容。
我是一名优秀的程序员,十分优秀!