python ctypes winerror语言 - 4021



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

# 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)

我有以下错误:

OSError: [WinError -4021] Windows Error 0x%X

此错误是什么意思?

我更改为feisc = windll('feisc'(,现在我从dll中遇到了一个指针为0。我如何rdpatlen作为int* for the函数?

iRspLen应该是类型POINTER(c_int)。对于输出参数,您需要创建CTYPES数据实例以保持结果。在下面我猜测,cRspDataLen应以输入时的响应缓冲区的大小初始化,并可能随着输出的实际大小而更新。

# 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)

最新更新