Python中的dll调用-ni.845x驱动编写
2021/6/5 20:23:57
本文主要是介绍Python中的dll调用-ni.845x驱动编写,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
ctypes
是 Python 的外部函数库。它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的函数。可使用该模块以纯 Python 形式对这些库进行封装。
ctypes.
byref
(obj[, offset])--传递引用数据
返回指向 obj 的轻量指针,该对象必须为一个 ctypes 类型的实例。 offset 默认值为零,且必须为一个将被添加到内部指针值的整数。
ctypes.
create_string_buffer
(init_or_size, size=None)--传递块数据(数组,字符串等)
此函数会创建一个可变的字符缓冲区。 返回的对象是一个 c_char
的 ctypes 数组。
init_or_size 必须是一个指明数组大小的整数,或者是一个将被用来初始化数组条目的字节串对象。
如果将一个字节串对象指定为第一个参数,则将使缓冲区大小比其长度多一项以便数组的最后一项为一个 NUL 终结符。 可以传入一个整数作为第二个参数以允许在不使用字节串长度的情况下指定数组大小。
参考代码如下:
''' 作者:*** 功能:ni845x驱动程序 日期:2021/6/3 版本:V0 ''' from tkinter import messagebox import ctypes ni845x = ctypes.WinDLL('Ni845x.dll') Address = 0xb6 ClockRate = 100 errorStr = '' pFirstDevice = ctypes.create_string_buffer(260, '\0') pErrorStr = ctypes.create_string_buffer(1024,'\0') pDeviceHandle = ctypes.c_uint32(0) pConfigHandle = ctypes.c_uint32(0) pNumberFound = ctypes.c_uint32(0) pWriteData = ctypes.create_string_buffer(256, '\0') pReadData = ctypes.create_string_buffer(512, '\0') readSize = ctypes.c_uint32(0) writeLength = 0 readData = [] def openDevice(address): errorStr='' checkError(ni845x.ni845xFindDevice(pFirstDevice, ctypes.byref(pDeviceHandle), ctypes.byref(pNumberFound))) checkError(ni845x.ni845xCloseFindDeviceHandle(pDeviceHandle)) checkError(ni845x.ni845xOpen(pFirstDevice, ctypes.byref(pDeviceHandle))) checkError(ni845x.ni845xI2cConfigurationOpen(ctypes.byref(pConfigHandle))) setAddress(address) setClock(ClockRate) def closedDevice(): ni845x.ni845xI2cConfigurationClose(pConfigHandle) ni845x.ni845xClose(pDeviceHandle) def write(writeData): writeLength = len(writeData) for index in range(writeLength): pWriteData[index] = writeData[index] if writeLength > 0: checkError(ni845x.ni845xI2cWrite(pDeviceHandle, pConfigHandle, writeLength, pWriteData)) def read(readLength): readData=[] if readLength > 0: checkError(ni845x.ni845xI2cRead(pDeviceHandle, pConfigHandle, readLength, ctypes.byref(readSize), pReadData)) if readSize.value > 0: readData = [pReadData[index] for index in range(readSize.value)] return readData def writeRead(writeData, readLength): readData = [] writeLength = len(writeData) for index in range(writeLength): pWriteData[index] = writeData[index] if readLength > 0: checkError(ni845x.ni845xI2cWriteRead(pDeviceHandle, pConfigHandle, writeLength, pWriteData, readLength, ctypes.byref(readSize), pReadData)) if readSize.value > 0: readData = [pReadData[index] for index in range(readSize.value)] return readData def setAddress(address): checkError(ni845x.ni845xI2cConfigurationSetAddress(pConfigHandle, address >> 1)) def setClock(clockRate): checkError(ni845x.ni845xI2cConfigurationSetClockRate(pConfigHandle, clockRate)) def checkError(errorCode): if errorCode != 0: ni845x.ni845xStatusToString(errorCode, 1024, pErrorStr) errorStr = pErrorStr.value closedDevice()
参考资料:https://docs.python.org/zh-cn/3.9/library/ctypes.html
这篇关于Python中的dll调用-ni.845x驱动编写的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南
- 2024-12-20Python编程基础与进阶
- 2024-12-19Python基础编程教程
- 2024-12-19python 文件的后缀名是什么 怎么运行一个python文件?-icode9专业技术文章分享
- 2024-12-19使用python 把docx转为pdf文件有哪些方法?-icode9专业技术文章分享
- 2024-12-19python怎么更换换pip的源镜像?-icode9专业技术文章分享