Python3.8+Windows下DLL加载避坑指南:解决FileNotFoundError和MvCameraControl.dll报错
在Windows平台上使用Python调用第三方DLL库时,很多开发者都遇到过令人头疼的FileNotFoundError或MvCameraControl.dll报错。特别是从Python 3.8版本开始,微软对DLL加载机制进行了重大变更,导致许多原本能正常运行的代码突然报错。本文将深入剖析这一问题的根源,并提供多种实用解决方案。
1. Python3.8的DLL加载机制变更
Python 3.8引入了一个重要的安全更新:修改了Windows平台下动态链接库(DLL)的加载规则。这一变更旨在防止DLL劫持攻击,但也给开发者带来了新的挑战。
1.1 新旧加载机制对比
在Python 3.8之前,DLL加载遵循以下规则:
- 会搜索当前工作目录
- 会搜索系统PATH环境变量中的路径
- 会搜索一系列预定义的系统目录
而从Python 3.8开始,加载规则变得更加严格:
- 仅搜索可信位置(Trusted Locations)
- 可信位置包括:
- DLL所在的完整路径或相对路径
- 使用
add_dll_directory()添加的路径 - 系统默认的可信位置
# Python 3.7及以下版本可以这样加载
mb = ctypes.cdll.LoadLibrary("node.dll") # 可能正常工作
# Python 3.8+需要更明确的路径
mb = ctypes.cdll.LoadLibrary("./node.dll") # 使用相对路径


2万+

被折叠的 条评论
为什么被折叠?



