Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
'在过程中声明的变量,都建立在栈上,先声明的变量在高地址,后声明的变量在低地址,而字符串中的字节排在前面的在低地址,排在后面的在高地址,恰好与这相反
Sub main()
Dim a4 As Integer
Dim a3 As Integer
Dim a2 As Integer
Dim a1 As Integer
Dim a0 As Integer
Dim x As Integer
Dim y As Integer
Dim s As String
'生成字符串的长度
y = 8
x = 0
'在数组中生成"BSTR"字符串,并以0结尾
CopyMemory a0, 66, 2
CopyMemory a1, 83, 2
CopyMemory a2, 84, 2
CopyMemory a3, 82, 2
CopyMemory a4, 0, 2
'a0 = 66 '上面五句也可以写成这样,但是缺少了指针操作的味道
'a1 = 83
'a2 = 84
'a3 = 82
'a4 = 0
Dim ps As Long
ps = VarPtr(s) '获取字符串变量的地址
Dim pi As Long
pi = VarPtr(a0) '获取字符串存储位置的起始地址
CopyMemory ByVal ps, pi, 4 '把存储字符串的开始地址存入字符串变量的地址中
'CopyMemory ByVal VarPtr(s), VarPtr(a0), 4 '上面五句也可以合并成本句
Debug.Print s
End Sub
源代码中的注释已经说明问题了。
写完代码,再去看书,发现书上说的已经足够清楚。愚笨的只是自己,算是给“纸上得来终觉浅,绝知此事要躬行。”做注吧。