我微软的控件能够发送中文短信,但是我使用api发送相同内容到手机确返回pdu格式错误,请高手指点
我的代码:
正常:
m_com.SetCommPort(4);//Com1串行口       
m_com.SetSettings("115200,n,8,1");//设置波特率为9600bps,无奇偶校验位,数据位8位,停止位1位
m_com.SetInputMode(1);//设置数据通讯格式为二进制数组格式
m_com.SetRThreshold(1);//设置为每次接到一个字节数据就触发OnComm事件
if(!m_com.GetPortOpen())  
{
m_com.SetPortOpen(TRUE);
}

m_SendData="at+CMGF=0\r";//
m_com.SetOutput(COleVariant(m_SendData));
char data[2048];
test.EncodeData(true,"133000000","测试成功", data);
m_SendData=data;//调制解调器初始化
         m_com.SetOutput(COleVariant(m_SendData));
返回pdu错误:
       char data[2048];
       int datalen = EncodeData(TRUE,"1330000000","测试成功",data);
       cs->SendData(data,datalen);SendData函数
BOOL CSerial::SendData(const char *buffer, int size )
{
PurgeComm(m_hIDComDev,PURGE_RXABORT|PURGE_RXCLEAR);
DWORD dwNumByteWritten; if(!WriteFile(m_hIDComDev,buffer,size,&dwNumByteWritten,NULL))
{
DWORD dwError = GetLastError();
return FALSE;
}
return TRUE;}

解决方案 »

  1.   

    你用的是CSerial类出错吗?
    改个类名吧,这个好像和MuMega Technologies公司提供的一个免费的VC++类重名,看看你的机器上是不是已经有这个类了
      

  2.   

    然后在检查你的代码,以下是我给你的参考,希望对你有帮助BOOL CSerial::SendData(const char *buffer, int size )
    { COMSTAT ComStat;

    LPDWORD ComError; DWORD dwNumByteWritten = 0; ClearCommBreak(m_hIDComDev);

    ClearCommError(m_hIDComDev,ComError,&ComStat); PurgeComm(m_hIDComDev,PURGE_TXCLEAR); //清空发送缓冲区

    if(!WriteFile(m_hIDComDev, (LPSTR)CommData, size, &length, &m_OverlappedWrite))
    {
    DWORD dwError = GetLastError();
    return FALSE;
    } if (WaitForSingleObject(m_OverlappedWrite.hEvent, 1000))
    dwNumByteWritten = 0;
    else
    {
    GetOverlappedResult(m_hIDComDev, &m_OverlappedWrite, &length, FALSE);
    m_OverlappedWrite. Offset += dwNumByteWritten;
    }
    return TRUE;
    }
      

  3.   

    自己已经解决,是转化成char *buffer时ctrl+z字符好像有问题,谢谢crystal521,我马上来给分