GetLastError() 返回 126,对应的错误是:

ERROR_MOD_NOT_FOUND (126)
“指定的模块找不到。”

不一定意味着 .dll 文件本身不存在,而是表示 Windows 无法加载该 DLL 或其依赖项。即使你确认 mccv.dll 路径存在,仍可能因以下原因导致 LoadLibraryA 失败并返回 126:


🔍 常见原因及排查方法

✅ 1. DLL 依赖的其他 DLL 缺失

这是最常见的原因!
mccv.dll 可能依赖于:

  • Visual C++ 运行库(如 MSVCR140.dll, VCRUNTIME140.dll, ucrtbase.dll 等)
  • 其他第三方 DLL(如 OpenCV、FFmpeg、自定义库等)

👉 解决方法:使用 Dependency Walker 或更现代的工具检查依赖

  • 推荐工具
    • Dependencies(Dependency Walker 的现代替代品,支持 Win10/Win11 和 Side-by-Side 清单)
      • 下载地址:https://github.com/lucasg/Dependencies/releases
    • 打开 mccv.dll,查看是否有 红色标记 的缺失依赖项。

⚠️ 注意:旧版 Dependency Walker(depends.exe)在 Win10/Win11 上对现代 CRT(如 UCRT)支持不好,会误报缺失,建议用 Dependencies


✅ 2. 目标 DLL 架构与当前进程不匹配
  • 你的程序是 32 位(x86),但 mccv.dll64 位(x64),或反之。
  • LoadLibrary 在架构不匹配时会直接失败,返回 126。

👉 检查方法

  • 使用 dumpbin /headers mccv.dll(Visual Studio 开发者命令行中可用)
    • 查看 machine 字段:
      • x86 → 32 位
      • x64 → 64 位
  • 或用 Dependencies 工具,它会显示架构。

✅ 确保你的 EXE 和 DLL 同为 x86 或同为 x64


✅ 3. 缺少 Visual C++ Redistributable

如果你的 mccv.dll 是用 MSVC 编译的(比如 Visual Studio 2015–2022),它需要对应版本的 VC++ 运行库。

👉 解决方法

  • 安装对应版本的 Microsoft Visual C++ Redistributable

即使你本机有 VS,目标机器也可能没有安装运行库。


✅ 4. DLL 路径包含非 ANSI 字符或权限问题(较少见)
  • 虽然你的路径是 F:\svnroot\...,看起来没问题,但确保:
    • 当前用户对 mccv.dll读取和执行权限
    • 路径中没有隐藏的 Unicode 字符(比如从网页复制的路径)
  • 尝试将 DLL 复制到 C:\temp\mccv.dll,再加载,排除路径干扰。

✅ 5. DLL 入口点(DllMain)初始化失败
  • 如果 DllMain 中调用了某些 API(如创建线程、加载资源)失败,可能导致 DLL 加载被拒绝。
  • 但这种情况通常返回的是 127(ERROR_PROC_NOT_FOUND) 或其他错误,不过也有可能表现为 126。

🛠️ 快速诊断步骤

  1. 用 Dependencies 打开 mccv.dll
    → 查看是否有缺失依赖(红色图标)。

  2. 确认架构匹配
    → 你的 EXE 是 x86?DLL 是 x86?

  3. 在命令行用 where mccv.dll 确认路径无歧义(可选)

  4. 尝试将 DLL 放到系统目录(如 System32)测试?
    → 不推荐长期这么做,但可用于排除路径问题(注意:放 System32 需要管理员权限,且 32 位 DLL 应放 SysWOW64)

  5. 使用 Process Monitor(ProcMon)监控文件访问

    • 下载:Sysinternals ProcMon
    • 过滤 Process Name 为你的 exe,Path 包含 mccv.dll
    • 查看是否成功打开文件,以及后续是否尝试加载其他 DLL 并失败。

💡 临时验证:能否用 rundll32 加载?

rundll32 "F:\svnroot\mediacontrol_sky_soft\40-saturn\common_cv\unit\prj_win32\mccv.dll",#

如果也失败,基本确认是 DLL 本身或依赖问题。


总结

LoadLibraryA 返回 NULL + GetLastError() = 126
几乎总是因为:依赖 DLL 缺失 或 架构不匹配

请优先使用 Dependencies 工具分析 mccv.dll 的依赖链!

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