首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python ctypes -4021

python ctypes -4021
EN

Stack Overflow用户
提问于 2018-02-19 16:51:10
回答 1查看 193关注 0票数 0

我将vb项目转移到python,com接口的设置正在工作,现在我想读取数据:

代码语言:javascript
复制
# int FEISC_0xB0_ISOCmd( int iReaderHnd, unsigned char cBusAdr, unsigned char* cReqData, int iReqLen, unsigned char* cRspData, int* iRspLen, int iDataFormat )

feisc.FEISC_0xB0_ISOCmd.argtypes = c_int, c_ubyte, c_char_p, c_int, c_char_p, c_int, c_int


rspData = create_string_buffer(512);
rspDatalen = 0
iBack = feisc.FEISC_0xB0_ISOCmd(iReader, 255, b'0100', 4, rspData, rspDataLen, 0x01)

我得到了以下错误:

代码语言:javascript
复制
OSError: [WinError -4021] Windows Error 0x%X

这个错误意味着什么?

我更改为feisc = WinDLL('FeIsc'),现在从dll中得到一个错误,其中某个指针为0。如何才能将rdpatlen作为函数的int*?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-19 21:02:02

iRspLen应该是POINTER(c_int)类型。对于输出参数,需要创建ctype数据实例来保存结果。下面,我猜想cRspDataLen应该用输入上的响应缓冲区的大小初始化,并且很可能是根据输出上的实际大小更新的。

代码语言:javascript
复制
# int FEISC_0xB0_ISOCmd(int iReaderHnd, unsigned char cBusAdr, unsigned char* cReqData, int iReqLen, unsigned char* cRspData, int* iRspLen, int iDataFormat)
feisc.FEISC_0xB0_ISOCmd.argtypes = c_int,c_ubyte,c_char_p,c_int,c_char_p,POINTER(c_int),c_int

cReqData = b'0100'
rspData = create_string_buffer(512);
iRspLen = c_int(len(rspData))
iBack = feisc.FEISC_0xB0_ISOCmd(iReader,255,cReqData,len(cReqData),rspData,iRspLen, 0x01)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48870662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档