Loadlibrary Failed with Error 87 | Open QTCreator Failed

在远程连接的电脑上打开QT或使用QT开发的应用时遇到LoadLibrary错误87,参数不正确。尝试多种常规解决方案无效。问题根源在于显卡驱动,具体表现为远程桌面连接(RDP)时加载库失败。解决方法是通过设备管理器禁用显卡驱动。

遇到一个奇怪的问题,打开QT或者QT开发的应用程序会遇到LoadLibrary Failed with Error 87: The paraeter is incorrect。而这种情况只会发生在remote远程连接的电脑上,直接在电脑前打开不会出现。
在这里插入图片描述
尝试了各种方法,例如重命名system32下的atig6pxx.dll磁盘扫描等都无法解决
最后查到是显卡驱动造成的这个问题:
Problem: LoadLibrary fails to load with error 126 or error 87 when working remotely over RDP
解决方法是在硬件设备管理器中禁用显卡。

在Windows系统中,`LoadLibrary` 函数用于将指定的可执行模块加载到调用进程的地址空间中。当 `LoadLibrary` 函数返回错误代码87时,对应的错误信息是 “参数错误ERROR_INVALID_PARAMETER)”。 ### 可能的原因 1. **传入的模块名参数有误**:传入 `LoadLibrary` 函数的模块名可能包含无效字符、路径格式错误或者模块名本身拼写错误等。例如,路径中使用了不合法的字符,或者没有正确指定模块的完整路径(如果模块不在系统搜索路径中)。 2. **文件系统问题**:要加载的模块文件可能已经损坏、被删除或者被其他程序占用,导致无法正常加载。 3. **权限问题**:当前进程可能没有足够的权限来访问要加载的模块文件。例如,文件被设置了只读权限,或者当前用户没有访问该文件所在目录的权限。 4. **依赖项缺失**:要加载的模块可能依赖于其他动态链接库(DLL),而这些依赖项没有正确安装或者无法找到。 ### 解决办法 1. **检查模块名参数**: - 确保模块名的拼写正确,并且路径格式符合Windows系统的要求。如果模块不在系统搜索路径中,需要提供完整的路径。 - 示例代码如下: ```cpp #include <windows.h> #include <iostream> int main() { // 确保模块名和路径正确 const char* dllPath = "C:\\Path\\To\\Your\\Module.dll"; HINSTANCE hDll = LoadLibrary(dllPath); if (hDll == NULL) { DWORD errorCode = GetLastError(); std::cout << "LoadLibrary failed with error code: " << errorCode << std::endl; } else { std::cout << "DLL loaded successfully." << std::endl; // 释放加载的DLL FreeLibrary(hDll); } return 0; } ``` 2. **检查文件系统**: - 确认要加载的模块文件是否存在,并且没有损坏。可以尝试手动打开该文件,或者使用文件校验工具检查文件的完整性。 - 如果文件被其他程序占用,可以尝试关闭相关程序后再重新加载。 3. **检查权限**: - 确保当前进程有足够的权限来访问要加载的模块文件。可以尝试以管理员身份运行程序,或者检查文件和目录的权限设置。 4. **检查依赖项**: - 使用工具(如Dependency Walker)来分析要加载的模块的依赖项,确保所有依赖的DLL都已经正确安装并且可以被找到。 - 如果发现依赖项缺失,需要安装相应的DLL文件,或者将其放置在系统搜索路径中(如 `System32` 目录)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值