首页 > 代码库 > 结构体
结构体
在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,否则使用不了,一定要记住这一点。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。