这个程序是通过串口向外部设备发送字节数据,然后外部设备返回数据给PC,通讯过程大概就是这样的。
现在碰到一个问题的是:此程序在Win2K中运行良好,而在XP中偶尔会出现通讯中断的现象(经过多次测试得出此结论)。
开发环境是:Win2K+Delphi6的环境。用到了一个Com通讯控件,控件的源码中用到了一些几个API函数,如什么GetOpenFile等(具体记不清了)。
我想知道的是:是不是API函数对XP支持不太好才导致程序在XP中运行出现错误?因为我是在2K环境下开发的。
如果是的话,怎么样解决?谢谢!!!

解决方案 »

  1.   

    是的,2k下的API   ,XP  下有些是没有的,
      

  2.   

    用到了如下API函数:
    在打开通讯口时:CreateFile
    送出数据时:WriteFile
    读取数据时:ReadFile这些应在XP中也有呀,唉,不知怎么回事?
      

  3.   

    高手不但能自己做出好东西,还要善于利用工具(君子生非异也,善假于物也),
    想当年我用这些API写串口程序,费力不讨好,最后将就能用,当然如何再花功夫也能完善,
    后来我就一直用spcomm控件。
      

  4.   

    在windowsxp下,将源代码用delphi7打开重新编译
      

  5.   

    win2000是 winnt 5.0
    winxp  是 winnt 5.1他们兼容的非常好,我想可能是你的xp配置有问题
      

  6.   

    在好几台XP的机子上都出现相同的问题,而在2K中运行一切正常。
      

  7.   

    你用的是mscomm吗?这个对com1非常好用,对com2好像有问题。
      

  8.   

    是在2K下编译的,在2K下运行一切正常,但在XP就偶尔出现失败,我估计是API支持的问题。
      

  9.   

    我用的是spcomm好像没有这个问题。
      

  10.   

    spcomm是delphi控件吧?!
    楼主说的com通讯组件是vc做做地吧?!那怎么用spcomm牙,调用win32 api才是
      

  11.   

    你可以注意这几个问题:
    [1].你可以从网上下载一个串口监视程序,看看你的程序是不是真正的每一次都能把数据从串口中发下来。如果不想从网上下载的话我可以提供,E-mail:[email protected]
    [2].你可以看看你用的控件实时监控串口是用的time控件还是用的线程,一般用time控件来实时的话不是太精确。
    [3].一般串口控件都有个串口接口清空功能。在执行完一次操作后最好清空一下接口,你发下去的数据可能和原来的数据混在一起了,可能有这方面的因素。(监视程序可以看到)。
    [4].串口通讯最关键的只有三个API:打开串口CreatFile,写串口WriteFile,读串口ReadFile
    当然还有一个关闭串口CloseFile,我想XP中也会有这些API。
    [5].若真有问题的话,我建议你可以换一个控件试试,一般熟悉一个控件的基本操作不会太浪费时间。只要针对性的编写,就可以看出问题来。
      

  12.   

    好像楼主:
    这个程序是通过串口向外部设备发送字节数据,然后外部设备返回数据给PC,通讯过程大概就是这样的。
    现在碰到一个问题的是:此程序在Win2K中运行良好,而在XP中偶尔会出现通讯中断的现象(经过多次测试得出此结论)。
    开发环境是:Win2K+Delphi6的环境。用到了一个Com通讯控件,控件的源码中用到了一些几个API函数,如什么GetOpenFile等(具体记不清了)。
    我想知道的是:是不是API函数对XP支持不太好才导致程序在XP中运行出现错误?因为我是在2K环境下开发的。
    如果是的话,怎么样解决?谢谢!!!
    既然是delphi6应该可以用spcomm呀?
    而且spcomm的源码里也是调用的api函数,没有什么区别的,
    我以前用vc自己做串口通讯的动态库要点也就是要启动一个接收线程,以便能够读取发送过来的数据。用控件只不过是省事一些,如果楼主觉得哪个地方不合适完全可以自己修改一下,可以在接收线程中触发一些自定义的事件活着消息什么的。而且spcomm的确没有发生楼主说的问题。我在2k下编译的程序在xp下运行也没有什么问题。
      

  13.   

    我直接用API感觉很好啊,没有发现不兼容的现象!
      

  14.   

    诸位大虾,小弟有个低级问题请教,到底串口通信中spcomm mscomm32 和API哪个更好用呢
    (小弟才学delphi不久)
      

  15.   

    如果你对系统的消息等机制很熟悉的话,自己写Api与用控件是一样的,因为控件也不过是封装了api而已。