虽然看过《老兵新传》《VisualBasic win32编程》中介绍VB6字符串的内容,但依旧对VB6中的字符串如何存储不十分清楚,不像对C语言中的字符串那样,在头脑中有一个清晰的轮廓。同时对varptr(),strptr()的理解也只限于书上的那些例子。直到有一天,突然灵光一闪,动手写了下面的程序,当程序执行的结果出现时,我也终于恍然大悟。
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Sub main()
Dim strA As String
strA = "BSTR"
Dim addrofStr As Long
addrofStr = StrPtr(strA)
Debug.Print "StrPtr(strA):" & addrofStr
Dim llength As Long
addrofStr = addrofStr - 4
CopyMemory llength, ByVal addrofStr, 4 'llength中应为字符串包含的字节数
Debug.Print "length of bytes:" & llength
Dim addrofVar As Long
addrofVar = VarPtr(strA)
Debug.Print "VarPtr(strA):" & addrofVar
Dim addrofTest As Long
CopyMemory addrofTest, ByVal addrofVar, 4