python - 无法从 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有关,但我不知道如何解决
解决方案
我找到了一个快速修复。显然,这个想法是使用“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
推荐阅读
- apollo-server - 是否可以为 Apollo Server 附带的 GraphQL Playground 定义 HTTP 标头?
- angular - 在编辑模式下打开表单时,Angular Reactive Form 发生变化
- python - 我需要使用 python 有效地分批将数据从 csv 文件导入到 postgresql 表中
- ksqldb - Windows下如何安装mongoDb连接器?
- python - 如何 conda 打包基础环境
- c++11 - 我有一组用户定义的数据类型,并在结构中使用该组变量。我想比较 set 的值。我将如何做到这一点
- java - 更新到 64 位 java 后长到整数转换的溢出警告
- javascript - 添加新输入字段不会更新现有输入字段的值
- amazon-web-services - AWS SAM 部署配置问题
- python - 使用pyqt5设计器制作指定表