单步下没有问题,说明程序是正确的,两者唯一的不同是访问通讯端口速度快慢的不同。因为端口数据到达过慢无法估算,建议使用mscomm控件的OnComm 事件。

解决方案 »

  1.   

    多谢建议,不过我后来有试用过mscomm控件的OnComm事件,但是在我侦测到mscomm.input为非空时,程序并不触发mscomm的OnComm事件。但在有一次的单步执行后的十几秒钟后,突然程序跳到OnComm事件的代码部分开始执行,并且显示出所有被发出的命令以及其反馈字符串,而后我再运行程序,它居然连响应都没有了。我也想过是因为速度不同而造成的这种问题,但是使用很多办法都无法解决,请以教我!
      

  2.   

    设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
    Private Sub MSComm1_OnComm()
        If MSComm1.CommEvent = comEvReceive Then  ' 接收到一个字符
            '这里插入你的代码,
        End If
    End Sub
    Rthreshold=0时不触发CommEvent = comEvReceive的事件。
    如果使用时间机制,请去除轮询端口的代码。
    还可以切换Rthreshold的值,混合轮询和事件编程。轮询时要注意添加Doevents调用
    另外还要注意你的设备和计算机之间是否存在硬件握手。
      

  3.   

    多谢回复,我一定会试一下的。不过我实在是被那个MSCOMM搞得太烦了,外加前些天又用QBASIC作了一个同样功能的程序,居然运行完美无误,简直是气死我了。哦,我终于投降了。一怒之下,我将MSCOMM控件删掉,然后将整个程序改为调用WIN32API函数,一向使用VC的可怜的我以为这下一定可以解决问题了,但是……………………居然在调用CREATEFILE函数时出了毛病,我的函数如下:
    CreatFile("COM2",GENERIC_READ OR GENERIC_WRITE,0&,<Null>,OPEN_EXISTING,0&,Null)
    结果,出现错误提示“ByDef参数类型不符”,指示光标就停在上面有<>的那个那里,我已经有声明过那个函数自定义参数类型,但是还是不行。为什么?究竟是为什么?明明在VC里都是这样的,而且我有查过关于用VB调用API函数的大把资料,都是如此写的,为什么就是在我这里行不通?????有谁知道,了解,请救救我!!!
      

  4.   

    Dim i As Long
    Dim Secu As SECURITY_ATTRIBUTES
    Secu.bInheritHandle = 0
    Secu.lpSecurityDescriptor = 0
    Secu.nLength = 12
    i = CreateFile("COM2", GENERIC_READ Or GENERIC_WRITE, 0&, Secu, OPEN_EXISTING, 0&, 0&)
      

  5.   

    谢谢你,sxmzmxh(要命的小方),你的回答对我真是帮助极大。还有一个问题,也是有关于NULL的错误使用的:请问WriteFile中的OVERLAPPED这一个自定义类型应该在程序中怎样赋值呢?ReadFile的这一个类型的赋值是不是和它一样呢?类型里的每一个值是什么意思?请告诉我。再次表示感谢。
      

  6.   

    typedef struct _OVERLAPPED { 
        DWORD  Internal;          //保留给操作系统使用,指出系统支持状态
        DWORD  InternalHigh;      //保留给操作系统使用,指出多少个字节已经传输
        DWORD  Offset;            //从第几个字节读写(偏移量,低位),读写通讯设备时不用
        DWORD  OffsetHigh;        //从第几个字节读写(偏移量,高位),读写通讯设备时不用
        HANDLE hEvent;            //引发文件开始传输事件
    } OVERLAPPED; 
    这些参数都可以置0(调用默认处理),你的邮箱告诉我,我发一份详细一点的参考资料给你
      

  7.   

    非常感谢,我的油箱是[email protected]