python内置库之学习ctypes库(一)
ctypes库踩坑日记1
- 1.引言(这里是讲的windows下调用的方式)
- 2.结构体
- 3.联合体(共用体)
- 和上面结构体用法类似,只不过这里继承的是`Union`类
- 4.进阶用法
- 5.接受返回的值
- 6.数据类型
1.引言(这里是讲的windows下调用的方式)
直接上代码
代码片
.
# An highlighted block
from ctypes import *
class MyDll(object):def __init__(self,DLL_path):self.__dll=WinDLL(DLL_PATH)self.handle=Nonedef handle(self):"""一般开始都要先获取句柄"""res=self.__dll.获取句柄的函数self.handle=res
#注:这里如果获取的返回的内容和文档预期的不太一样,就要设置返回值
类型(默认返回值类型是int类型),本人用的c_byte类型才得到想要的内容
def fanc_type(fanc):fanc.restype=c_byte
2.结构体
1.非常简单的一个结构体
from ctypes import *
class POINT(Structure):_fields_ = [("x", c_int),("y", c_int)]point = POINT(10, 20)
print(point.x, point.y)
2.带数据长度的结构体
from ctypes import *
class POINT(Structure):_fields_ = [("x", c_int*10),("y", c_int*5)]
3.结构体嵌套结构体
from ctypes import *
class POINT_B(Structure):_fields_ = [("y", c_int),]
class POINT(Structure):_fields_ = [("x", POINT_B*10),]
3.联合体(共用体)
from ctypes import *
class POINT(Union):_fields_ = [("x", c_int*10),]
和上面结构体用法类似,只不过这里继承的是Union
类
4.进阶用法
回调函数暂时没有用到
有的时候结构体中需要做判断
from ctypes import *
class POINT(Structure):if a>5:_fields_ = [("x", c_int*10),("y", c_int*5)]elif a=5:_fields_=[("x", c_int*15),("y", c_int*5)]else:_fields_=[("x", c_int*15),]
5.接受返回的值
通常获取到值,如果有很多取值非常麻烦
例如:
res=...........
print(res.content1)
print(res.content2)
这样取值很麻烦
所以写了个函数来专门取里面的内容,有待改进,目前已经可以应对
大部分的结构体
from ctypes import *
def dump_dict(structure):"""结构体转字典传入一个结构体返回一个字典实现原理:# 通过_fields_获取每一个字段# 检查每个字段的类型,根据不同类型分别处理# 支持递归迭代"""if 'contents' in dir(structure):structure = structure.contentsif 'value' in dir(structure):return structure.valueinfo = {}if '_fields_' in dir(structure):for k, v in structure._fields_:av = getattr(structure, k)if type(v) == type(Structure):av = dump_dict(av)elif type(v)==type(Union):av = dump_dict(av)elif type(v) == type(Array):try:av = cast(av, c_char_p).value.decode()except:av='Array_Dict_Error' else:passinfo[k] = avreturn info
6.数据类型
官方基本都有:
只有这几种用的时候用的见名不知意,语义化不是很好
ctypes类型 | C类型 | Python 数据类型 |
---|---|---|
c_char | char | 单字符字节串对象 |
c_byte | char | int |
c_ubyte | unsigned char | int |
待续…
python内置库之学习ctypes库(一)相关推荐
- python内置库之学习ctypes库(二)
ctypes库踩坑日记2 一.自己实现一个dll文件,再用python的ctypes库调用思路1更清晰 二.生成dll文件 三.ctypes库调用 一.自己实现一个dll文件,再用python的cty ...
- python内置库之学习ctypes库(三)--调用Win32API
ctypes库踩坑日记3 1.调用win32的api 2.最好让结构体和程序分开 3.取完数据找到对应信息,创建code.py 4.创建main.py,代码这样看着就很简洁 1.调用win32的api ...
- python内置函数open_Python学习教程:Python内置函数大总结(下篇)
这里接着上次的 Python学习教程,给大家总结了Python 剩下的33个内置函数. 31 hash() 返回对象的哈希值 In [112]: hash(xiaoming)Out[112]: 613 ...
- python 内置函数 builtins_python学习笔记(七)——内置函数
builtins.py模块,是python的内建模块,在运行时会自动导入该模块.在该模块中定义了很多我们常用的内置函数,比如print,input 等. 在 builtins.py 模块中给出如下注释 ...
- python内置库之学习configparser库(一)
python内置库之学习configparser库(一) 1.引言 ini文件简介 [节] 键=值 注:节不能重复出现 2.自己封装了一个增删改查的类,可以参考一下 import configpars ...
- python内置标准库不可以处理的文件是_精华 | 140种Python标准库、第三方库和外部工具都有了...
原标题:精华 | 140种Python标准库.第三方库和外部工具都有了 作者 | 宋天龙 来源 | 大数据(ID:hzdashuju) [导读]Python数据工具箱涵盖从数据源到数据可视化的完整流程 ...
- random输出1到10之间_第43P,随机数,Python内置库之random
大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第43篇文章,第二阶段的课程:Python基础知识:Python内置库之random随机库. 学习本课程,建议先看一遍:[计算机基础 ...
- python内置函数用来返回列表、元组、字典_python程序设计第一章基础知识 题库及选解...
由于学校的python是笔试,所以找了份感觉比较好的题库刷了下其中前八章的填空和判断,附上选解.各章链接如下 填空 1. Python安装扩展库常用的是()工具.(pip) 2. Python标准库m ...
- python内置库有哪些_python 内置库
广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! version: 0. 2.0, configurations: }, de ...
最新文章
- char s[0] do{}while(0)
- CSS浏览器兼容性问题
- C/C++——输入输出字符相关,cin.get()、getchar()和cin.getline()
- HDOJ2035 人见人爱A^B
- BZOJ4545: DQS的trie 广义后缀自动机_LCT
- Lync和Exchange 2013集成PART4:配置统一存档
- 三款最安全的Linux操作系统(适合从事网络安全工作者使用)
- Mybatis plus 开启日志
- c++ 构造函数数组_从 JS 数组操作到 V8 array.js
- linux 扩展挂载盘大小_Linux 挂载新添加磁盘LVM配置
- 基于C#的socket编程的TCP异步实现
- 微型计算机控制技术第二版答案第四章,微型计算机控制技术答案第四章2.pdf
- 修改jsp文件刷新网页没有更新
- VS2005 安装 WTL80
- java分布式日志组件
- 163电子邮箱怎么注册申请?手机号注册电子邮箱的小技巧
- 微信订阅号之1-注册
- 软件与哲学(2)——对不同世界的抽象
- MFC打印及打印预览
- [搜索] Solr (三) 全量索引与增量索引
热门文章
- kotlin设置CORS跨域资源共享,java设置允许跨域,服务端如何设置 springboot中设置跨域资源共享
- 2021-2027年中国室内定位市场研究及前瞻分析报告
- 【转载】首次作品展小结
- Windows 64位下安装Redis详细教程
- 虚拟机环境下Centos7操作系统的详细安装教程
- matplotlib绘制热力图
- LeetCode简单题之机器人能否返回原点
- MindSpore静态图语法支持
- 拥挤场景中的目标检测
- 2021年大数据Flink(十五):流批一体API Connectors ​​​​​​​Kafka