vb关闭时出错0*7c939af2指令引用0*0000000010内存,该内存不能为written

时间:2022-04-11 03:15:56
vb关闭时出错0*7c939af2指令引用0*0000000010内存,该内存不能为written,有用到两个mscomm控件,关闭时用下面代码做关闭
  If CmmR.PortOpen = True Then
         CmmR.InBufferCount = 0
         CmmR.OutBufferCount = 0
         CmmR.PortOpen = False
     End If
     If CmmR2.PortOpen = True Then
        CmmR2.InBufferCount = 0
        CmmR2.OutBufferCount = 0
        CmmR2.PortOpen = False
     End If


以下是接收mscomm的代码:
Select Case CmmR.CommEvent
    ' 事件
    Case comEvCD    ' CD 线的状态发生变化.
    Case comEvCTS   ' CTS 线的状态发生变化.
    Case comEvDSR   ' DSR 线的状态发生变化.
    Case comEvRing  ' Ring Indicator 变化.
    Case comEvReceive   '收到 RThreshold # of
    Do
      DoEvents
      t1 = Now
'      If DateDiff("s", t1, Now) > 1 Then
'        Exit Do
'      End If
      sGetdata = sGetdata & CmmR.Input
   Loop Until InStr(sGetdata, Chr(3)) > 0



       If InStr(1, Txt.Text, Chr(2)) > 0 And InStr(1, Txt.Text, Chr(3)) > 0 And Len(sGetdata) >= 497 Then
           SaveOrder (midchina(sGetdata, 1, 2000))
           sGetdata = ""
       Else
          Call SendCom1("F")
          lab.Caption = "Com1接收数据不正确"
          lab.ForeColor = vbRed
          sGetdata = ""
       End If
       Exit Sub
   ' Case comEvSend  ' 传输缓冲区有 Sthreshold 个字符        '
End Select

5 个解决方案

#1


很奇怪的是sGetdata这个我定义全程变量,不赋值为=""关闭程序就不会提示,请各位指教,急....谢谢

#2


似乎是sGetdata这个变量在执行退出代码时候就已经卸载了,看你的代码sGetdata这个变量没有再被使用,那就不需要代码清空

#3


能查到是哪句引起错误的吗?

#4


sGetdata变量在其它地方都没定义了,直接弹出的错误

#5


是不是你关闭的顺序不对..
比如你正在接收数据:

  Do
  DoEvents
  t1 = Now
' If DateDiff("s", t1, Now) > 1 Then
' Exit Do
' End If
  sGetdata = sGetdata & CmmR.Input
  Loop Until InStr(sGetdata, Chr(3)) > 0

你接收数据这里用了循环,什么时候从循环出来时不确定的...

在接收数据的循环里面,要是你对端口修改配置,关闭端口,是不是会出错?

如果在关闭的时候确定 是不是在接收数据的循环里面,不知道是不是就不会出现问题?

试试.

#1


很奇怪的是sGetdata这个我定义全程变量,不赋值为=""关闭程序就不会提示,请各位指教,急....谢谢

#2


似乎是sGetdata这个变量在执行退出代码时候就已经卸载了,看你的代码sGetdata这个变量没有再被使用,那就不需要代码清空

#3


能查到是哪句引起错误的吗?

#4


sGetdata变量在其它地方都没定义了,直接弹出的错误

#5


是不是你关闭的顺序不对..
比如你正在接收数据:

  Do
  DoEvents
  t1 = Now
' If DateDiff("s", t1, Now) > 1 Then
' Exit Do
' End If
  sGetdata = sGetdata & CmmR.Input
  Loop Until InStr(sGetdata, Chr(3)) > 0

你接收数据这里用了循环,什么时候从循环出来时不确定的...

在接收数据的循环里面,要是你对端口修改配置,关闭端口,是不是会出错?

如果在关闭的时候确定 是不是在接收数据的循环里面,不知道是不是就不会出现问题?

试试.