已经数组A的内容,怎样使用(一定要用这个)CopyMemory,使得B数组有相同内容?请示例。

解决方案 »

  1.   

    用a(0) b(0)作为地址
    不能用a,b
    copymemeory a(0) b(0)
      

  2.   

    Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)copymemory b(0),a(0),ubound(a)orDeclare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (byval pDst As long,byval pSrc As long, ByVal ByteLen As Long)copymemory varptr(b(0)),varptr(a(0)),ubound(a)
      

  3.   

    对了,如果a是byte数组,则用ubound(a),如果是int数组,用2*ubound(a)
    以此类推
      

  4.   

    Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Ptr() As Any) As Long
    Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal pDst As Long,ByVal pSrc As Long, ByVal ByteLen As Long)CopyMemory VarPtrArray(b),VarPtrArray(a),(UBound(a) - LBound(a)) * LenB(a(0))前提是(UBound(b)-LBound(b)) * LenB(b(0)) > (UBound(a) - LBound(a)) * LenB(a(0))
    否则可能会出现GPF或非法内存访问.
    这样写与数据组的类形无关,可以把一种数组拷贝到另一种数组中去.
      

  5.   

    感谢各位的提示,我目前研究的如下:
    '前提A、B均为一维数组,类型相同,且B定义的元素比A多
    'p、ASize、AElements为临时变量
    '不用LenB是因为类型为Variant时得不到正确的ASize
    CopyMemory p, ByVal VarPtrArray(A), 4
    CopyMemory ASize, ByVal (p + 4), 4
    CopyMemory AElements, ByVal (p + 16), 2
    CopyMemory B(0), ByVal VarPtr(A(0)), ASize * AElements不知A和B为不同类型时,怎么解决?