MFC串口编程
void CComUpdateDlg::OnOnCommMscomm() { VARIANT ComRcv; COleSafeArray ComRcvArray; BYTE RcvBuf[1024]; long len,k; if(m_ctrlComm.GetCommEvent()==2) { ComRcv = m_ctrlComm.GetInput(); ComRcvArray=ComRcv; //VARIANT型变量转换为ColeSafeArray型变量 len=ComRcvArray.GetOneDimSize(); //验证得到有效数据长度 for(k=0;k<len;k++)//len is 5 in normal case ComRcvArray.GetElement(&k,RcvBuf+k);//转换为BYTE型数组 HandleCommand(RcvBuf); } }
在MFC编程中经常需要操作文件,常用的做法是通过一个button选择文件的路径,之后把文件的路径获取到一个CString变量中。但有的时候,我们习惯于通过fopen等函数操作文件,这时就要把文件路径由CString类型转换为char *类型。但是由于路径中存在‘\’,对于char *来说,‘\’为转义字符,因此路径“E:\doc\test.data”转为char *应该为“E:\\doc\\test.data”才能够被fopen等函数正常操作。
此时,可通过如下方法进行类型转换:
char file[256] = {0}; setlocale(LC_ALL, "chs"); wcstombs( file, m_sourcePath, 256 );
代码如下所示:
void CpaydevDlg::OnBnClickedOpenButton() { // TODO: 在此添加控件通知处理程序代码 CString strFilter; strFilter="All Files(*.*)|*.*||"; CFileDialog dlg(TRUE, NULL, NULL, OFN_EXPLORER|OFN_HIDEREADONLY| OFN_ENABLESIZING|OFN_FILEMUSTEXIST,strFilter); dlg.m_ofn.lStructSize = sizeof(OPENFILENAME); if(dlg.DoModal() == IDOK ) { m_sourcePath=dlg.GetPathName(); } UpdateData(FALSE); }