문제

ace_service_object 또는 ace_shared_object를 사용하려고합니다. 어떤 것이 적용되는지 잘 모르겠습니다. DLL의 일부 기능을 캡슐화하려고 노력하므로 DLL의 소비자가 라이브러리를 열고 내보내는 클래스의 인스턴스를 만들고 클래스의 일부 기능을 호출 한 다음 클래스를 파괴 할 수 있습니다. 종류의 기본 플러그인 아키텍처. ACE 클래스를 사용하여 이것에 대해 가장 좋은 방법은 무엇입니까? 그들은 많은 DLL 로딩, 조회 및 언로드 Minutia를 감싸는 것처럼 보이며, 사용하기에 좋을 것입니다.

아래 코드는 기본적으로 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