16,472
社区成员
发帖
与我相关
我的任务
分享
#define va_start(ap,v) ( __va_start(&ap, _ADDRESSOF(v), _SLOTSIZEOF(v), \
bool CUSBCommunicator::SendCommand(BOOL bWaitResponse,BYTE nCmdId,BYTE nParamCount,...)
{
BYTE szCmdString[128],*pCmdString=szCmdString;
memset(pCmdString,'0',20);//定长命令
*pCmdString++=0x1b;
*pCmdString++=nCmdId;
*pCmdString++=0x30+nParamCount;//参数个数
va_list list=va_start(list,nParamCount); //获取第4个参数及其后的参数
for(int i=0;i <4;i++)
{
if(i <nParamCount)//16 进制数...
{
WORD param=va_arg(list,WORD); //依次获取参数,参数类型为WORD
sprintf((char *)pCmdString,"%04x",param);
}
pCmdString+=4;
*pCmdString='0';//由于sprintf在末尾添加了结束标志,需要修改为'0'
}
va_end(list);
*pCmdString++=0;
long nCmLength=pCmdString-szCmdString;
return SendCommand(szCmdString,nCmLength,bWaitResponse);
}