Python编程
Completion requirements
ctypes
[1] 是 Python 的一个外部函数接口模块(包含在 Python 2.5 及更高版本中),它允许你加载动态库并调用 C 函数。从技术上讲,这并不是扩展 Python,但它实现了扩展 Python 的主要原因之一:与外部 C 代码交互。
基础知识
使用 ctypes.CDLL
函数加载库。加载库后,库中的函数就可以像常规 Python 调用一样使用。例如,如果我们想放弃标准的 Python print 语句,而使用标准 C 库函数 printf
,你可以这样使用:
Python
from ctypes import *
libName = 'libc.so' # 如果你在基于 UNIX 的系统上
libName = 'msvcrt.dll' # 如果你在 Windows 上
libc = CDLL(libName)
libc.printf("Hello, World!\n")
当然,你必须使用与你的操作系统匹配的 libName
行,并删除另一行。如果一切顺利,你应该会在控制台上看到著名的 Hello World 字符串。
获取返回值
ctypes
默认任何给定函数的返回类型都是本机大小的有符号整数。有时你不希望函数返回任何内容,而其他时候,你希望函数返回其他类型。每个 ctypes
函数都有一个名为 restype
的属性。当你将一个 ctypes
类分配给 restype
时,它会自动将函数的返回值转换为该类型。
常用类型
ctypes 名称 | C 类型 | Python 类型 | 备注 |
---|---|---|---|
None | void | None | None 对象 |
c_bool | C99 _Bool | bool | |
c_byte | signed char | int | |
c_char | signed char | str | 长度为 1 |
c_char_p | char * | str | |
c_double | double | float | |
c_float | float | float | |
c_int | signed int | int | |
c_long | signed long | long | |
c_longlong | signed long long | long | |
c_short | signed short | long | |
c_ubyte | unsigned char | int | |
c_uint | unsigned int | int | |
c_ulong | unsigned long | long | |
c_ulonglong | unsigned long long | long | |
c_ushort | unsigned short | int | |
c_void_p | void * | int | |
c_wchar | wchar_t | unicode | 长度为 1 |
c_wchar_p | wchar_t * | unicode |
Last modified: Friday, 31 January 2025, 2:00 AM