我需要接收硬件串口发送的消息,在控件的接收事件中收到数据并放入缓冲后,通过消息发送给程序,程序读取数据处理,处理部分没有问题,而且在Debug版本下程序能正常工作,而编译成Release版本后执行就出异常,我跟踪程序汇编代码,发现是程序调用一个2E中断后连接到非法地址上,有谁能告诉我如何解决吗?

解决方案 »

  1.   

    具体代码如下:void ononmscomm()
    {
        if( ms_comm.GetCommEvent() == 2 )
        {
    len = m_msComm.GetInBufferCount();
    varBuff = m_msComm.GetInput();   //读缓冲区
             CopyMemory( btRecvBuff, varBuff.parray->pvData, len );
             PostMessage( msg, 0, 0 );//发送我定义的消息进行处理
        }
    }初始化部分:
    m_msComm.SetCommPort( 1 );
    if( !m_msComm.GetPortOpen() )
    m_msComm.SetPortOpen( TRUE );
    else
    return FALSE;
    m_msComm.SetSettings( "9600,n,8,1" );
    m_msComm.SetInputMode( 1 );
    m_msComm.SetRThreshold( 3 );
    m_msComm.SetInputLen( 0 );
    m_msComm.GetInput();奇怪的是,在第1.2次接收时没有错误,而第3次接收时就出异常,访问非法地址.
      

  2.   

    btRecvBuff设置大于len.varBuff = m_msComm.GetInput();   //读缓冲区
    len = m_msComm.GetInBufferCount();
    CopyMemory( btRecvBuff, varBuff.parray->pvData, len );最好改为:
    BYTE*pb;
    varBuff = m_msComm.GetInput();   //读缓冲区
    len = m_msComm.GetInBufferCount();
    pb=new BYTE[len];
    CopyMemory( btRecvBuff, varBuff.parray->pvData, len );
    ……
    delete[]pb;