ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数。ctypes的官方文档在这里。
1. ctypes基本数据类型映射表
参数类型预先设定好,或者在调用函数时再把参数转成相应的c_***类型。ctypes的类型对应如下:
| ctypes type | C type | Python Type |
| c_char | char | 1-character string |
| c_wchar | wchar_t | 1-character unicode string |
| c_byte | char | int/long |
| c_ubyte | unsigned char | int/long |
| c_bool | bool | bool |
| c_short | short | int/long |
| c_ushort | unsigned short | int/long |
| c_int | int | int/long |
| c_uint | unsigned int | int/long |
| c_long | long | int/long |
| c_ulong | unsigned long | int/long |
| c_longlong | __int64 or longlong | int/long |
| c_ulonglong | unsigned __int64 or unsigned long long | int/long |
| c_float | float | float |
| c_double | double | float |
| c_longdouble | long double float | float |
| c_char_p | char * | string or None |
| c_wchar_p | wchar_t * | unicode or None |
| c_void_p | void * | int/long or None |
对应的指针类型是在后面加上"_p",如int*是c_int_p等等。在python中要实现c语言中的结构,需要用到类。
2. 加载DLL
访问dll,首先需引入ctypes库
from ctypes import *
假设你已经有了一个的DLL(名字是add.dll),且该DLL有一个符合cdecl(这里强调调用约定是因为,stdcall调用约定和cdecl调用约定声明的导出函数,在使用python加载时使用的加载函数是不同

本文介绍了如何在Python中利用ctypes库进行C风格变量的定义和调用C语言的DLL函数。ctypes提供了与C语言兼容的数据类型,包括基本数据类型映射、加载DLL、声明C变量、指针与引用、结构体处理、数组定义以及回调函数的使用。通过示例展示了如何在Python中创建和使用这些C风格的元素。
最低0.47元/天 解锁文章
1511

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



