64,282
社区成员
发帖
与我相关
我的任务
分享
USB打印机确实不好搞123
现在主要是没纸 的话,什么指令好像都无效,包括开钱箱 [quote=引用 10 楼 youyingbo 的回复:]
当然,同步时没纸无限阻塞,等你放了纸再继续,也有他的道理,只不过有时候用户体验不好。改用异步方式,没纸时进行提示能改善用户体验,只不过等多少时间是没纸是个问题。或许你等一段时间,看看能不能检查发送的数据数目是多少,为0说明没纸,一个数据没发;大于0说明正在工作中,需要再等待。
现在主要是没纸 的话,什么指令好像都无效,包括开钱箱 当然,同步时没纸无限阻塞,等你放了纸再继续,也有他的道理,只不过有时候用户体验不好。改用异步方式,没纸时进行提示能改善用户体验,只不过等多少时间是没纸是个问题。或许你等一段时间,看看能不能检查发送的数据数目是多少,为0说明没纸,一个数据没发;大于0说明正在工作中,需要再等待。
当然,同步时没纸无限阻塞,等你放了纸再继续,也有他的道理,只不过有时候用户体验不好。改用异步方式,没纸时进行提示能改善用户体验,只不过等多少时间是没纸是个问题。或许你等一段时间,看看能不能检查发送的数据数目是多少,为0说明没纸,一个数据没发;大于0说明正在工作中,需要再等待。
[quote=引用 6 楼 youyingbo 的回复:] 你用WriteFile发送个乱码(不属于任何指令)试试,不阻塞再发POS指令,如果阻塞,我觉着应该是这款打印机做的限制。
bSuccess = WriteFile(m_hCom, pbuff, len, &written, &m_ov);
if (!bSuccess )
{
if (ERROR_IO_PENDING == GetLastError())
{
WaitForSingleObject(m_ov.hEvent, 10); // 无纸或其他情况阻塞只等待10毫秒
// return -1;
}
}
其实没纸的时候还是会无限阻塞,只不过设置了只等待10ms而已[/quote]
异步情况下返回ERROR_ID_PENDING是应该的啊,不返回这个还出错呢。
我觉着同步时,如果有纸,发送WriteFile成功;没纸,发送WriteFile失败,那么就是这个打印机做的限制,目的就是多替开发人员考虑了一步你用WriteFile发送个乱码(不属于任何指令)试试,不阻塞再发POS指令,如果阻塞,我觉着应该是这款打印机做的限制。
bSuccess = WriteFile(m_hCom, pbuff, len, &written, &m_ov);
if (!bSuccess )
{
if (ERROR_IO_PENDING == GetLastError())
{
WaitForSingleObject(m_ov.hEvent, 10); // 无纸或其他情况阻塞只等待10毫秒
// return -1;
}
}
其实没纸的时候还是会无限阻塞,只不过设置了只等待10ms而已