我正在尝试从动态库访问函数,该函数实例化 Person 的实例,并将指向它的指针作为 void 指针返回。然后,程序必须使用reinterpret_cast 将void 指针强制转换为Person。但是,我收到一个错误:错误:‘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 {
//...
谢谢!
最佳答案
有问题的行是:
void* person_vp = (*loadPerson)();
您正在取消引用 void*
。你需要这个:
void* person_vp = (*reinterpret_cast<void* (*)()>(loadPerson))();
编辑:
为了更好的可读性,可以像这样分割 Actor :
typedef void* VoidFunc();
VoidFunc* loadPerson_func = reinterpret_cast<VoidFunc*>(loadPerson);
void* person_vp = (*loadPerson_func)();
关于c++ - 错误: ‘void*’ is not a pointer-to-object type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13744617/