硬件是jb35G,用的是mscomm32.ocx.
出现的问题是除了来电号码意外,其他都是乱码。如:"#13800138000#&%%"(从#之后就是乱码了)
平台是vs2005+mfc,代码如下:
OnInitDialog()
m_mscomm.put_CommPort(1);// 选择串口号
m_mscomm.put_InBufferSize(1024);//接收缓冲区
m_mscomm.put_OutBufferSize(1024);//发送缓冲区
m_mscomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_mscomm.put_InputMode(1);//0表示文本方式,1表示二进制方式
m_mscomm.put_RThreshold(1);//接收缓冲区有大于等于1个字符时,将引发接收数据的OnCommMscomm事件
m_mscomm.put_Settings(_T("9600,n,8,1"));//设置波特率等参数
if (!m_mscomm.get_PortOpen())
{
m_mscomm.put_PortOpen(TRUE);//打开串口

else
{
m_mscomm.put_OutBufferCount(0);
}
return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
#######
OnCommMscomm()
{
VARIANT m_input;
char *str;
int k,nEvent;
nEvent=m_mscomm.get_CommEvent();
switch(nEvent)
{
case 2:
k=m_mscomm.get_InBufferCount();     //接收缓冲区的字符数目
if(k>0)
{
m_input=m_mscomm.get_Input();
str=(char*)(unsigned char*)m_input.parray->pvData;
  m_receive.Format(_T("%d"),str);
} }
m_datashow.SetWindowText(m_receive);
}

解决方案 »

  1.   

    我帮你弄好看点
    OnInitDialog() 
    m_mscomm.put_CommPort(1);// 选择串口号 
    m_mscomm.put_InBufferSize(1024);//接收缓冲区 
    m_mscomm.put_OutBufferSize(1024);//发送缓冲区 
    m_mscomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取 
    m_mscomm.put_InputMode(1);//0表示文本方式,1表示二进制方式 
    m_mscomm.put_RThreshold(1);//接收缓冲区有大于等于1个字符时,将引发接收数据的OnCommMscomm事件 
    m_mscomm.put_Settings(_T("9600,n,8,1"));//设置波特率等参数 
    if (!m_mscomm.get_PortOpen()) 

    m_mscomm.put_PortOpen(TRUE);//打开串口 

    else 

    m_mscomm.put_OutBufferCount(0); 

    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE 

    ####### 
    OnCommMscomm() 

    VARIANT m_input; 
    char *str; 
    int k,nEvent; 
    nEvent=m_mscomm.get_CommEvent(); 
    switch(nEvent) 

    case 2: 
    k=m_mscomm.get_InBufferCount();    //接收缓冲区的字符数目 
    if(k>0) 

    m_input=m_mscomm.get_Input(); 
    str=(char*)(unsigned char*)m_input.parray->pvData; 
    m_receive.Format(_T("%d"),str); 
    } } 
    m_datashow.SetWindowText(m_receive); 
      

  2.   

    m_receive.Format(_T("%d"),str);      可能是这个错误了,去掉这条直接送值试试。数值转换问题应该