samsfang
驱动牛犊
驱动牛犊
  • 注册日期2006-07-07
  • 最后登录2007-01-17
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
阅读:1467回复:1

关于不能打开COM10以上的串口

楼主#
更多 发布于:2007-01-08 15:32
首先,在论坛中有过类似的帖子,如下:
http://bbs.driverdevelop.com/read.php?tid-71885-keyword-%D0%E9%C4%E2%B4%AE%BF%DA.html

硬件环境:
【笔记本TOSHIBA Satellite M55 S1001】
没有串口,使用USB-RS232虚拟串口;内置的MODEM占用COM3

软件环境:
【XPSP2+VS2005 VB.NET】

问题:
在使用轮询CreateFile("com1",......)、CreateFile("com2",......)。。。。CreateFile("com20",......)时能打开COM3,但是这个串口是MODEM的;在USB口插上USB-RS232设备并安装好驱动后,在【设备管理器】的串口中能发现“Prolific USB-to-Serial Comm Port (COM10)”。

奇怪的是CreateFile("com3",......)正常,而CreateFile("com10",......)发生错误,GetLastError获取错误:The system cannot find the file specified.

使用CreateFile("\\\\.\\com10",......)发生错误,GetLastError获取错误:The network path was not found.

使用CreateFile("\\\\.\\com33",......)也发生同样错误,GetLastError获取错误:The network path was not found.

NND,我是参考MSDN使用“\\\\.\\COM10”!后来MSDN论坛中搜索,人家竟然是使用“\\.\COM10”!马上修改程序。。。,YES!CreateFile("\\.\COM10",.....)成功!

哪位老牛:
怎么能像【设备管理器】一样枚举出计算机的串口?并获取其属性等信息。
yachli
驱动小牛
驱动小牛
  • 注册日期2004-04-12
  • 最后登录2016-03-08
  • 粉丝1
  • 关注0
  • 积分7分
  • 威望111点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-12 16:59
TCHAR buf[11]=_T("\\\\.\\COM");//modefied by yachli 050127
    TCHAR DisplayBuf[11]=_T("COM");
    for (int i=1;i<=255;i++)//max is 255
    {
        if (OpenedPorts) continue;
        _itot(i,buf+7,10);

        HANDLE hPort=CreateFile(buf,GENERIC_READ,FILE_SHARE_READ |   FILE_SHARE_WRITE,NULL,
            OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
        if (hPort!=INVALID_HANDLE_VALUE)
        {
            CloseHandle(hPort);
            _itot(i,DisplayBuf+3,10);
            m_List.SetItemData(m_List.AddString(DisplayBuf),i);
        }
}

枚举所有没有被占用的串口,此代码我用在不占用串口资源的监视程序里,没有问题。
游客

返回顶部