为什么我无法在 Windows 上的 Python 3.8 中加载 DLL 模块?

Barbara Streisand
发布: 2024-10-28 21:29:02
原创
693 人浏览过

Why Can't I Load My DLL Module in Python 3.8  on Windows?

在 Windows 上用 Python 加载 DLL 模块时遇到的问题

最近尝试在 Windows 上导入已编译的 libuvc DLL 时出现错误“无法找到模块“libuvc.dll””。尽管使用 ctypes.util.find_library 正确找到了文件的路径,但 Python 无法加载它。问题出在 ctypes.cdll.LoadLibrary 函数中的 winmode 参数。

了解 Winmode 参数

在 Python 3.8 之前,winmode 不存在,mode 是直接设置为 ctypes.DEFAULT_MODE,它对应于零值。 Python 3.8 中引入了 winmode。

当 winmode 设置为 None 时,搜索模式默认为 nt._LOAD_LIBRARY_SEARCH_DEFAULT_DIRS。此搜索模式不考虑环境变量或路径的更改。

但是,将 winmode 设置为 0 指定应使用完整路径,并且库加载成功。 Microsoft 文档 (https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryexa) 中记录了此行为。

解决问题

要解决加载问题,只需在调用 ctypes.cdll.LoadLibrary 时指定 winmode=0 即可,如以下代码片段所示:

import ctypes

name = ctypes.util.find_library('libuvc')
lib = ctypes.cdll.LoadLibrary(name, winmode=0)
登录后复制

以上是为什么我无法在 Windows 上的 Python 3.8 中加载 DLL 模块?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!