使用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
對(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

