有人尝试将 LibHaru 的 Python 绑定更新为 Python 3.9(64 位)吗?

WBOY
发布: 2024-02-09 08:54:27
转载
837人浏览过

有人尝试将 libharu 的 python 绑定更新为 python 3.9(64 位)吗?

问题内容

我正在运行 Python 3.9,64 位,并已使用 VS 2022 将 libharu 和一些扩展编译到 DLL 中,包括 libpng。在添加最少的代码调整以查找 VS 运行时 DLL(libhpdf)后,DLL 可以加载到 Python 中。 dll 依赖,并且似乎可以工作(绑定中只有 5 个 .py 文件) 我已经构建了启用 PTRACE 的 DLL,以跟踪进度。还使用该 DLL 动态构建了 C 演示,它们都可以工作,生成 PDF。

我正在尝试运行绑定中包含的 python 演示示例,arc_demo.py 希望生成相同的 PDF 文件

我可以说一切正常,直到添加文档的行: pdf = HPDF_New (error_handler, NULL) 与使用示例的编译 C 版本获得的跟踪类似的输出。

但是... var“pdf”不是 HP_AddPage() 所期望的,因为在发出下一个调用时,要添加页面 page = HPDF_AddPage (pdf) 我遇到了这个: **ctypes.ArgumentError:参数 1:<class 'OverflowError'>:int 太长,无法转换**

我认为这可能与原始绑定仅使用 32 位构建和测试有关。另一个嫌疑点是移植的 ctypes。

所以现在我正在修改绑定,主要是hpdf.py。 目前,正在与 Python 到 DLL 的相互通信进行斗争,检查 ctypes 是否按预期处理事情。使用 byref ,将 *pdf * 转换为 c_void_p,...没有运气。如果调用是通过 ref(c_void_p(pdf)) 完成的,我会消除错误,但无法正确访问 HPDF_Doc 结构的内容

有什么建议吗?你可能会提供帮助吗?使用基于 C 的 DLL 调试 Python 的对比方法?

谢谢, 伊格纳西奥

PS:最终将为 Haru PDF 内部结构编写类。但这会在我能够无错误地运行 python 示例之后发生。


正确答案


if/python/hpdf.py中的ctypes接口没有为所有函数定义.argtypes。对于 64 位句柄和指针来说,为每个函数定义正确的参数类型尤其重要。最初的开发人员可能不明白这一点,如从 windll 转换为 cdll 接口所示。 windll 使用 __stdcall 调用约定并需要知道参数大小。

立即学习Python免费学习笔记(深入)”;

白瓜面试
白瓜面试

白瓜面试 - AI面试助手,辅助笔试面试神器

白瓜面试 40
查看详情 白瓜面试

例如,hpdf_doc 被定义为 hpdf_handle,它被定义为 ctypes.c_void_p。这是 64 位操作系统上的 64 位指针。 hpdf_newhpdf_addpage 定义为:

#hpdf_doc hpdf_new (hpdf_error_handler user_error_fn, void *user_data)
hpdf_new=haru.hpdf_new
hpdf_new.restype=hpdf_doc

#hpdf_page hpdf_addpage (hpdf_doc pdf)
hpdf_addpage=haru.hpdf_addpage
hpdf_addpage.restype=hpdf_page
登录后复制

ctypes 假设传递给 hpdf_addpage 的参数是 c_int 因为 to 没有 argtypes。句柄值是 >32 位,因此出现错误。理想情况下,所有函数都应显式声明其参数类型,以便 ctypes 可以进行类型检查并正确地将参数从 python 对象编组(转换)为 c 类型,例如:

HPDF_AddPage.argtypes = HPDF_Doc,  # must be a list or tuple...comma makes this a 1-tuple.
HPDF_New.argtypes = HPDF_Error_Handler, c_void_p
登录后复制

请注意,参数类型必须基于 ctypes 类型。您必须仔细跟踪参数并为每个函数声明 .argtypes

以上就是有人尝试将 LibHaru 的 Python 绑定更新为 Python 3.9(64 位)吗?的详细内容,更多请关注php中文网其它相关文章!

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:stackoverflow网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号