You need to enable JavaScript to run this app. 使用ctypes加载C++编译的XX.dll时报错无法加载mscvr90.dll如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用ctypes加载C++编译的XX.dll时报错无法加载mscvr90.dll如何解决

问题解决指南:Python调用C++ XX.dll时提示找不到mscvr90.dll

报错根因

mscvr90.dll是Microsoft Visual C++ 2008 Redistributable运行时库的核心文件,你所持有的XX.dll是基于VS2008编译生成的,运行时强制依赖该版本的运行时组件,系统中未安装对应组件、或者组件版本/架构不匹配时,就会触发找不到该dll的报错。

分步解决方案

方案1(优先推荐):安装对应版本VC运行时

  • 确认三个核心架构的一致性:XX.dll的编译架构、Python解释器的架构、VC运行时的架构三者必须完全匹配,例如你使用32位Python、32位XX.dll,哪怕系统是64位,也需要安装x86版本的VC2008运行时;如果是64位Python+64位XX.dll,安装x64版本的VC2008运行时即可。
  • 安装完成后重启你的代码编辑器/终端,重新执行加载dll的代码,90%以上的同类型问题都可以通过该方案解决。

方案2(安装运行时无效时使用):手动配置依赖路径

如果安装运行时后仍然报错,可通过手动指定依赖搜索路径解决:

  1. 先通过Dependency Walker工具打开XX.dll,确认依赖的mscvr90.dll的具体版本和架构,获取对应版本的mscvr90.dll文件并放到指定目录。
  2. 按Python版本选择对应的路径配置代码,再加载目标dll:
  • Python 3.8及以上版本:
import os
import ctypes
# 替换为mscvr90.dll和XX.dll所在的目录路径
os.add_dll_directory("C:/path/to/your/dll_dir")
xx_dll = ctypes.cdll.LoadLibrary("XX.dll")
  • Python 3.7及以下版本:
import os
import ctypes
# 替换为mscvr90.dll和XX.dll所在的目录路径
os.environ['PATH'] = "C:/path/to/your/dll_dir" + os.pathsep + os.environ['PATH']
xx_dll = ctypes.cdll.LoadLibrary("XX.dll")

额外注意事项

  • 你所持有的XX.h和XX.lib虽然不需要被ctypes直接加载,但你需要严格对照XX.h中的函数声明,为加载后的dll函数指定参数类型和返回值类型,否则会出现调用参数错乱、程序崩溃的问题,示例如下:

假设XX.h中存在函数声明:int calculate(int param1, double param2);
对应的ctypes配置代码:

xx_dll.calculate.argtypes = [ctypes.c_int, ctypes.c_double]
xx_dll.calculate.restype = ctypes.c_int
# 调用示例
result = xx_dll.calculate(10, 3.14)
  • 官方文档提到C++项目使用时XX.dll无需放到项目同级目录,仅需要添加到系统环境中,该规则对Python调用同样生效:你可以把XX.dll所在的路径添加到系统环境变量的PATH中,就不需要每次都手动指定路径。

内容的提问来源于stack exchange,提问作者Sylvain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 07:06:13