self._handle = _dlopen(self._name, mode) OSError: [WinError126] The specified module could not found

3 篇文章 0 订阅

做项目的时候,由于需要做dll来提速,但是经常性的爆出error

File "C:\Users\32373\AppData\Local\Programs\Python\Python37\lib\ctypes\__init__.py", line 434, in LoadLibrary
    return self._dlltype(name)
  File "C:\Users\32373\AppData\Local\Programs\Python\Python37\lib\ctypes\__init__.py", line 356, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found

实例代码如下

from ctypes import cdll
class Demo():
	def __init__(self):
		self.__path = "ZeissControl2.dll"
		self.__Library = cdll.LoadLibrary(self.__path)

也是困扰很久的一个bug了
对于这种问题,我总结了两个原因:

  1. 首先就是检查dll文件路径是否正确,如果正确那就是第二个原因了
  2. 在我们生成自定义dll的时候,一般都会去依赖各式各样的其它dll文件,所以我们要将调用的dll所依赖的其它dll文件也添加到程序运行目录下,一般这种情况下,程序就可以完美的跑起来了

但是,普遍情况下,自定义dll文件除了依赖指定的dll文件,也可能会依赖系统环境的dll文件
后者我们一般并不清楚到底依赖了哪些dll文件

幸好, visual studio 提供了dumpbin /dependents 工具来获取指定dll所依赖的dll文件列表
具体操作
开始菜单 ===>> visual studio 2017 or 2019 ===>> Developer Command Prompt for VS 2017 or 2019

打开终端后,输入dumpbin命令后可以看到
在这里插入图片描述
我们要查看指定dll文件依赖的其它dll文件列表命令如下

dumpbin /dependents your_dll_path

举个例子
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值