ctypes/cffi 模块允许 Python 直接加载并调用动态链接库中的 C 函数,不需要编写 C 代码进行包装。其中 ctypes 是 Python 的内置库,而 cffi 是第三方库,性能更好且支持 PyPy.缺点是不支持 C++ 库(因为有 Name Mangling 和重载),只能 C 库。
使用方法是:
- 先将 C 语言代码编译出
.dll/.so动态库 - 在 Python 里
import ctypes,然后用lib = ctypes.CDLL('xxxx.so')加载动态库 - 对于每一个要调用的函数,定义其
- 参数类型
lib.<function_name>.argtypes - 返回类型
lib.<function_name>.restype
- 参数类型
- 用
lib.<function_name>(......)调用函数
对于 lib.<function_name>(......) 中的函数参数,需要用 ctypes 中定义的 C 语言类型,如 c_int64 等等;遇到自定义数据类型的时候,还需要用 c_pointer 进行传递.
1 | # toy example |