我将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)