我有一个串口属性设置问题
以下是两段设置波涛率等参数的语句,大家帮我看看怎么回事第一种方法报错为:error C2664: 'GetCommState' : cannot convert parameter 2 from 'struct _DCB' to 'struct _DCB *'
  No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
第二种方法没报错,可是也没起作用。这是怎么回事?
GetCommState(hFile,dcb);
  dcb.BaudRate=CBR_9600;
//dcb.fParity=N;
dcb.ByteSize=8;
dcb.StopBits=1;
  GetCommState(hFile,dcb);
// PurgeComm(hFile,PURGE_TXCLEAR);
 */  FillMemory(&dcb,sizeof(dcb),0);
dcb.DCBlength=sizeof(dcb);
if(!BuildCommDCB("9600,n,8,1",&dcb))
{  
return ;}
帮忙指点一下,我急用,谢了

解决方案 »

  1.   

    CString port,tmp,strSetting; port = comParam.port;
    tmp = port.Right(1); //端口号
    m_ComPort.put_CommPort(atoi(tmp)); if(m_ComPort.get_PortOpen()) //如果串口已经打开 
    m_ComPort.put_PortOpen(FALSE); // SetInputLen 设置为 0 时,使用 GetInput 将使 MSComm 控件读取接收缓冲区中全部的内容。
    m_ComPort.put_InputLen(0); 

    m_ComPort.put_InBufferSize(COM_BUFFER_SIZE); //为1表示有一个字符引发一个事件 //接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
    //如果是一次N个字符,则相应修改
    m_ComPort.put_RThreshold(1);  m_ComPort.put_InputMode(1); //设置输入方式为二进制方式  strSetting = comParam.baudRate + ","; //"38400,E,8,1"; strSetting += "n"; strSetting += ","; strSetting += comParam.dataBit; strSetting += ","; strSetting += comParam.stopBit; m_ComPort.put_Settings(strSetting); //设置波特率等参数 数据位 停止位 校验位 
    m_ComPort.put_SThreshold(0); //不触发发送事件 //打开串口
    m_ComPort.put_PortOpen(TRUE); 

    m_ComPort.get_Input();   //先预读缓冲区以清楚残留数据
      

  2.   

    GetCommState(hFile, &dcb);
      

  3.   

    感谢您的回复
    可是我不用 MSComm 这个控件,我用的是api函数,
    第二个帖子我用的就是这个函数,可是报错error C2664: 'GetCommState' : cannot convert parameter 2 from 'struct _DCB' to 'struct _DCB *'
      No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called可我不知道该怎么办好了,帮我出出主意,谢谢
      

  4.   

     GetCommState(hFile, &dcb);
      dcb.BaudRate=CBR_9600;
    dcb.fParity=NOPARITY;
    dcb.ByteSize=8;
    dcb.StopBits=(BYTE)ONESTOPBIT;
         GetCommState(hFile, &dcb);
       PurgeComm(hFile,PURGE_TXCLEAR);
      这段程序通过了,可是波涛率没有还是没有变化呀,大家帮我再看看怎么回事。谢了
      

  5.   

    //读取设置
    GetCommState(hFile, &dcb); //更改部分参数
    dcb.BaudRate=CBR_9600;
    dcb.fParity=NOPARITY;
    dcb.ByteSize=8;
    dcb.StopBits=(BYTE)ONESTOPBIT;//设置参数
    SetCommState(hFile, &dcb); 
      

  6.   

    我就是这么弄的,为什么串口里面显示的波特就是跟我设置的不一样啊还有 WriteFile(hFile,lpBuf,strlen(lpBuf),NULL,NULL);这个程序编译运行可以通过,但是我运行以后就点击这个函数设定的按钮,就报错,请问大家怎么解决好。
      

  7.   

    static int i=0;
        
    if(i%2==0){
    hFile=CreateFile("COM1",
    GENERIC_READ|GENERIC_WRITE,
    0,
    NULL,
    OPEN_EXISTING,
    0,
    NULL);    GetCommState(hFile, &dcb);
        dcb.BaudRate=2400;
    dcb.fParity=NOPARITY;
    dcb.ByteSize=8;
    dcb.StopBits=(BYTE)ONESTOPBIT;
        GetCommState(hFile, &dcb);
        PurgeComm(hFile,PURGE_TXCLEAR);
        //MessageBox("串口已经打开");
    i++;
    }
        
    else    {
           CloseHandle(hFile);
       i=0;
      // MessageBox("串口已经关闭"); }这个程序我是建立了一个基于MFC对话框的应用程序,这是按钮事件
    可是我运行程序,用虚拟串口调试程序,波涛率 显示1200,N,8,1这与我设置的不符,
    大家帮我看看这段程序有问题吗?为什么不符?