首页 > 解决方案 > 无法从 ctypes 加载库

问题描述

我想使用来自 python 的 C++ API。我拥有的文件是 XX.dll、XX.lib 和 XX.h

我拥有的唯一信息是:

注意:要在 C++ 项目中使用 XX 函数,您必须集成 XX 对象文件库“XX.lib”和 XX 头文件“XX.h”。XX DLL 必须添加到您的计算机环境中,但不一定要添加到 Visual Studio 项目的同一文件夹中。

我天真地尝试获取 .dll 并使用ctypes.cdll.LoadLibrary("XX.dll"),但是当我这样做时,python 尝试(并且失败)加载 mscvr90.dll。

我认为 mscvr90.dll 的问题与https://stackoverflow.com/a/27392347/12452727有关,但我不知道如何解决

标签: pythonc++dllctypes

解决方案


我找到了一个快速修复。显然,这个想法是使用“mt.exe”将清单合并到 dll 中。

清单“XX.dll.manifest”

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

所需的命令是 mt.exe -manifest XX.dll.manifest -outputresource:XX.dll;2


推荐阅读