LoadLibrary(...)失败,错误代码为1627:ERROR_FUNCTION_FAILED

时间:2016-12-13 13:37:25

标签: c++ windows winapi

我正在尝试将LoadLibrary调用为放置在exe路径中的dll。 它给出错误为ERROR_FUNCTION_FAILED。以下是代码,请让我知道1627的原因

    typedef int (__stdcall  *func)();
    int DynamicLoad_Lib()
    {
        func  call;
        int  iReturn;
        cout<<"\n\n DynamicLoad_Lib \n\n";
        HINSTANCE hinstLib = LoadLibrary(L"MYLib.dll");
        cout<<"\n\nGetLastError() "<<GetLastError()<<"\n";             
        if(hinstLib == NULL)
            return 0;
        call = (func_another)GetProcAddress(hinstLib, "Initialize");
        if(call == NULL)
        {
            FreeLibrary(hinstLib);
            return 0;
        }
        iReturn = (*call)();
        call = (func)GetProcAddress(hinstLib, "Terminate");
        if(call == NULL)
        {
            FreeLibrary(hinstLib);
            return 0;
        }
        FreeLibrary(hinstLib);
        return 1;
    }

int _tmain(int argc, _TCHAR* argv[])
{
    DynamicLoad_Lib();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

这将打印出任何Windows API函数中发生的最后一个错误:

    cout<<"\n\nGetLastError() "<<GetLastError()<<"\n";             
    if(hinstLib == NULL)
        return 0;

应该是,打印LoadLibrary函数中发生的任何错误:

    if(hinstLib == NULL)
    {
        cout<<"\n\nGetLastError() "<<GetLastError()<<"\n";             
        return 0;
    }

LoadLibrary RTFM

  

返回值

     

如果函数成功,则返回值是模块的句柄。

     

如果函数失败,则返回值为NULL。要获得扩展错误   信息,调用GetLastError。