Win10中Python3.8调用动态链接库时报错:FileNotFoundError: Could not find module解决方案
·
目录
1 问题
在python3.8中调用动态链接库时报错,代码如下
import platform
from ctypes import *
if platform.system().lower() == 'windows':
self.lib = cdll.LoadLibrary('./platform/percipio_cam.dll')
else:
self.lib = cdll.LoadLibrary('./platform/libpercipio_cam.so')
报错信息为:FileNotFoundError: Could not find module 'D:\PycharmProject\AutoNeck\platform\percipio_cam.dll' (or one of its dependencies). Try using the full path with constructor syntax.具体如下图所示
2 原因
这段程序放在python3.6环境中运行是没有问题的,但是python3.8环境中会报错。具体原因在于python3.8变更了Windows下动态链接库(DLL)的加载规则。新的规则提高了安全性,默认情况下仅能从可信的位置加载DLL依赖,一定程度上比避免诸如DLL劫持之类的安全风险。
3 解决方案
解决方案有多种,这里仅提供一种。只需要稍微修改一下代码即可,具体如下:
import platform
from ctypes import *
if platform.system().lower() == 'windows':
self.lib = CDLL('./platform/percipio_cam.dll', winmode=0)
else:
self.lib = cdll.LoadLibrary('./platform/libpercipio_cam.so')
指定winmode参数(该参数将指定底层调用WinAPI LoadLibraryEx时所使用的flags),将值指定为可以从本地路径加载,替换掉默认行为。
此时我们就可以正常加载DLL文件啦!
更多推荐
已为社区贡献10条内容
所有评论(0)