2

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 {
   //...

ありがとう!

4

1 に答える 1

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)();
于 2012-12-06T13:33:02.713 に答える