这在c语言中是一个自然而然的问题,然而在VB6中,因为微软有意隐藏了指针,这个操作便变得困难重重。然而这个问题的研究让我对VB6中的指针有了更清楚地认识,也彻底弄清楚了(变长)字符串在VB6中的存储格式。
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Sub main()
'构建一个整型数组
Dim a(7) As Integer
a(0) = 8 '为字符串数据之前的四个字节,存储字符串的长度
a(1) = 0
a(2) = 66 'B
a(3) = 83 'S
a(4) = 84 'T
a(5) = 82 'R
a(6) = 0 '字符串结束标志NULL UNICODE
Dim s As String
CopyMemory ByVal VarPtr(s), VarPtr(a(2)), 4
Debug.Print s
End Sub
'执行结果为BSTR
来一张图,让操作更直观一些。
经过这个实验,让我感到在VB6中,虽然指针操作不像C中那么方便,但是操作原理和C还是一样的。