MINGW 編譯錯誤提示從FARPROC到void的轉換無效,但 MSVC 編譯好

void* PluginManager::LoadLIB(const QString i_pluginname)

{

    if (i_pluginname.size() <= 0)

    {

        return NULL;

    }

    QString lib_name = M_PLUGIN_PATH+i_pluginname;

    void* libhandle = NULL;

#ifdef WIN32

    lib_name += QString(".dll");

    libhandle = LoadLibrary(lib_name.toStdWString().c_str());

#else

    lib_name += QString(".so");

    libhandle = dlopen(lib_name.toStdString().c_str(), RTLD_LAZY);

#endif

    return libhandle;

}

 

void* PluginManager::GetSymbolAddress(const void *i_libhandle,const QString i_symbolname) const

{

    void* pSymbol = NULL;

#ifdef WIN32

    if (i_libhandle != NULL)

    {

        pSymbol = GetProcAddress((HMODULE)i_libhandle,  i_symbolname.toStdString().c_str());[W用1]

    }

#else

    if (i_libhandle != NULL)

        pSymbol = dlsym(i_libhandle, i_symbolname.toStdString().c_str());

    }

#endif

    return pSymbol;

}


 [W用1]編譯到下劃線標註的那句是的時候,就報瞭如下錯誤

error: invalid conversion from 'FARPROC {aka int (__attribute__((__stdcall__)) *)()}' to 'void*' [-fpermissive]

         pSymbol = GetProcAddress((HMODULE)i_libhandle, i_symbolname.toStdString().c_str());

原因分析:mingw編譯不允許進行隱式轉換

解決方法:

pSymbol = (void*)GetProcAddress((HMODULE)i_libhandle, i_symbolname.toStdString().c_str());

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章