WinAPI函数LoadLibrary()导致函数在执行错误期间失败

Dhy*_*A.K 0 c++ windows dll winapi visual-c++

以下代码使用LoadLibrary()在运行时加载dll.

boolean Load_Internals_dll()
{
    boolean result = true;

    //LOG_INIT;
    HINSTANCE hApexRLIO = LoadLibrary(L"APEX_RLIO_Internals.dll");

    printf("Checking getlasterror after loadlibrary:\n",GetLastError());
    if(NULL == hApexRLIO)
    {
        result = false;
        printf("[ERR]:  Unable to load dll\n");
        LOG_PRINT(" [ERR]:  Unable to load dll.\n" );

    }
    result = InitRSIDComm_Lib_Func();
    //LOG_EXIT;
    return result;
}
Run Code Online (Sandbox Code Playgroud)

加载dll后,发现句柄hApexRLIO不为空,但函数GetLastError()返回系统错误代码1627(执行期间函数失败).

可能是导致此错误的原因是什么?

这个错误代码在Web上没有太多文档,VC++十加仑头请帮我解决这个问题.

Dav*_*nan 5

文件说:

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

如果函数失败,则返回值为NULL.要获取扩展错误信息,请致电GetLastError.

当函数成功时,返回值不是NULL.这是你的情景.GetLastError如果函数成功,文档不会保证会返回什么.一些Win32 API函数会SetLastError(ERROR_SUCCESS)在返回之前调用,但不是全部.这是一个没有的.

换句话说,没有错误.函数返回值表示成功,您不应该调用,GetLastError因为它返回的值是没有意义的.

  • 如果您在拨打电话之前明确地自己调用SetLastError(ERROR_SUCCESS),则甚至不能保证上次错误在成功的情况下不会受到影响. (2认同)