导航

<2006年11月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

随笔分类

随笔档案

文章档案

相册

2006年11月11日

就这个破程序居然浪费了我4个小时来调试! 奉献出来免得大家再走弯路。
SendMMS()
{
    HANDLE hCom 
= CreateFile( _T("COM1"),
        GENERIC_READ 
| GENERIC_WRITE,
        
0, NULL, OPEN_EXISTING, 0, NULL );
    
if( NULL == hCom )    return false;

    DCB dcb;
    ::GetCommState( hCom, 
&dcb );
    dcb.BaudRate 
= 9600;
    dcb.ByteSize 
= 8;
    dcb.Parity 
= NOPARITY;
    dcb.StopBits 
= ONESTOPBIT;

    
if!::SetCommState( hCom, &dcb ) )        return false;
    
if!::PurgeComm( hCom, PURGE_RXCLEAR ) )    return false;
    
    DWORD dw;
    ::WriteFile( hCom, 
"AT\r"3&dw, NULL );
    
// 读串口,判断是否正常
                    
// 切换到中文短信方式
    ::WriteFile( hCom, "AT+WSCL=6,4\r"12&dw, NULL );
    
// 读串口,判断是否正常

    ::WriteFile( hCom, 
"AT+CMGF=1\r"10&dw, NULL );
    
// 读串口,判断是否正常

    WCHAR wszTxt[
500];
    ::wcscpy( wszTxt, L
"hello 你好" );

    
int len = (int)::wcslen(wszTxt);// 字符长度
    forint i=0; i<len; i++ )    // 交换高低字节
        wszTxt[i] = MAKEWORD( HIBYTE(wszTxt[i]), LOBYTE(wszTxt[i]) );

    
char szNumber[50];        // 手机号码,内容长度
    ::sprintf( szNumber, "AT+CMGS=\"13901112233\",%d\r", len*2 );
    ::WriteFile( hCom, szNumber, (DWORD)::strlen( szNumber ), 
&dw, NULL );
    ::Sleep(
500);

    ::WriteFile( hCom, wszTxt, len
*2&dw, NULL );
    ::WriteFile( hCom, 
"\x00\x1a\r", 3, &dw, NULL ); // 结束符
        // 读串口,判断是否正常
       ::CloseHandle( hCom );
       return true;
}
发表于 2006-11-11 03:13 杨老师的茅屋 阅读(2290) | 评论 (8)编辑 收藏

统计