DCB dcb;
if (!GetCommState(hCom,&dcb))
{
AfxMessageBox(_T("读取串口状态失败!"));
::CloseHandle(hCom);
return NULL;
}
总是告诉我读取串口状态失败,不知道是何原因,请指教
另外大家推荐几个比较好的串口通讯的原代码吧,谢谢!

解决方案 »

  1.   

    你的hCom正常打开了吗?
    试试我用的通讯类:
    http://community.csdn.net/Expert/topic/4055/4055364.xml?temp=.677334
    你也可用mscomm控件
      

  2.   

    我不想用MSCOMM控件,想通过API 来完成这 操作
    谢谢了,我看看你给的那个
      

  3.   

    我那个没问题,我一直用它,它在micro soft eMbedded Visual C++ 4.0都可用
      

  4.   

    hCom句柄是否有效?代码贴出来看看
      

  5.   

    // 打开指定的串口
    HANDLE hCom = ::CreateFile(strCom,GENERIC_READ | GENERIC_WRITE,0,NULL,
    OPEN_EXISTING,dwFlags,NULL); // 获得串口的配置信息
    COMMCONFIG ComCfg;
    DWORD dwSize = sizeof(ComCfg);
    if (!::GetCommConfig(hCom,&ComCfg,&dwSize))
    {
    AfxMessageBox(_T("读取串口配置失败!"));
    ::CloseHandle(hCom);
    return NULL;
    }

    // 获得当前的串口配置状态
    DCB dcb;
    if (!GetCommState(hCom,&dcb))
    {
    AfxMessageBox(_T("读取串口状态失败!"));
    ::CloseHandle(hCom);
    return NULL;
    }
      

  6.   


    可以看看CSerialPort类啊
    网上搜一下就可以找到
      

  7.   


    看看我这个吧
    你那个不行的要改一下
    BOOL OpenComm(const char* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
    {
    DCB dcb; // 串口控制块
    COMMTIMEOUTS timeouts = { // 串口超时控制参数
    100, // 读字符间隔超时时间: 100 ms
    1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
    500, // 基本的(额外的)读超时时间: 500 ms
    1, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
    100}; // 基本的(额外的)写超时时间: 100 ms hComm = CreateFile(pPort, // 串口名称或设备路径
    GENERIC_READ | GENERIC_WRITE, // 读写方式
    0, // 共享方式:独占
    NULL, // 默认的安全描述符
    OPEN_EXISTING, // 创建方式
    0, // 不需设置文件属性
    NULL); // 不需参照模板文件

    if(hComm == INVALID_HANDLE_VALUE) return FALSE; // 打开串口失败 GetCommState(hComm, &dcb); // 取DCB dcb.BaudRate = nBaudRate;
    dcb.ByteSize = nByteSize;
    dcb.Parity = nParity;
    dcb.StopBits = nStopBits; SetCommState(hComm, &dcb); // 设置DCB SetupComm(hComm, 4096, 1024); // 设置输入输出缓冲区大小 SetCommTimeouts(hComm, &timeouts); // 设置超时 return TRUE;
    }
      

  8.   

    BOOL OpenComm(const char* pPort, int nBaudRate, 
                  int nParity, int nByteSize, int nStopBits)
    {
    DCB dcb;      // 串口控制块
    COMMTIMEOUTS timeouts = {
    100,  // 读字符间隔超时时间: 100 ms
    1,    // 读操作时每字符的时间: 1 ms 
    500,  // 基本的(额外的)读超时时间: 500 ms
    1,    // 写操作时每字符的时间: 1 ms 
    100}; // 基本的(额外的)写超时时间: 100 ms hComm = CreateFile(
                            pPort, // 串口名称或设备路径
    GENERIC_READ | GENERIC_WRITE,//读写方式
    0, // 共享方式:独占
    NULL, // 默认的安全描述符
    OPEN_EXISTING,// 创建方式
    0, // 不需设置文件属性
    NULL); // 不需参照模板文件

             // 打开串口失败
    if(hComm == INVALID_HANDLE_VALUE) return FALSE; GetCommState(hComm, &dcb);// 取DCB dcb.BaudRate = nBaudRate;
    dcb.ByteSize = nByteSize;
    dcb.Parity = nParity;
    dcb.StopBits = nStopBits; SetCommState(hComm, &dcb);// 设置DCB SetupComm(hComm, 4096, 1024);// 设置输入输出缓冲区大小 SetCommTimeouts(hComm, &timeouts);// 设置超时 return TRUE;
    }
      

  9.   

    谢谢xnlcx(J2EE.Net)
    你的程序很清晰哦
    我调试一下吧