当前位置:网站首页>视觉横向课题bug1:FileNotFoundError: Could not find module ‘MvCameraControl.dll‘ (or one of it
视觉横向课题bug1:FileNotFoundError: Could not find module ‘MvCameraControl.dll‘ (or one of it
2022-07-27 05:13:00 【Dr. J】
在pycharm中直接打开demo运行时,报错

开始以为是主文件在import MvCameraControl时有问题,将文件直接复制和主文件一个文件夹,发现不行;
之后网上查找,得到的反馈可能是环境变量的问题,在配置然后进行无数次重启电脑之后,未果。。
最后终于找到了原因,就是因为Python3.8之后,变更了 Windows 下动态链接库 (DLL) 的加载规则。新的规则提高了安全性,默认情况下仅能从可信的位置(Trusted Locations)加载 DLL 依赖,一定程度上避免诸如 DLL 劫持之类的安全风险。
可信的位置包括:
- DLL 所在的路径(加载 DLL 时提供 DLL 的完整路径或部分路径,文件存在则该路径即可信)。
- 使用
add_dll_directory()添加的路径。 - (系统可信位置)
因此,下面这种之前可行的写法在 Windows Python 3.8 下会导致异常:
mb = ctypes.cdll.LoadLibrary("node.dll") # 指定了 DLL 名,Python 3.8 下抛出异常
# `FileNotFoundError: Could not find module 'node.dll'` 该语句指定待加载的模块名是 node.dll,但由于当前工作目录不在可信位置里,故不会搜寻当前目录下的 DLL,最终导致无法在可信位置里找到名字匹配的模块,遂异常。
而下面的写法则不会异常:
mb = ctypes.cdll.LoadLibrary("./node.dll") # 指定了 DLL 的路径 因为 ./node.dll 实际上是给出了模块路径而不是模块名,当显式地给出模块路径时,模块存在则该路径属于可信位置,可以加载。
可行的解决方案
由以上资料,至少可得到三种解决方案:
- 通过
add_dll_directory()把 DLL 目录加入可信列表。 - 使用
ctypes.XXXDLL()加载 DLL 时指定winmode参数(该参数将指定底层调用 Win32 API LoadLibraryEx 时所使用的flags),将值指定为可以从本地路径加载,替换掉默认行为。 - 使用
ctypes.XXXDLL()加载 DLL 时为 DLL 指定路径,而不仅是指定 DLL 名。
注:ctypes.XXXDLL() 中的 XXXDLL 泛指 CDLL, PyDLL, WinDLL 或 OleDLL
后面把这个dll文件的位置重新输入之后,又有错误
OSError: [WinError 193] %1 不是有效的 Win32 应用程序
这个错误的意思就是所引用的dll文件不是64位的,因为我电脑装的是64位的Python,所以去文档里面又找到了64位的dll文件,重新输入文件位置之后,错误解决!!
参考博客:Python 3.8 上 ctypes 加载 DLL 库抛出异常 FileNotFoundError: Could not find module 'node.dll' - 一年又一年的博客
边栏推荐
猜你喜欢

15.GPU加速、minist测试实战和visdom可视化

Count the quantity in parallel after MySQL grouping

Social media user level psychological stress detection based on deep neural network

Deploy redis with docker for high availability master-slave replication

数字图像处理——第三章 灰度变换与空间滤波

Numpy基础学习

Inno setup package jar + H5 + MySQL + redis into exe

8.数学运算与属性统计

数字图像处理——第九章 形态学图像处理

11.感知机的梯度推导
随机推荐
Rk3399 GPIO port how to find which GPIO port it is
MySQL limit分页查询优化实践
If the interviewer asks you about JVM, the extra answer of "escape analysis" technology will give you extra points
Do you really know session and cookies?
If you encounter oom online, how to solve it?
Es time query error - "caused_by": {"type": "illegal_argument_exception", "reason": "failed to parse date field
Numpy基础学习
13.逻辑回归
Web2.0 giants have deployed VC, and tiger Dao VC may become a shortcut to Web3
Fortex Fangda releases the electronic trading ecosystem to share and win-win with customers
GBASE 8C——SQL参考6 sql语法(14)
Move protocol launched a beta version, and you can "0" participate in p2e
vscode打造golang开发环境以及golang的debug单元测试
如果在线上遇到了OOM,该如何解决?
16.过拟合欠拟合
Day14. 用可解释机器学习方法鉴别肠结核和克罗恩病
dpdk 网络协议栈 vpp OvS DDos SDN NFV 虚拟化 高性能专家之路
Gbase 8C - SQL reference 6 SQL syntax (5)
你真的了解 Session 和 Cookie 吗?
Minio8.x version setting policy bucket policy