自定义结构在用copymemory时会出错,查看了一下是内存对齐问题。
下面的结构在VB中长度是6,而在内存中却占用了8个字节。
我看网上说用占位变量,但是这会影响读代码。不知道有没有更好的解决方法。请大家指教。
private type XX    
  nLen as integer
  lMax as long
end typedim uXX as XX
dim buf() as byteredim buf(len(uXX)-1)
copymemory buf(0),uXX,len(uXX)
  

解决方案 »

  1.   

    用 LenB(uXX) 就能得到 8,而用 Len(uXX) 只有 6。
    原因就不用讨论了,反正 VB 就是这样设计的,所以选用 LenB 就可以了。
      

  2.   

    len(uXX)应该是字节长度。应该的VB提供的获取字节函数:lenb。
      

  3.   

    我的自定义类型中包含有字符串类型
    用完下面的语句后出现问题,监视buf为empty
    copymemory   uxx,buf(0),len(uXX)
      

  4.   

    结构里为什么不都定义成Long型,方便又省事。
      

  5.   

    我这有一个写文件的模块,输入参数是字节数组,所以我将自定义类型用copymeory转换成字节数组再写入文件。
    读时用copymeory将字节数组写入自定义类型。回楼上:我上面的只是举个例子,结构体中包含多种数据类型。
      

  6.   

    看MSDN上lenb返回结构体在内存中的大小。而len写是写入文件时的大小。
      

  7.   

    字符串变量不得进行复制,例
    Option ExplicitDeclare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)Sub Main()
        Dim s1 As String, s2 As String
        s1 = "abc"
        CopyMemory ByVal VarPtr(s2), ByVal VarPtr(s1), 4
        Debug.Print StrPtr(s1), StrPtr(s2)
        Debug.Print s1, s2
        Mid$(s1, 1) = "def"
        Debug.Print s1, s2
    End Sub输出为
     211069260     211069260 <-s1 和 s2 的字符串指针相同,它们的数据“共享”了
    abc           abc <-s1 和 s2 的字符串值也相同
    def           def <-目的是更改 s1,却导致了 s2 的值也变化了在上例中地址 211069260 处的字符串会应为变量 s1 和 s2 释放两次,本例中该内存没有被重新分配,所以无错,更复杂的情况下甚至会导致程序崩溃。
      

  8.   

    搞定了。本来有一个类模块是用来读写文件的。它给的方法中写文件时用的字节数组,所以我想将自定义类型用copymemory转换到字节数组再写文件。