Python ctypes 教程

轻松调用 C 语言函数,无需编写 C 扩展

什么是 ctypes?

ctypes 是 Python 标准库中的一个模块,用于在 Python 中加载和调用动态链接库(如 Windows 的 .dll 或 Linux/macOS 的 .so/.dylib),并能与 C 兼容的数据类型进行交互。

它无需编译,纯 Python 实现,非常适合快速集成已有的 C 库。

基础用法示例

以下代码展示了如何调用系统标准 C 库中的 printf 函数(Linux/macOS):

import ctypes

# 加载 C 标准库(Linux/macOS)
libc = ctypes.CDLL("libc.so.6")  # macOS 可能是 libSystem.dylib

# 调用 printf
libc.printf(b"Hello from C!\\n")

在 Windows 上调用 msvcrt.dll

import ctypes

msvcrt = ctypes.CDLL("msvcrt.dll")
msvcrt.printf(b"Hello from Windows C!\\n")

数据类型映射

ctypes 提供了与 C 类型对应的 Python 类型:

示例:传递参数并获取返回值

import ctypes

libc = ctypes.CDLL("libc.so.6")
libc.abs.argtypes = [ctypes.c_int]
libc.abs.restype = ctypes.c_int

result = libc.abs(-42)
print(result)  # 输出: 42

定义 C 结构体

可以使用 ctypes.Structure 定义与 C 对应的结构体:

import ctypes

class Point(ctypes.Structure):
    _fields_ = [("x", ctypes.c_int),
                ("y", ctypes.c_int)]

p = Point(10, 20)
print(f"Point: ({p.x}, {p.y})")

常见问题与技巧

  1. 字符串必须是 bytes:传入 C 函数的字符串需用 .encode() 转换。
  2. 指定 argtypes 和 restype:避免类型错误,提高稳定性。
  3. 处理回调函数:使用 ctypes.CFUNCTYPE 定义 Python 回调供 C 调用。
  4. 跨平台注意库名差异:Windows 用 .dll,Linux 用 .so,macOS 用 .dylib

实战:调用自定义 C 库

假设你有一个 C 文件 math_utils.c

// math_utils.c
int add(int a, int b) {
    return a + b;
}

编译为共享库:

# Linux
gcc -shared -fPIC -o libmath.so math_utils.c

# Windows (MinGW)
gcc -shared -o math.dll math_utils.c

Python 调用:

import ctypes

lib = ctypes.CDLL("./libmath.so")  # 或 ./math.dll
lib.add.argtypes = [ctypes.c_int, ctypes.c_int]
lib.add.restype = ctypes.c_int

