通过pypdfium2-team/ctypesgen 快速生成ctypes 代码

news/2025/10/16 8:01:49/文章来源:https://www.cnblogs.com/rongfengliang/p/19016127

通过pypdfium2-team/ctypesgen 快速生成ctypes 代码

以前说过ctypesgen 的作用,以下是一个简单试用

项目准备

  • 代码结构
├── add.c
├── add.h
├── add.so
├── app.py
├── common.h
├── init_patch.py
├── pyadd.py
└── README.md
  • 代码说明 add.h 是方法定义,add.c 是实现,pyadd.py 是通过ctypesgen 生成的代码,app.py是调用 add.h
#ifndef ADD_H
#define ADD_H
#include "common.h"int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
int divide(int a, int b);
User init_user(int id, const char *name);
#endif

common.h

#ifndef COMMON_H
#define COMMON_Htypedef struct {int id;const char *name;
} User;#endif // COMMON_H

add.c

#include "add.h"int add(int a, int b) {return a + b;
}User init_user(int id, const char *name) {User user;user.id = id;user.name = name;return user;
}int subtract(int a, int b) {return a - b;
}int multiply(int a, int b) {return a * b;
}
int divide(int a, int b) {if (b == 0) {// Handle division by zero errorreturn 0; // or some error code}return a / b;
}
  • 构建共享库
gcc -fPIC -shared add.c -o add.so

生成ctypes 代码

ctypesgen -i add.h -l add -L './add.so' -o pyadd.py
  • python 调用 app.py
rom pyadd import init_user,add,subtract,multiply,dividefrom ctypes import create_string_buffer,string_atname_buffer = create_string_buffer(b"dalong")
result = init_user(1, b"dalong")print("The result of init_user(1, 'dalong') is:", result.id, string_at(result.name))result = add(1, 2)
print("The result of add(1, 2) is:", result)result = subtract(5, 3)
print("The result of subtract(5, 3) is:", result)result = multiply(4, 3)
print("The result of multiply(4, 3) is:", result)result = divide(10, 2)
print("The result of divide(10, 2) is:", result)
  • 效果

image

说明

通过pypdfium2-team/ctypesgen 生成ctypes 调用代码还是很不错的,机制上比较符合我们平时的访问,就是目前默认生成方法中的_get_library 似乎不是很友好(默认实现比较中规中矩,很多时候我们对于lib的调用会有清晰的dir 命名,同时打包在一起,方便使用)目前这部分似乎不能自定义(还得研究下)

参考资料

https://github.com/pypdfium2-team/ctypesgen

https://github.com/rongfengliang/ctypesgen-learning

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/937963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GitHub每日速递 251016】23k star,Daytona:90ms内极速运行AI代码,安全弹性基础设施来袭!

原文: https://mp.weixin.qq.com/s/QkAYh9t3n41cADcQUi6FXw Daytona:90ms内极速运行AI代码,安全弹性基础设施来袭! 项目地址:https://github.com/daytonaio/daytona 主要语言:TypeScript stars: 23k仓库概述 Dayt…

用 【C# + Winform + Dlib68点】 实现静图眼镜虚拟佩戴 - 行人-

基于DlibDotNet,识别人脸68点关键点,通过眼镜标定功能,使虚拟眼镜能更自然地贴合人脸。采用.NET Framework 4.6.2开发,通过计算眼镜标定点与人眼位置的相对关系,实现眼镜对齐和缩放。关键步骤:人脸检测模型加载、…

图神经网络前沿技术与应用探索

本文深入探讨图神经网络在建模长距离依赖关系、提升计算效率以及新型因果模型方面的最新进展,涵盖算法优化、系统设计和硬件协同等多个技术层面,并介绍在知识图谱推理和多智能体系统等领域的创新应用。KDD 2023:图神…

MVCC、幻读、间隙锁与临键锁(三)

一、MVCC解决了什么问题? MVCC 解决了数据库高并发场景下的两大核心问题:读写阻塞:在传统的锁机制下,读操作可能会阻塞写操作,写操作也一定会阻塞读操作。当有大量读写操作并发时,数据库性能会急剧下降。事务隔离…

MVCC、幻读、间隙锁与临键锁

一、MVCC 解决了什么问题? 🌱 背景:并发读写冲突 当多个事务同时操作同一行时,最经典的冲突是:A 在读;B 在写;A 还没提交,B 改了数据;如何让 A 看到一致的结果?MVCC(Multi-Version Concurrency Control,多…

MVCC、幻读、间隙锁与临键锁(二)

1. MVCC 解决了什么问题? MVCC(多版本并发控制)是 MySQL InnoDB 存储引擎实现并发访问的核心机制,主要解决了读写冲突问题:在传统锁机制中,读操作需要加共享锁,写操作需要加排他锁,会导致 “读阻塞写、写阻塞读…

读AI赋能01超级能动性

读AI赋能01超级能动性1. 超级能动性 1.1. 通货膨胀已成为全球最令人担忧的问题 1.2. 科技行业仍难以摆脱广告业务放缓、投资者情绪转变以及用户参与模式变化带来的叠加影响1.2.1. 负面结果只是对科技行业在疫情期间出现…

生物聚酯塑料回收技术创新与商业应用

本文介绍了生物聚酯塑料的化学回收技术突破,包括EsterCycle低能耗甲醇解工艺和Glacier的AI视觉分拣系统,并通过商业试验验证了生物聚酯材料在零售场景中的应用效果,推动塑料循环价值链建设。更优塑料之路:进展与合…

189 轮转数组 - MKT

189 轮转数组 class Solution { public:// 通过1 time 0ms 100% space 30.mb 5% 自己 内存大void rotate1(vector<int>& nums, int k) {// 1 余数 2 是否大于边界// 10 6 16=6 12-10=2cout<<&quo…

SGD 到 AdamW 优化器的实践选型指南

在深度学习的模型训练过程中,优化器扮演着至关重要的角色。它就像一位经验丰富的向导,带领模型在复杂的参数空间中寻找最优解。从早期简单的随机梯度下降到如今广泛使用的 AdamW,优化器的发展历程充满了对效率与精度…

# ️ MySQL vs PostgreSQL架构深度对比分析报告

# ️ MySQL vs PostgreSQL架构深度对比分析报告Posted on 2025-10-16 02:32 吾以观复 阅读(1) 评论(0) 收藏 举报关联知识库:# ️ MySQL vs PostgreSQL架构深度对比分析报告️ MySQL vs PostgreSQL架构深度对比分…

# 韩国数据中心大火:647套系统因缺失双活集体宕机22小时

# 韩国数据中心大火:647套系统因缺失双活集体宕机22小时Posted on 2025-10-16 02:32 吾以观复 阅读(1) 评论(0) 收藏 举报关联知识库:# 韩国数据中心大火:647套系统因缺失双活集体宕机22小时韩国数据中心大火…

# TLP电池管理工具:Linux笔记本续航优化的终极指南

# TLP电池管理工具:Linux笔记本续航优化的终极指南Posted on 2025-10-16 02:32 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:# TLP电池管理工具:Linux笔记本续航优化的终极指南TLP电池管理工具:Linux笔记…

LlamaIndex API Example

LlamaIndex API ExamplePosted on 2025-10-16 02:32 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:LlamaIndex API ExampleReader and Query Engine documents = SimpleDirectoryReader(files).load_data() re…

AI中间件机遇与挑战:从Agent到组织级智能的技术演进

AI中间件机遇与挑战:从Agent到组织级智能的技术演进Posted on 2025-10-16 02:32 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:AI中间件机遇与挑战:从Agent到组织级智能的技术演进️ AI中间件机遇与挑战:从…

# Redis日常使用与性能排查指南

# Redis日常使用与性能排查指南Posted on 2025-10-16 02:32 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:# Redis日常使用与性能排查指南Redis日常使用与性能排查指南 草稿内容 常用命令:info指令 9大块 s…

金耀初讲座——高效演化神经结构搜索

金耀初讲座——高效演化神经结构搜索![assets/金耀初讲座——高效演化神经结构搜索/Untitled.png]] ![assets/金耀初讲座——高效演化神经结构搜索/Untitled 1.png]] ![assets/金耀初讲座——高效演化神经结构搜索/Unt…

二手车检查

二手车检查车源:二手车之家app和懂车帝app,因为上面车商具有营业资格,可初步筛选车商 询问时:漆面状态(哪些面补过漆) 换件情况 四门(大事故),四梁(前后横纵防撞梁),六柱(车身骨架),所有玻璃(批号显示…

图文并茂展示CSS li 排版大合集,总有一款是你刚好需要的

@目录🐱 A. 基础列表样式🌟 1. 默认样式📝 无序列表🔢 有序列表✨ 2. 自定义项目符号🚀 B. 高级布局与定位🖼️ 3. 使用图片作为项目符号🧹 4. 移除默认样式🧭 5. 水平导航栏💫 C. 创意与装饰效果�…

The lamentable decline of reading

https://www.ft.com/content/583de986-a295-4697-a2fe-3c6b13c99145 The lamentable decline of readingChildhood encouragement, libraries and government support can reverse the trendTHE EDITORIAL BOARDAdd to…