错误:'void *'不是指向对象的指针类型

时间:2012-12-06 13:27:14

标签: c++ object pointers dynamic shared-libraries

我正在尝试从动态库访问函数,它实例化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 {
   //...

谢谢!

1 个答案:

答案 0 :(得分:2)

有问题的一行是:

void* person_vp = (*loadPerson)();

您要取消引用void*。你需要这个:

void* person_vp = (*reinterpret_cast<void* (*)()>(loadPerson))();

修改

为了更好的可读性,演员阵容可以像这样拆分:

typedef void* VoidFunc();
VoidFunc* loadPerson_func = reinterpret_cast<VoidFunc*>(loadPerson);
void* person_vp = (*loadPerson_func)();