1、基本概念
- 加载动态库:使用 ctypes.CDLL 或 ctypes.WinDLL 加载动态链接库。
- 定义 C 数据类型:使用 ctypes 提供的类型,如 c_int, c_double, c_char_p 等。
- 调用 C 函数:通过加载的库对象调用函数,并传递适当的参数。
2、加载动态库
import ctypes
# 加载共享库(Linux)
lib = ctypes.CDLL('./mylib.so')
# 加载 DLL(Windows)
# lib = ctypes.WinDLL('mylib.dll')
3、定义 C 数据类型
ctypes 提供了多种 C 兼容的数据类型:
- c_int:表示 C 的 int 类型
- c_double:表示 C 的 double 类型
- c_char_p:表示 C 的 char * 类型(字符串)
- c_void_p:表示 C 的 void * 类型(通用指针)
4、调用 C 函数
假设我们有一个 C 函数 int add(int a, int b),我们可以这样调用它:
# 定义函数原型
lib.add.argtypes = [ctypes.c_int, ctypes.c_int]
lib.add.restype = ctypes.c_int
# 调用函数
result = lib.add(5, 3)
print(result) # 输出 8
5、处理复杂数据类型
对于更复杂的数据类型,如结构体和数组,可以使用 ctypes 的 Structure 和 Array。
5.1、结构体
假设我们有一个 C 结构

最低0.47元/天 解锁文章
3534

被折叠的 条评论
为什么被折叠?



