关于MSComm的OleVariant类型转换
请教各位大侠一个问题,小弟第一次用MSComm控件编程,遇到这样的问题:
发送数据时Output的类型要是OleVariant,如何把字符数组类型的转换过来?网上看到的几个方法都不管用。
[解决办法]
- C/C++ code
//初始化串口控件参数 MSComm1->CommPort=1;//默认为com1口 MSComm1->OutBufferSize=1024;//输出缓冲区大小 MSComm1->InBufferSize=1024;//输入缓冲区大小 MSComm1->InputMode=1;//数据接收模式为二进制模式 MSComm1->Settings="4800,n,8,1";//设置参数,默认为:波特率4800;无校验;数据位8;停止位1 //打开串口 try { if(MSComm1->PortOpen) return; MSComm1->PortOpen=true; } catch(...) { MessageBox(NULL,"串口打开失败,请检查!","错误",MB_OK + MB_ICONERROR); } //关闭串口 try { if(MSComm1->PortOpen) MSComm1->PortOpen=false; } catch(...) { MessageBox(NULL,"串口关闭失败,请检查!","错误",MB_OK + MB_ICONERROR); }//发送接收缓冲区定义BYTE sendBuff[4];//发送命令数据缓冲区,大小根据实际情况而定BYTE recvBuff[4];//返回命令数据缓冲区,大小根据实际情况而定OleVariant ovSendBuf;//万能变量OleVariant ovRecvBuf;//万能变量 //发送数据/////////////////////////////////////////////////////////////// sendBuff...填充数据,可以采用内存拷贝的方式完成memcpy ovSendBuf=VarArrayCreate(OPENARRAY(int,(0,3)),varByte);//开辟万能变量数组空间 for(i=0;i<4;i++)//将发送数据填充入万能数组 { ovSendBuf.PutElement(sendBuff[i],i); } MSComm1->Output=ovSendBuf; //////////////////////////////////////////////////////////////////////// //接收数据/////////////////////////////////////////////////////////////// ovRecvBuf=MSComm1->Input; for(i=0;i<4;i++)//从万能数组中提取接收数据到缓冲区 { recvBuff[i]=ovRecvBuf.GetElement(i); }////////////////////////////////////////////////////////////////////////