结构体
结构
2023-09-14 09:10:33 时间
在C语言的世界里,程序的组成就是结构体加算法。因此,与Win32的API交互中,肯定少不了结构体的类型。在Python里定义的类,并不能直接使用于C的函数,需要通过ctypes里的结构类继承之后,并按它的格式填写字段才可以使用。下面的例子就是定义一个最简单的结构体,表示屏幕上一个点的坐标的结构体,如下:
#windows应用程序
#开发人员:蔡军生(QQ:9073204) 深圳 2014-8-14
from ctypes import *
class POINT(Structure):
_fields_ = [("x", c_int),
("y", c_int)]
#
point = POINT(10, 20)
print(point.x, point.y)
point = POINT(y=5)
print(point.x, point.y)
在这个例子里,定义了一个类POINT继承ctypes库中的Structure类,并在类POINT里的成员列表_fields_进行赋值,每个结构体的成员都是使用一个两个元素的元组表示(("x", c_int))。元组的第一个字段是表示字段的名称,第二个表示这个字段的类型。通过这种方式就可以描述了C语言里定义的结构体。在结构体里,还可以使用已经定义好的结构体,如下例子:
class FILETIME(ctypes.Structure):
_fields_ = [("dwLowDateTime", DWORD),
("dwHighDateTime", DWORD)]
...
class WIN32_FIND_DATAA(ctypes.Structure):
_fields_ = [("dwFileAttributes", DWORD),
("ftCreationTime", FILETIME),
("ftLastAccessTime", FILETIME),
("ftLastWriteTime", FILETIME),
("nFileSizeHigh", DWORD),
("nFileSizeLow", DWORD),
("dwReserved0", DWORD),
("dwReserved1", DWORD),
("cFileName", CHAR * MAX_PATH),
("cAlternateFileName", CHAR * 14)]
在WIN32_FIND_DATAA结构体里,就引用了自定义的结构体FILETIME作为类型声明。在Python里定义与C接口交换数据的结构体,最特殊的一点是一定要继承类ctypes.Structure,否则使用不了,一定要记住这一点。
相关文章
- 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多
- 硬盘是如何存储数据的:硬盘的物理结构
- Python分支结构详解(二)——程序异常处理
- NLP之ELMo:ELMo模型的简介(解决一词多义的思路)、结构(预训练过程、如何使用ELMo的编码值、推理过程)之详细攻略
- 从五大结构体,带你掌握鸿蒙轻内核动态内存Dynamic Memory
- 【Linux 内核 内存管理】内存映射相关数据结构 ② ( vm_area_struct 结构体成员分析 | vm_mm 成员 | vm_page_prot 成员 | vm_flags 成员 )
- 信息学竞赛基础之结构体排序
- 【微信小程序】深入学习小程序基本目录文件与代码结构
- 风格迁移1-08:Liquid Warping GAN(Impersonator)-源码无死角解析(3)-模型总体结构
- 改进YOLOv7系列:25.YOLOv7 加入RepVGG模型结构,重参数化 极简架构
- 【YOLOv7/YOLOv5系列改进NO.51】融入多分支空洞卷积结构RFB-Bottleneck改进PANet构成新特征融合网络