• 结构体


    C语言的世界里,程序的组成就是结构体加算法。因此。与Win32API交互中。肯定少不了结构体的类型。

    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,否则使用不了,一定要记住这一点。


  • 相关阅读:
    B树、B-树、B+树、B*树
    CentOS 7 源码编译安装PostgreSQL 9.5
    phpstorm里面无法配置deployment?
    Php7安装pdo_pgsql,pgsql扩展
    [xDebug] PhpStorm Xdebug远程调试环境搭建
    [xDebug]Xdebug和Sublime调试PHP代码
    [xDebug] 服务器端的配置参数
    [xDebug] php下的Debug的调试
    【转】漫画:什么是协程?
    【转】一个由正则表达式引发的血案----贪婪模式的回溯
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6971178.html
Copyright © 2020-2023  润新知