2
동적 라이브러리의 함수에 액세스하려고합니다. 즉, Person 인스턴스를 인스턴스화하고 포인터를 void 포인터로 반환합니다. 그런 다음 프로그램은 reinterpret_cast를 사용하여 void 포인터를 Person에 캐스트해야합니다. 그러나 오류가 발생합니다 : 오류 : 'void *'는 (는) 포인터와 개체 유형이 다릅니다. 라이브러리에서오류 : 'void *'는 포인터 간 객체 유형이 아닙니다.
기능 :
void* loadPerson (void) {
return reinterpret_cast<void*>(new Person);
}
MAIN.CPP :
void* loadPerson = dlsym(lib_handle, "loadPerson");
void* person_vp = (*loadPerson)();
Person* person = reinterpret_cast<Person*>(person_vp);
if (dlerror() != NULL)
cout<<"Library init error."<<endl;
else {
//...
덕분에 여기
코드입니다!
좋은 대답,하지만 난 함수 포인터 변수를 추가합니다 그래서 프로세스가 더 명확합니다. –
@JonathanGrynspan 감사합니다. 대답을 확장했습니다. – Angew
@Agnew NetBeans에서 'RUN FAILED (종료 값 1)'오류가 발생했습니다. [this] (http://www.drdobbs.com/dynamically-loaded-c-objects/184401900) 자습서에 따르면, (* loadPerson)()과 같은 함수를 호출해야합니다.이 함수는 값을 반환하기 때문에 할당됩니다. 'person_vp' 포인터. 내가 여기서 무엇을 놓치고 있니? –