用MSComm串口控件做串口通讯程序. 程序是从原来一个工作OK的VC工程中移植过来的. 现在调试发现, 下位机可以收到数据, 但回发数据给PC时候, PC端接收程序
void CMiniTesterDlg::OnOnCommMscomm1() 
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
// unsigned char* sample = (unsigned char*)&TheLayout.Response_From_Slave;
CString stemp;
    COleSafeArray safearray_inp;
    LONG len,k,j=0;
    BYTE rxdata[1024];
CString strtemp;
    if(m_ComPort.GetCommEvent()==2)
    {            variant_inp = m_ComPort.GetInput();   //当下位机发数据给PC时候可以响应中断到这里后就无法运行下面.
 safearray_inp=variant_inp;
...调试时候发现每收到数据时候只能运行到variant_inp = m_ComPort.GetInput(); 后面的没执行.  

解决方案 »

  1.   

    在m_ComPort.GetInput(); 之前加
    int n=m_ComPort.GetInBufferCount()看一下里面有没有数据
    还有你确定进入了if(m_ComPort.GetCommEvent()==2) {}中么
      

  2.   

    k=m_ComPort.GetInBufferCount();     
    我在m_ComPort.GetInput(); 前面增加了这行. K的数据与预期一致, 就是运行到GetInBufferCount()里面就没反应了, 这些代码确定在if(m_ComPort.GetCommEvent()==2)里面
      

  3.   

    我忘了说了, 这个串口是蓝牙串口, 使用超级终端可以向该蓝牙串口收发数据, 但VC写的程序就是无法正常读出数据来, download一个串口工具source code编译后运行遇到同样问题无法GetInBufferCount();   
      

  4.   

    我下了有几个网上的串口工具, 有点有source code. source code全部无法接收蓝牙串口数据, 调试时候都是在GetInBufferCount();消失,  也找到一个没源代码的串口工具可以收发数据. 我看了大多数使用MSComm控件的代码基本是一样的. 没有什么特别. 但就是无法GetInBufferCount();   
      

  5.   

    是无法GetInput(). GetInBufferCount()可以的到buffer中数据的个数.
      

  6.   

    按F10单步调试GetInput()时候进入CATCH_ALL(e)然后就直接出来没做任何事. 是什么问题引起的呢.
    我初始化程序是:
    DWORD style = WS_VISIBLE | WS_CHILD; 
    if (!m_ComPort.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1))

    TRACE0("Failed to create OLE Communications Control\n"); // fail to create
    return 0;

    // m_ComPort.SetCommPort(1); //Ñ¡Ôñcom
    if( !m_ComPort.GetPortOpen())
    m_ComPort.SetPortOpen(TRUE);//´ò¿ª´®¿Ú
    else
    {
    AfxMessageBox("cannot open serial port");
    return 0;
    } m_ComPort.SetSettings("9600,n,8,1"); //²¨ÌØÂÊ9600£¬ÎÞУÑ飬8¸öÊý¾Ý룬1¸öֹͣλ
    m_ComPort.SetInputMode(1); //1£º±íʾÒÔ¶þ½øÖÆ·½Ê½¼ìÈ¡Êý¾Ý
    //m_ComPort.SetRThreshold(Receive_Size);
    m_ComPort.SetRThreshold(1); //²ÎÊý1±íʾÿµ±´®¿Ú½ÓÊÕ»º³åÇøÖÐÓжàÓÚ»òµÈÓÚ1¸ö×Ö·ûʱ½«Òý·¢Ò»¸ö½ÓÊÕÊý¾ÝµÄOnCommʼþ
    m_ComPort.SetInputLen(0); //ÉèÖõ±Ç°½ÓÊÕÇøÊý¾Ý³¤¶ÈΪ0
    m_ComPort.GetInput(); //ÏÈÔ¤¶Á»º³åÇøÒÔÇå³ý²ÐÁôÊý¾Ý
      

  7.   

    在你的初始化程序中,我没有看到初始化缓冲区,是不是这个问题啊?
    SetInBufferSize(512);
    SetOutBufferSize(512);
      

  8.   

    现在用API没问题了. 奇怪用控件就是不行.