LoadLibrary加载Dll失败GetLastError错误码为126

您所在的位置:网站首页 enscape加载失败 LoadLibrary加载Dll失败GetLastError错误码为126

LoadLibrary加载Dll失败GetLastError错误码为126

2023-03-02 07:50| 来源: 网络整理| 查看: 265

GetLastError〖126〗-找不到指定的模块。

问题本质:加载实际使用的路径下没有该通讯库模块,或者该模块缺失依赖项文件。

一种情况是在Windows 64位系统下加载32位Dll,如LoadLibrary里加载的DLL路径参数为_T("C:\\Windows\\System32\\xxx.dll");实际加载确是_T("C:\\Windows\\SysWOW64\\xxx.dll")。这种情况下需要将dll放到"C:\Windows\SysWOW64"下面,否则就会提示126加载失败的错误。System32下是否存在没有影响。

针对上面的情况,同时还可能出现该Dll存在依赖项的问题。如果SysWOW64下面已经有该Dll,还提示126,则应该就是缺失依赖项文件;使用DEPENDS.EXE工具,查看该Dll缺失哪些通讯库即可。

如对于某些设备,厂家不仅提供了驱动,也会提供了我们应用开发需要使用LoadLibrary函数加载的接口dll,这些接口DLL还需要调用驱动类的dll,如果驱动没装好,就会导致接口dll缺失驱动类dll等依赖项,就会导致126加载失败错误。将相关驱动等其它类dll放到接口同目录文件夹SysWOW64下即可。

出现以上现象时,网上可能会误导你使用LoadLibraryEx,或又是SetCurrentDir

LoadLibraryEx(_T("C:\\Windows\\System32\\xxx.dll"), NULL, LOAD_WITH_ALTERED_SEARCH_PATH); TCHAR chCurDir[MAX_PATH] = {0}; GetCurrentDirectory(MAX_PATH, chCurDir); SetCurrentDirectory(_T("C:\\Windows\\System32\\")); //或SetCurrentDirectory(_T("C:\\Windows\\SysWOW64\\")); m_hDLL = LoadLibrary(_T("xxx.dll")); SetCurrentDirectory(chCurDir);

实际调试中,可能会出现的一些路径调试

//hMod = LoadLibrary(L"..\\Debug\\xxxL.dll"); //1 //hMod = LoadLibrary(_T("C:\\Windows\\SysWOW64\\xxx.dll"));//2 //hMod = LoadLibrary(_T("C:\\Windows\\System32\\xxx.dll"));//3 //hMod = LoadLibrary(_T("D:\\xxx.dll"));//4 //hMod = LoadLibraryA(".\\xxx.dll"); //5,exe当前同目录测试调用 //hMod =LoadLibraryExW(strDLLFile, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);//6 hMod = LoadLibrary(strDLLFile); if (hMod == NULL) { DWORD ret1=GetLastError(); CString str; str.Format(_T("GetLastError=%d"),ret1); MessageBox(NULL,strDLLFile,str,MB_OK); return -1; } MessageBox(NULL,strDLLFile,_T("Load ok"),MB_OK);



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3