自定义结构在用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)
下面的结构在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)
原因就不用讨论了,反正 VB 就是这样设计的,所以选用 LenB 就可以了。
用完下面的语句后出现问题,监视buf为empty
copymemory uxx,buf(0),len(uXX)
读时用copymeory将字节数组写入自定义类型。回楼上:我上面的只是举个例子,结构体中包含多种数据类型。
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 释放两次,本例中该内存没有被重新分配,所以无错,更复杂的情况下甚至会导致程序崩溃。