LoadLibrary加载Dll失败GetLastError错误码为126 |
您所在的位置:网站首页 › enscape加载失败 › LoadLibrary加载Dll失败GetLastError错误码为126 |
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 |