BStringクラス

提供: AB開発Wiki
2007年3月21日 (水) 01:39時点におけるEgtra (トーク | 投稿記録)による版 (→‎Detach: 書き書けとなっていた文を修正)
ナビゲーションに移動検索に移動

BString クラスは、COMで用いられるUnicode (UTF-16)文字列のBSTR型をラップするクラスです。

クラスの機能

公開メソッド

コンストラクタ

BStringを構築します。

Sub BString()

内容は空として構築します。メモリは確保されません。

Sub BString(len As DWord)

lenで指定された長さを持つようになります。中身は不定です。

Sub BString(ByRef 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(ByRef s As String)

String クラスの内容を元に構築します。

デストラクタ

BStringインスタンスの破棄を行います。

Sub ~BString()

Clearを呼びます。

代入演算子

代入を行います。

Sub Operator =(ByRef bstr As BString)
Sub Operator =(s As LPCOLESTR)
bstr, s
代入元となる文字列。

Assignが呼ばれます。BSTR文字列の代入にはAssginFromBStrの使用をお勧めします。

添え字演算子

要素を参照します。

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(ByRef 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へ変換すると表現できない文字があるため一部のデータが失われる可能性があります。

プロパティ

BStr

BStringインスタンスが内部に保持しているBSTR文字列を得ます。

Function BStr() As BSTR
戻り値
BSTR文字列

このプロパティで得られるBSTR文字列のメモリはBStringの管理下にありますので、このプロパティで得られるBSTR値に対してSysFreeStringやSysReAllocStringで解放・再割当は行わないでください。BStringの管理下から外し手動で解放するようにしたい場合は、Detachを使用してください。

Length

文字列の長さを得ます。

Const Function Length() As DWord
戻り値
文字列の長さ

文字列の長さには終端のヌル文字は含まれません。