已解决:Python ctypes加载dll模块提示找不到文件的问题
64位dll加载提示找不到模块但同路径32位dll可被识别的问题处理
问题现象
尝试使用如下代码加载目标dll文件:
os.add_dll_directory("C:\\path\\to\\file") library = ctypes.windll.LoadLibrary("C:\\path\\to\\file\\tdcbase.dll")
程序返回如下错误信息:
FileNotFoundError: Could not find module 'C:\path\to\file\tdcbase.dll' (or one of its dependencies). Try using the full path with constructor syntax.
测试覆盖的环境包括:
- Windows 11 + Python 3.9.7
- Windows 10 + Python 3.6/3.7/3.8/3.9.7
所有环境下问题均复现,初步排查同目录下不存在需要额外添加搜索目录的依赖项。
同路径下存放有该dll对应的32位版本tdbase.dll,在64位环境下尝试加载该32位文件时,返回明确的位数不匹配错误:
OSError: [WinError 193] %1 is not a valid Win32 application
该结果证明系统可以正常定位到同路径下的dll文件,排除路径配置错误的可能。
问题根因
错误提示里的(or one of its dependencies)是最容易被忽略的关键信息:抛出找不到模块的错误,不代表系统找不到你写在路径里的目标dll本身,也可能是加载目标dll的过程中,找不到它依赖的其他底层库。
多数人排查依赖时只会检查dll同目录下的文件,很容易漏掉硬件相关的驱动级依赖——这个场景下的tdcbase.dll是外接测量仪器的配套功能库,运行时依赖对应硬件的USB驱动底层文件,未安装驱动时系统找不到这部分依赖,就会统一抛出找不到目标模块的错误。
解决方案
安装对应外接仪器通信所需的官方USB驱动后,再次运行加载代码,dll即可正常加载,所有功能可正常运行。
内容的提问来源于stack exchange,提问作者quantumbee
相关产品推荐
相关产品推荐

