【问题标题】:Can't load library from ctypes无法从 ctypes 加载库
【发布时间】:2021-08-25 07:17:02
【问题描述】:
我想使用来自 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有关,但我不知道如何解决
【问题讨论】:
标签:
python
c++
dll
ctypes
【解决方案1】:
我找到了一个快速解决方法。
显然,这个想法是使用“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