BStringクラス
BString クラスは、COMで用いられるUnicode (UTF-16LE)文字列のBSTR型をラップするクラスです。
クラスの機能
公開メソッド
コンストラクタ
BStringを構築します。
Sub BString()
内容は空として構築します。メモリは確保されません。
Sub BString(len As DWord)
lenで指定された長さを持つようになります。中身は不定です。
Sub BString(s As BString)
既存のBStringの内容を元に構築するコピーコンストラクタです。
Sub BString(s As LPCOLESTR)
ヌル文字で終わるワイド文字列sを元に構築します。
Sub BString(s As LPCOLESTR, len As DWord)
sをlenで指定される長さを持つワイド文字列として、それを元に構築します。
Sub BString(s As PCSTR)
ヌル文字で終わるマルチバイト文字列sを元に構築します。
Sub BString(s As PCSTR, len As DWord)
sをlenで指定される長さを持つマルチバイト文字列として、それを元に構築します。
Sub BString(s As String)
Stringクラスの内容を元に構築します。
デストラクタ
BStringインスタンスの破棄を行います。
Sub ~BString()
Clearを呼びます。
添え字演算子
要素を参照します。
Const Function Operator [](i As SIZE_T) As OLECHAR Sub Operator []=(i As SIZE_T, c As OLECHAR)
- i
- 0から始まる要素数。0以上Length未満の値が有効です。
- c, 戻り値
- その要素の文字
Operator []では要素を読み取ります。Operator []=では要素を書き込みます。
Clear
文字列のメモリを解放します。
Sub Clear()
メモリが確保されている場合、SysFreeString関数で解放されます。
Assign
代入を行います。
Sub Assign(bstr As BString) Sub Assign(s As LPCOLESTR)
- bstr, s
- 代入元となる文字列。
それまでBStringが保持していた文字列のメモリは解放されます。BSTR文字列の代入にはAssginFromBStrの使用をお勧めします。
AssginFromBStr
BSTR文字列からの代入を行います。
Sub AssginFromBStr(bstr As BSTR)
- bstr
- 代入元となる文字列。
それまでBStringが保持していた文字列のメモリは解放されます。
BSTR文字列からの代入する場合、BSTRの文字列の長さの情報を生かすためこのメソッドを使ってください。また、代入ではなく、BSTR文字列をBStringの管理下におくメソッドとしてAttachも存在します。
使用例
Function SomeFuncReturingBSTR() As BSTR Return SysAllocString(...) End Function
Sub Proc() Dim ret = SomeFuncReturingBSTR() Dim bs As BString bs.AssginFromBStr(ret) SysFreeString(ret) End Sub
Attach
既存のBSTR文字列をBStringの管理下に置きます。
Sub Attach(ByRef bstr As BSTR)
それまでBStringが保持していた文字列のメモリは解放されます。
注意:Attachに引き渡したBSTR文字列は手動で解放しないでください。引き続きBSTRの管理を行う場合はAssginFromBStrを使用してください。
使用例
Function SomeFuncReturingBSTR() As BSTR Return SysAllocString(...) End Function
Sub Proc() Dim ret = SomeFuncReturingBSTR() Dim bs As BString bs.Attach(ret) End Sub
Copy
文字列を複写して返します。
Const Function Copy() As BSTR
- 戻り値
- BStringの内容をコピーしたBSTR
返されたBSTRは手動で開放する必要があります。また、Detachと違い中の文字列のコピーを返すため、Copyを呼んだ後でも依然としてこのBStringの内容は有効です。
使用例
Dim BStr As BString("piyo") Function GetBStr() As BString Return BStr.Copy() End Function
Sub Proc() Dim ret = GetBStr() ' …… SysFreeString(ret) End Sub
Detach
BStringが現在保持しているBSTRを管理下から外します。
Function Detach() As BSTR
- 戻り値
- これまでBStringが保持していたBSTR文字列
Copyと違い、このメソッドを呼び出した後BStrから得られる値は0 (NULL)になります。
使用例
Function SomeFuncReturingBSTR() As BSTR Dim bs As BString("ぴよ") Return bs.Detach() End Function
Dim ret = SomeFuncReturingBSTR() SysFreeString(ret)
ToString
String型へ文字列を変換します。
Override Function ToString() As String
- 戻り値
- このBString文字列の内容をString文字列化したもの。
StringがUnicode文字列のときには、情報が失われることはありません。そうでない場合、Stringへ変換すると表現できない文字があるため一部の情報が失われる(BStringに戻しても元と同じ文字列にならない)可能性があります。
プロパティ
BStr
BStringインスタンスが内部に保持しているBSTR文字列を得ます。
Function BStr() As BSTR
- 戻り値
- BSTR文字列
このプロパティで得られるBSTR文字列のメモリはBStringの管理下にありますので、このプロパティで得られるBSTR値に対してSysFreeStringやSysReAllocStringで解放・再割当は行わないでください。BStringの管理下から外し手動で解放するようにしたい場合は、Detachを使用してください。
Length
文字列の長さを得ます。
Const Function Length() As DWord
- 戻り値
- 文字列の長さ
文字列の長さには終端のヌル文字は含まれません。