串口编程,怎么得到设备中存储的值如 AT+CMGL(读取短信)?int WriteComm(void* pData, int nLength)
{
DWORD dwNumWrite; // 串口发出的数据长度 WriteFile(hComm, pData, (DWORD)nLength, &dwNumWrite, NULL); return (int)dwNumWrite;
}int ReadComm(void* pData, int nLength)
{
DWORD dwNumRead; // 串口收到的数据长度 ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
return (int)dwNumRead;
}
没看懂 ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
nLength怎么会知道?不是设备中的字符长度吗?
{
DWORD dwNumWrite; // 串口发出的数据长度 WriteFile(hComm, pData, (DWORD)nLength, &dwNumWrite, NULL); return (int)dwNumWrite;
}int ReadComm(void* pData, int nLength)
{
DWORD dwNumRead; // 串口收到的数据长度 ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
return (int)dwNumRead;
}
没看懂 ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
nLength怎么会知道?不是设备中的字符长度吗?
// nLength是指要读取的长度, dwNumRead指实际读取的长度
// msdn上写的很清楚
nLength 是不是大概估计一个值,如一条短信最多70个字
nLength =160就午了,pData可以是什么类型?
CString
char
int?
// 如果应用在短信开发的话,char*最常用
GENERIC_READ|GENERIC_WRITE,//允许读和写
0,//独占方式
NULL,
OPEN_EXISTING,//打开而不是创建
0,//同步方式
NULL);
if(hCom==INVALID_HANDLE_VALUE)
{
AfxMessageBox("打开COM失败!");
}
DCB dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate=9600;
dcb.ByteSize=8;
dcb.Parity=NOPARITY;
dcb.StopBits=ONESTOPBIT;
dcb.fBinary=TRUE;
dcb.fParity=FALSE;
SetCommState(hCom,&dcb);
SetupComm(hCom,1024,1024);
CString m_send,str; m_send="AT+CMGF=0"+CHAR(13);
dwCount=m_send.GetLength(); WriteFile(hCom,m_send,dwCount,&dwCount,NULL);
m_send="AT+CMGL=4"+CHAR(13);
dwCount=m_send.GetLength();
dwCount=m_send.GetLength();
char *cReadMessage;
ReadFile(hCom,cReadMessage,(DWORD)200,&dwCount,NULL);CString strs;
strs.Format("%c",*cReadMessage);
MessageBox(strs);错误的.....
dwCount=m_send.GetLength(); // 不认为m_send作为参数能正确给GSM模块发送命令
// WriteFile(hCom,m_send,dwCount,&dwCount,NULL);
WriteFile(hCom, m_send.GetBuffer(0), dwCount, &dwCount, NULL);
m_send.ReleaseBuffer();m_send="AT+CMGL=4"+CHAR(13);
dwCount=m_send.GetLength();
dwCount=m_send.GetLength();
char *cReadMessage;
ReadFile(hCom,cReadMessage,(DWORD)200,&dwCount,NULL); CString strs;
//"%c", *cReadMessage?
//strs.Format("%c",*cReadMessage);
strs.Format("%s", cReadMessage);
这一句
//很奇怪啊。
// 单步调试的时候,在输出窗口看strs的值是什么...
,然后再分割数据
m_send="AT+CMGF=0"+CHAR(13);
dwCount=m_send.GetLength(); WriteFile(hCom,m_send,dwCount,&dwCount,NULL); m_send="AT+CMGL=4\r";
dwCount=m_send.GetLength();
WriteFile(hCom,m_send,dwCount,&dwCount,NULL);
char ans[1000]; ReadComm(ans, 1000);
AfxMessageBox(ans);
可以读取出来,但有点不确定char ans[1000]到底要多大才适合?int CSMSPDUDlg::ReadComm(void *pData, int nLength)
{
DWORD dwNumRead; // 串口收到的数据长度 ReadFile(hCom, pData, (DWORD)nLength, &dwNumRead, NULL);
return (int)dwNumRead;
}