尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

通过pypdfium2-team/ctypesgen 快速生成ctypes 代码
📅 发布时间:2026/6/20 11:58:54

通过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

相关新闻

  • 用 【C# + Winform + Dlib68点】 实现静图眼镜虚拟佩戴 - 行人-
  • MVCC、幻读、间隙锁与临键锁
  • 读AI赋能01超级能动性

最新新闻

  • 2026年大平层装修深度测评:如何为你的改善型住宅匹配最佳方案? - 速递信息
  • ARM Cortex-M4微控制器架构解析:从内核到低功耗设计实战
  • 肇庆黄金回收实测六家靠谱老店盘点 - 余生黄金回收
  • 从高危RCE漏洞到POC分析:实战环境搭建与防御体系构建
  • 2026年6月最新劳力士中国官方售后服务地址与客服电话网点列表 - 劳力士服务中心
  • 合肥中科信息工程学校 2026 秋季招生全解析,附官方正规报名入口 - 辛云教育资讯

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号