数组在Redim过后,地址已经改变
你只要把k = VarPtr(enumSecond(10))移动到Redim后面就可以了

解决方案 »

  1.   

    你程序中的
       l = VarPtr(enumFirst(1))
       k = VarPtr(enumSecond(10))
       ReDim Preserve enumSecond(UBound(enumSecond) + UBound(enumFirst))
       Call CopyMemory(k, l, 10)将第三句放到前面,
       Dim lener as Long
       lener=UBound(enumSecond) + UBound(enumFirst)
       ReDim Preserve enumSecond(lener)
       l = VarPtr(enumFirst(1))
       k = VarPtr(enumSecond(10))
       Call CopyMemory(k, l, 10)
    手头没有VB,所以没有试,你可以试试。
    其实有一个笨方法,执行速度慢一点,不过肯定有用;
    用二进制打开文件,分别写入两个数组,再用二进制方法重新读出就可以了,在速度要求不高的情况下可以这么做,还是用你原来的方法吧。
      

  2.   

    上面的回答有点罗嗦,这样就可以了。
       ReDim Preserve enumSecond(UBound(enumSecond) + UBound(enumFirst))
       l = VarPtr(enumFirst(1))
       k = VarPtr(enumSecond(10))
       Call CopyMemory(k, l, 10)
      

  3.   

    给你段代码参考一下:Public Function UniteByteArray(bBa1() As Byte, bBa2() As Byte) As Byte()
       Dim bUb()         As Byte
       Dim iUbd1         As Integer
       Dim iUbd2         As Integer
       Dim I             As Integer
       
       iUbd1 = UBound(bBa1)
       iUbd2 = UBound(bBa2)
       ReDim bUb(0 To iUbd1 + iUbd2 + 1) As Byte
       For I = 0 To iUbd1
          bUb(I) = bBa1(I)
       Next I
       For I = iUbd1 + 1 To UBound(bUb)
          bUb(I) = bBa2(I - iUbd1 - 1)
       Next I
       UniteByteArray = bUb
    End Function================================================================
    [* 我是僵尸我怕谁 *]
      

  4.   

    学习,顺便问一句,你们用的VB是什么版本的,我的VB6为什么没有CopyMemory这个过程?哪位大哥指点一下小弟?
      

  5.   

    Dim enumFirst() As Byte
    Dim enumSecond() As ByteReDim enumFirst(1 to 10)
    Dim lngCounter As Long
    For lngCounter = 1 To 10
          enumFirst(lngCounter) = lngCounter
    Next lngCounterReDim enumSecond(1 to 10)
    For lngCounter = 1 To 10
          enumSecond(lngCounter) = lngCounter + 10
    Next lngCounterReDim Preserve enumSecond(1 to UBound(enumSecond) + UBound(enumFirst))Call CopyMemory(VarPtr(enumSecond(11)), enumFirst(1), 10)