VB“变态”用法之高效字串指针类

2026-03-23
使用VB里的字串类型String有两大不足:第一、它的分配是由VB运行时控制,我们不能将其分配在指定内存处;第二,任何一次对字串的赋值操作都要进行内存重新分配。要实现高效、灵活的字串处理,我们必须克服这两大不足。
  
  对于第一个问题,通过修改String变量里放着的BSTR描述符指针可以实现;对于第二个问题,可以用Mid语句(注意是语句而不是函数)来赋值。不详细讲了,直接看下面的这个类:
  
  Option Explicit
  
  '********************************************************
  'clsBSTR.cls
  '作者: 熊超 ID: AdamBear 2002年3月18日
  'http://www.csdn.net/Author/AdamBear
  ' 你可以自由使用本类模块,不过请保留本声明
  '********************************************************
  
  Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  
  '不要直接对sString赋值(可以用MID语句),将其设为公有仅为提高效率。
  Public sString As String 'BSTR描述符指针
  
  Private pStr As Long 'BSTR地址
  Private nMaxLen As Long 'BSTR字节数
  
  '让本字串指向特定地址
  Public Sub Attach(Addr As Long, Optional nLen As Long)
  pStr = Addr
  '修改BSTR描述符指针,使其指向Addr
  CopyMemory ByVal VarPtr(sString), Addr, 4
  
  If IsMissing(nLen) Then Exit Sub
  '设定字串字节数
  nMaxLen = nLen
  
  End Sub
  
  '还原本字串原BSTR描述符
  Public Sub Detach()
  CopyMemory ByVal VarPtr(sString), 0&, 4
  End Sub