VB“變態(tài)”用法之高效字串指針類

字號(hào):

使用VB里的字串類型String有兩大不足:第一、它的分配是由VB運(yùn)行時(shí)控制,我們不能將其分配在指定內(nèi)存處;第二,任何一次對(duì)字串的賦值操作都要進(jìn)行內(nèi)存重新分配。要實(shí)現(xiàn)高效、靈活的字串處理,我們必須克服這兩大不足。
    對(duì)于第一個(gè)問(wèn)題,通過(guò)修改String變量里放著的BSTR描述符指針可以實(shí)現(xiàn);對(duì)于第二個(gè)問(wèn)題,可以用Mid語(yǔ)句(注意是語(yǔ)句而不是函數(shù))來(lái)賦值。不詳細(xì)講了,直接看下面的這個(gè)類:
    Option Explicit
    '********************************************************
    'clsBSTR.cls
    '作者: 熊超 ID: AdamBear 2002年3月18日
    'http://www.csdn.net/Author/AdamBear
    ' 你可以自由使用本類模塊,不過(guò)請(qǐng)保留本聲明
    '********************************************************
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    '不要直接對(duì)sString賦值(可以用MID語(yǔ)句),將其設(shè)為公有僅為提高效率。
    Public sString As String 'BSTR描述符指針
    Private pStr As Long 'BSTR地址
    Private nMaxLen As Long 'BSTR字節(jié)數(shù)
    '讓本字串指向特定地址
    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
    '設(shè)定字串字節(jié)數(shù)
    nMaxLen = nLen
    End Sub
    '還原本字串原BSTR描述符
    Public Sub Detach()
    CopyMemory ByVal VarPtr(sString), 0&, 4
    End Sub