使用ctypes加载C++ DLL遇FileNotFoundError,是否需引入头文件?
问题分析与解决
首先明确:ctypes加载DLL完全不需要C++头文件,头文件是给C/C++编译阶段用的,Python调用DLL只需要DLL文件本身;后续如果要调用DLL里的函数,只需要手动指定函数的参数类型和返回类型就行,和头文件没关系。
接下来针对你加载B.dll的报错,给几个排查方向:
- 直接用完整路径加载B.dll,避免路径解析问题:
B = ctypes.cdll.LoadLibrary(r"C:\Users\{user}\PycharmProjects\pythonProject\B.dll") - 检查A.dll和B.dll的位数是否与Python匹配:如果你的Python是64位,两个DLL必须都是64位;如果是32位Python,DLL也得是32位,位数不匹配会触发依赖找不到的错误。
- 检查B.dll是否有其他缺失的依赖:除了A.dll,B可能还依赖系统组件(比如VC++运行库),可以用
dumpbin /dependents B.dll(需要VS工具链)或者Dependency Walker工具查看B.dll的所有依赖项,确认有没有缺失的文件。 - 尝试把DLL目录加到系统PATH里:有时候
add_dll_directory的优先级不如PATH,代码里可以临时添加:import os import ctypes dll_dir = r"C:\Users\{user}\PycharmProjects\pythonProject" os.environ['PATH'] = dll_dir + ';' + os.environ['PATH'] A = ctypes.cdll.LoadLibrary("A.dll") B = ctypes.cdll.LoadLibrary("B.dll")
内容的提问来源于stack exchange,提问作者fault
相关产品推荐
相关产品推荐

