对RS-232-C串行端口进行访问,摒弃MSCOMM控件,它的功能和效率太低下。Windows操作平台下不提倡应用程序直接控制硬件(包括端口),也不让使用中断(除非打入到Ring0系统级),而是通过Windows操作系统提供的设备驱动程序来进行数据传递。在Windows操作系统下串行口和其他通讯端口一样是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。
问:对端口进行操作,Win 32 提供了相应的文件I/O函数与通信函数有哪些,谢谢

解决方案 »

  1.   

    createfile
    closehandle
    getcommstate
    setcommmstate
    writefile
    readfile
    clearcommerror
    purgecomm
    escapecommfunction
    setcommmask
    waaitcommevent
    getcommmodemstatus
      

  2.   

    用spcomm不错,我用过他着手机短信
    要么你用API函数好了,
    createFile
    closeFile
      

  3.   

    to lovelymelon(小人物) :
    那我提出的观点正确与否?是否真的像我说的那样:对RS-232-C串行端口进行访问,摒弃MSCOMM控件,它的功能和效率太低下。Windows操作平台下不提倡应用程序直接控制硬件(包括端口),也不让使用中断(除非打入到Ring0系统级),而是通过Windows操作系统提供的设备驱动程序来进行数据传递。在Windows操作系统下串行口和其他通讯端口一样是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。
      

  4.   

    WIN95/NT 中 几 个 常 用 的 串 行 通 信 操 作 函 数 如 下:
    CreatFile
     打 开 串 行 口
    CloseHandle
     关 闭 串 行 口
    SetupComm
     设 置 通 信 缓 冲 区 的 大 小
    ReadFile
     读 串 口 操 作
    WriteFile
     写 串 口 操 作
    SetCommState
     设 置 通 信 参 数
    GetCommState
     获 取 默 认 通 信 参 数
    ClearCommError
     清 除 串 口 错 误 并 获 取 当 前 状 态
      

  5.   

    Windows操作系统提供的设备驱动程序来进行数据传递
    它可以给你开发的程序提供更好的兼容性与正确性
    直接对硬件访问可能会有较大的兼容性问题(即使硬件设计规范有一小点不同)
    而使用设备驱动程提供的接口则不会有这样的问题
      

  6.   

    我的理解,其实mscomm与spcomm等都一样,都是利用系统的Api来完成与串口的通信,当然,你也可直接用createfile,openfile 等api来操作串口通信,本质上并无不同,只是用Api你自己要处理的代码多一点,当然,你也可灵活一点处理通信的过程.
    >>摒弃MSCOMM控件,它的功能和效率太低
    我不同意这种说法,造成效率低的是RS232,RS485的工业标准,它规定的通信速率太低造成的,当然,考虑到这个标准已经存在了半个世纪,也就...,只要能提高通信速度,自然也就能提高效率;
    至于mscomm,它的功能也许不算多,但就我知道,几乎可以实现在Windows下的所有串口通信的要求,包括中断等,而且,是windows下串口通信最稳定的控件.其实,要真正弄明白会使用mscomm也要花点时间的,它也并不想某些人想象中的那么少功能的!通过其几个属性的调节,也可组合出不少不同的应用!
    象在我的系统中,除非实时性要求特别高的(<20ns)的,才用到Api直接编写通信部分,稳定性要求高的,就用mscomm,其它,就用spcomm.spcomm主要使用比较简单,但其实功能也不少,有些bug,要修改起源代码!
      

  7.   

    《visula c++ 串口通信技术与工程实践》
      

  8.   

    aiirii(aiirii):
    SPCOMM我也在用,能不能提供一些经验?不胜感谢!
    你可以加我QQ联系:457309