做项目的时候,由于需要做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了
对于这种问题,我总结了两个原因:
- 首先就是检查dll文件路径是否正确,如果正确那就是第二个原因了
- 在我们生成自定义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
举个例子