不能用String
这与VB的String很特殊有关
VB的变长字符串变量实际上是一个32位的指针,指向字符串数据区
字符串数据区的前四个字节是字符串的长度
然后是字符串数据,注意VB的字符串是UniCode格式的,一个字符占两个字节
最后还有两个为0的字节,是为了传递字符串给UniCode字符串格式的API而特地加的。表字符串结束,但用Mid函数等VB内部函数都会屏蔽“最后还有两个为0的字节”的内容
这与VB的String很特殊有关
VB的变长字符串变量实际上是一个32位的指针,指向字符串数据区
字符串数据区的前四个字节是字符串的长度
然后是字符串数据,注意VB的字符串是UniCode格式的,一个字符占两个字节
最后还有两个为0的字节,是为了传递字符串给UniCode字符串格式的API而特地加的。表字符串结束,但用Mid函数等VB内部函数都会屏蔽“最后还有两个为0的字节”的内容
CopyMemory ByVal baSafe, ByVal VarPtr(a1), LenB(a1)
Debug.Print UBound(ba) ''正确
CopyMemory ByVal VarPtr(a2), ByVal baSafe, LenB(a2) + 1 ''错误,应该是 LenB(a2)
Debug.Print UBound(ba) ''错误