使用现成类 CSerialPort ,定义 CSerialPort m_Port[2];for(int i=0;i<2;i++)
{
if (m_Ports[i].InitPort(this,i + 1,9600,'N',8,1,EV_RXFLAG | EV_RXCHAR,512))
{
   //启动串口监视线程
m_Ports[i].StartMonitoring();
m_Ports[i].WriteToPort ("A");
}
else
{
CString str;
str.Format("COM%d 没有发现,或被其它设备占用",i+1);
MessageBox(str,"提示"
,MB_OK|MB_ICONSTOP);
PostQuitMessage(0);
}

}
以上为初始化部分,为什么我在程序中只能对 com2进行写入数据,而无法对 com1进行写数据?我都快疯了,为什么一对com1写入一个字符,就出现内存写操作错误,程序退出。

解决方案 »

  1.   

    for循环第一次的时候,com2还没有初始化!
    所以不能对com1写入!
      

  2.   

    m_Ports[i].StartMonitoring();
    Sleep(100);//试试!
    m_Ports[i].WriteToPort ("A");
      

  3.   

    不是的,我在MainFrame中的OnCreate中进行初始化,程序运行后,一对com1写数据就非法操作,而对com则可以,并且结果正确,我想问题可能出在 dcb块的空间分配上,com1的dcb分配可能已撤消。
      

  4.   

    m_Ports[i].WriteToPort ("A");//为检测硬件的作用写入A
    在初始化过程中,是可以对com1写入 A字符的,但在程序运行的过程中,我就无法对 com1 写入一个字符。
      

  5.   

    EV_RXFLAG:串口的这个事件时对于连接猫的时候说的,是不是你的串口2连接猫而串口1没有连接,你的程序我在机器上也运行过没有遇到你说的情况我用的是win2k
      

  6.   

    首先用超级终端并选择com1口,看看你的com1口是否有问题.
    如果你的工程是视图/文档的话,我一般在视图类中的OnInitialUpdate中做初始化工作.不知道你为什么要在MainFrame中的OnCreate中进行初始化!!!
      

  7.   

    搞定,先散分!对于非标准的Windows消息映射,为什么我使用类向导时,它自动删了我的
    afx_msg void ................
    气人.....