Public Sub RealLise(sa() As Byte, bolCS) '获得图片数据 图片数据的格式是 **************(13位数据头)FFd8...图片数据....FFD9
    Dim s0 As Byte                          (把13位数据头和图片数据提取出来)
    Dim s1 As Byte
    Dim i As Integer
    Dim j As Integer
    Dim StartPosition As Integer
    Dim EndPosition As Integer
    Dim FileName As String
'    On Error Resume Next
    With jpgbuf(0)
        For i = LBound(sa) To UBound(sa)
            s1 = s0
            s0 = sa(i)
            If s1 = &HFF Then
                If s0 = &HD8 Then   '接收到一张图片的数据头
                    '处理头信息
                    If i - 14 >= 0 Then CopyMemory .jpgfront(.FPtr), sa(i - 14), 13 - .FPtr
                    Call pPicGet传送头信息(0)
                    .Ptr = 0
                    StartPosition = i - 1
                    .bolGetFrame = True
                    st = Timer()
                Else
                    If (s0 = &HD9) And .bolGetFrame Then
                        .FPtr = 0
                        EndPosition = i
                        CopyMemory .jpgbufs(.Ptr), sa(StartPosition), EndPosition - StartPosition + 1
                        .Havenum = .Ptr + EndPosition - StartPosition
'                        FrmDVR.Label2(0) = .Havenum
                        .bolGetFrame = False
                        FrmView.lbltip(2).Caption = Timer() - st
                        Call PDealPic(0)   '收到数据尾进行图片处理
                        .Havenum = 0
                        Erase .jpgbufs
                        ReDim .jpgbufs(30000) As Byte
                        Erase .jpgfront
                        ReDim .jpgfront(13)
                    Else
                    End If
                End If
            End If
        Next i
        If .bolGetFrame Then
            EndPosition = i - 1
            CopyMemory .jpgbufs(.Ptr), sa(StartPosition), EndPosition - StartPosition + 1
            .Ptr = .Ptr + EndPosition - StartPosition + 1
        Else
            .FPtr = i - EndPosition
            CopyMemory .jpgfront(0), sa(EndPosition + 1), i - 1 - EndPosition
        End If
    End With
End Sub一直连续调用该函数,经常跳出内存不能为READ之类,整个崩溃

解决方案 »

  1.   

    我也认为是copymemory但是不知道怎么改....
      

  2.   

    你debug一下,看看copymemory是不是越界,这最可能了!!
      

  3.   

    既然固定13位数据头,不明白FFD8、FFD9有什么意义。
    LZ在关键代码处一点说明都没有,这种代码让谁查错都不是容易的事情。
      

  4.   

    代码有点乱,也无法调试.注意使用COPYMEMORY注意及时释放内存
      

  5.   

    Public Sub RealLise(sa() As Byte, bolCS) '获得图片数据 图片数据的格式是 **************(13位数据)FFd8(图片数据头)...图片数据....FFD9(图片数据尾)
        Dim s0 As Byte                          (把13位数据和图片数据提取出来)
        Dim s1 As Byte
        Dim i As Integer
        Dim j As Integer
        Dim StartPosition As Integer
        Dim EndPosition As Integer
        Dim FileName As String
    '    On Error Resume Next
        With jpgbuf(0)
            For i = LBound(sa) To UBound(sa)
                s1 = s0
                s0 = sa(i)
                If s1 = &HFF Then
                    If s0 = &HD8 Then   'ffd8接收到一张图片的数据头
                        '处理头信息
                        If i - 14 >= 0 Then CopyMemory .jpgfront(.FPtr), sa(i - 14), 13 - .FPtr                  '取13位数据  13位数据放到 .jpgfront()里面
                        Call pPicGet传送头信息(0)   '处理13位数据..
                        .Ptr = 0
                        StartPosition = i - 1
                        .bolGetFrame = True      '已经收到一张图片的数据头
                        st = Timer()
                    Else        'ffd9接收到图片数据尾
                        If (s0 = &HD9) And .bolGetFrame Then
                            .FPtr = 0
                            EndPosition = i
                            CopyMemory .jpgbufs(.Ptr), sa(StartPosition), EndPosition - StartPosition + 1             '把图片数据放到.jpgbufs()里面
                            .Havenum = .Ptr + EndPosition - StartPosition
    '                        FrmDVR.Label2(0) = .Havenum
                            .bolGetFrame = False  '已经收到一张图片的数据尾
                            FrmView.lbltip(2).Caption = Timer() - st
                            Call PDealPic(0)   '收到数据尾进行图片处理,把这张图片显示出来
                            .Havenum = 0
                            Erase .jpgbufs
                            ReDim .jpgbufs(30000) As Byte
                            Erase .jpgfront
                            ReDim .jpgfront(13)
                        Else
                        End If
                    End If
                End If
            Next i
            If .bolGetFrame Then
                EndPosition = i - 1
                CopyMemory .jpgbufs(.Ptr), sa(StartPosition), EndPosition - StartPosition + 1
                .Ptr = .Ptr + EndPosition - StartPosition + 1
            Else
                .FPtr = i - EndPosition
                CopyMemory .jpgfront(0), sa(EndPosition + 1), i - 1 - EndPosition
            End If
        End With
    End Sub不知道到底是怎么出错的,用的WINSOCK接收数据,很多路同时调用该函数
      

  6.   

    With jpgbuf(0)?
    你多路调用(多线程?)会不会造成冲突。