print(lib.add(3, 5))  # 输出: 8
iPhone手机发烫?快关掉这个功能!降温小技巧全解析 Python IDE 推荐与使用指南|高效开发必备工具 Python True-探索 Python 编程语言的真相与魅力 Python pip 安装第三方库完整指南|快速上手与常见问题 iPhone Air 电池容量是多少毫安?全面解析与对比 How Is the Panda?|Learn About Giant Pandas 韩版iPhone能用国内的卡吗?全面解析与使用指南 Python 编译器与 IDE 推荐指南|高效开发必备工具 Bon Appétit-探索全球美食与烹饪灵感 Pokémon HOME怎么下载-78TP下载指南与使用教程 To Something:探索无限可能的旅程 ExplanaTon-深入浅出的解释与理解指南 你喜欢熊猫吗?探索可爱国宝的奇妙世界 Shine跨境平台-一站式全球电商出海解决方案 Python中get()方法的用法详解-字典安全取值技巧 Pokémon HOME 7LONGWEN中文|宝可梦存储与交换平台 Endorphio情侣名生成器-甜蜜专属昵称灵感库 iPhone手机发烫怎么解决?全面降温方法汇总 iPhone日版和韩版哪个好?全面对比与选购指南 pioneers怎么读英语-英语发音指南与词义解析 Colt Python-轻量级高性能 Python Web 框架 国家开放大学在线学习平台-开放教育 · 终身学习 Python编程语言-强大、简洁、高效的开源软件开发利器 iPhone 17 Pro Max 提前发货|最新消息与预订详情 装了 Python 没有 pip?快速解决方法指南 港版iPhone可以在大陆售后吗?全面解析2026最新政策 Switch无法进入eShop?原因与解决方法全解析 Invalid Python Interpreter Name 错误详解与解决方案 pip在Python的哪个位置?全面解析pip安装路径与使用方法 Pioneer先锋音响说明书-78TP使用指南与操作手册 大象专题页-探索地球上最温柔的巨兽 Champion短袖T恤-经典舒适,潮流之选 MicroPython Web 开发指南|轻量级物联网Web应用入门 eshop美服7LONGWEN-美国任天堂eShop正版游戏下载与充值平台 港版iPhone双卡功能详解-支持双实体SIM卡的iPhone型号指南 日版 iPhone 11 在中国大陆能用吗?全面解析网络兼容性与使用建议 Python heapq 模块详解-堆队列算法指南 蒙奇奇 Monchhichi 78TP专题页-可爱玩偶与童年回忆 OpenCV-Python 入门指南与实战示例|计算机视觉开发 Explanation词性转换详解|英语语法学习专题 Pioneer是什么品牌?先锋电子品牌介绍与产品概览 It Is Wise to Do Something-智慧行动指南 解决“打不开 IDLE (Python)”的常见问题与方法 Python 读音详解|正确发音、音频示例与常见误区 Pionneer下载-安全高速免费获取最新版Pionneer软件 Pioneer NPV加速器-加速企业价值增长的智能决策平台 Python 中的 Encoding 含义详解|字符编码入门指南 SHEIN股权结构解析|公司背景、投资方与未来展望 探索“Something”:未知中的无限可能 iPhone Air能双卡吗?全面解析苹果手机双卡功能 Like Many People — 探索我们共同的生活体验 Python 自带 IDLE 入门指南-轻量级开发环境介绍 Champion × 三叶草联名系列|潮流运动新风尚 新加坡买的iPhone回国能用吗?全面解析支持频段与使用建议 Shopee头像设计灵感与设置指南-打造你的专属Shopee形象 Protension:探索张力与潜能的交汇点 Shopee卖家入门与进阶教程-从开店到爆单全指南 Python property() 函数详解-面向对象编程中的属性管理 incorporates怎么读-英文单词发音、释义与用法详解 Python如何下载pip-完整安装指南 iPhone Air 港版在国内能用吗?全面解析与实测指南 响应式网页设计指南|打造适配所有设备的现代网站 Python bin() 函数详解-十进制转二进制的利器 Chainsmokers 正确发音指南-美式英语读音与音频示例 iPhone 11 退回旧版本 iOS 系统完整指南 Champion几线品牌?正品解析与选购指南 Python IDLE 入门指南-轻量级 Python 集成开发环境 Python strip() 函数详解-字符串去空格与指定字符 Do Some Things-开启你的行动清单,从今天开始改变生活 Python time.localtime() 详解-获取本地时间的常用方法 “potential”可以加s吗?英语用法详解-语言小课堂 台版iPhone大陆能用吗?全面解析与使用指南 pioneer怎么发音-英语单词发音指南 Incotporate-探索创新与协作的未来工作方式 iPhone Air 可以双卡吗?全面解析苹果手机双卡功能 Python 时间处理完全指南-datetime、time 模块详解 Endorphinspro4龙年-龙腾盛世,活力绽放 BAPE × Champion 联名系列|潮流文化专题 对她好一点-用温柔和行动表达爱 SHEIN财报分析-快时尚巨头的财务表现与市场趋势 iPhone银色是白色吗?全面解析苹果银色配色真相 Prorino胶囊-支持肠道健康与免疫平衡的益生菌配方 Nintendo Switch 游戏主机专题-掌机与家用机的完美融合 Nintendo Switch App下载-78TP应用介绍与使用指南 Python中sep参数的作用详解-快速掌握print函数分隔符用法 iPhone怎么导出B站缓存视频?详细教程与注意事项 Lithosphere 翻译-岩石圈详解与中文释义 Shopee图片尺寸指南-优化商品主图、详情页与头像推荐尺寸 School Supplies 翻译大全-学习用品中英文对照指南 Shopee虾皮招聘-加入我们,共创电商未来 三亚免税店iPhone 17最新优惠-免税购机指南 Python str 转 byte 详解|字符串与字节转换指南 eShop商店-精选好物,品质生活 iPhone 17在哪里生产的?最新产地与供应链解析 Champion中国老-经典传承,潮流新生 Pioneer是什么电视?品牌历史、产品特点与选购指南 探险之旅|探索未知世界,开启你的 Expediction Shopee 2026秋季校园招聘-加入我们,共创电商未来 Python int() 函数详解-类型转换与使用示例 One Chain 是什么意思?全面解析 One Chain 的定义、用途与未来发展