「BStringクラス」の版間の差分
(→Detach: 書き書けとなっていた文を修正) |
細 (ページ BString クラス を BStringクラス へ移動: #127) |
||
(同じ利用者による、間の3版が非表示) | |||
1行目: | 1行目: | ||
'''BString''' クラスは、COMで用いられるUnicode (UTF- | '''BString''' クラスは、COMで用いられるUnicode (UTF-16LE)文字列のBSTR型をラップするクラスです。 | ||
== クラスの機能 == | == クラスの機能 == | ||
9行目: | 9行目: | ||
Sub BString(len As DWord) | Sub BString(len As DWord) | ||
lenで指定された長さを持つようになります。中身は不定です。 | lenで指定された長さを持つようになります。中身は不定です。 | ||
Sub BString( | Sub BString(s As BString) | ||
既存のBStringの内容を元に構築するコピーコンストラクタです。 | 既存のBStringの内容を元に構築するコピーコンストラクタです。 | ||
Sub BString(s As LPCOLESTR) | Sub BString(s As LPCOLESTR) | ||
19行目: | 19行目: | ||
Sub BString(s As PCSTR, len As DWord) | Sub BString(s As PCSTR, len As DWord) | ||
sをlenで指定される長さを持つマルチバイト文字列として、それを元に構築します。 | sをlenで指定される長さを持つマルチバイト文字列として、それを元に構築します。 | ||
Sub BString( | Sub BString(s As String) | ||
[[ | [[Stringクラス]]の内容を元に構築します。 | ||
==== デストラクタ ==== | ==== デストラクタ ==== | ||
27行目: | 27行目: | ||
[[#Clear|Clear]]を呼びます。 | [[#Clear|Clear]]を呼びます。 | ||
====添え字演算子==== | |||
==== 添え字演算子 ==== | |||
要素を参照します。 | 要素を参照します。 | ||
Const Function Operator [](i As SIZE_T) As OLECHAR | Const Function Operator [](i As SIZE_T) As OLECHAR | ||
Sub Operator []=(i As SIZE_T, c As OLECHAR) | Sub Operator []=(i As SIZE_T, c As OLECHAR) | ||
; i | ;i | ||
: 0から始まる要素数。0以上Length未満の値が有効です。 | :0から始まる要素数。0以上Length未満の値が有効です。 | ||
; c, 戻り値 | ;c, 戻り値 | ||
: その要素の文字 | :その要素の文字 | ||
Operator []では要素を読み取ります。Operator []=では要素を書き込みます。 | Operator []では要素を読み取ります。Operator []=では要素を書き込みます。 | ||
==== Clear ==== | ====Clear==== | ||
文字列のメモリを解放します。 | 文字列のメモリを解放します。 | ||
Sub Clear() | Sub Clear() | ||
メモリが確保されている場合、SysFreeString関数で解放されます。 | メモリが確保されている場合、SysFreeString関数で解放されます。 | ||
==== Assign ==== | ====Assign==== | ||
代入を行います。 | 代入を行います。 | ||
Sub Assign( | Sub Assign(bstr As BString) | ||
Sub Assign(s As LPCOLESTR) | Sub Assign(s As LPCOLESTR) | ||
; bstr, s | ;bstr, s | ||
: 代入元となる文字列。 | :代入元となる文字列。 | ||
それまでBStringが保持していた文字列のメモリは解放されます。BSTR文字列の代入には[[#AssginFromBStr|AssginFromBStr]]の使用をお勧めします。 | それまでBStringが保持していた文字列のメモリは解放されます。BSTR文字列の代入には[[#AssginFromBStr|AssginFromBStr]]の使用をお勧めします。 | ||
==== AssginFromBStr ==== | ====AssginFromBStr==== | ||
BSTR文字列からの代入を行います。 | BSTR文字列からの代入を行います。 | ||
Sub AssginFromBStr(bstr As BSTR) | Sub AssginFromBStr(bstr As BSTR) | ||
; bstr | ;bstr | ||
: 代入元となる文字列。 | :代入元となる文字列。 | ||
それまでBStringが保持していた文字列のメモリは解放されます。 | それまでBStringが保持していた文字列のメモリは解放されます。 | ||
BSTR文字列からの代入する場合、BSTRの文字列の長さの情報を生かすためこのメソッドを使ってください。また、代入ではなく、BSTR文字列をBStringの管理下におくメソッドとして[[#Attach|Attach]]も存在します。 | BSTR文字列からの代入する場合、BSTRの文字列の長さの情報を生かすためこのメソッドを使ってください。また、代入ではなく、BSTR文字列をBStringの管理下におくメソッドとして[[#Attach|Attach]]も存在します。 | ||
===== 使用例 ===== | =====使用例===== | ||
Function SomeFuncReturingBSTR() As BSTR | Function SomeFuncReturingBSTR() As BSTR | ||
Return SysAllocString(...) | Return SysAllocString(...) | ||
79行目: | 71行目: | ||
End Sub | End Sub | ||
==== Attach ==== | ====Attach==== | ||
既存のBSTR文字列をBStringの管理下に置きます。 | 既存のBSTR文字列をBStringの管理下に置きます。 | ||
Sub Attach(ByRef bstr As BSTR) | Sub Attach(ByRef bstr As BSTR) | ||
86行目: | 78行目: | ||
'''注意''':Attachに引き渡したBSTR文字列は手動で解放しないでください。引き続きBSTRの管理を行う場合は[[#AssginFromBStr|AssginFromBStr]]を使用してください。 | '''注意''':Attachに引き渡したBSTR文字列は手動で解放しないでください。引き続きBSTRの管理を行う場合は[[#AssginFromBStr|AssginFromBStr]]を使用してください。 | ||
===== 使用例 ===== | =====使用例===== | ||
Function SomeFuncReturingBSTR() As BSTR | Function SomeFuncReturingBSTR() As BSTR | ||
Return SysAllocString(...) | Return SysAllocString(...) | ||
97行目: | 89行目: | ||
End Sub | End Sub | ||
==== Copy ==== | ====Copy==== | ||
文字列を複写して返します。 | 文字列を複写して返します。 | ||
Const Function Copy() As BSTR | Const Function Copy() As BSTR | ||
; 戻り値 | ;戻り値 | ||
: BStringの内容をコピーしたBSTR | :BStringの内容をコピーしたBSTR | ||
返されたBSTRは手動で開放する必要があります。また、[[#Detach|Detach]]と違い中の文字列のコピーを返すため、Copyを呼んだ後でも依然としてこのBStringの内容は有効です。 | 返されたBSTRは手動で開放する必要があります。また、[[#Detach|Detach]]と違い中の文字列のコピーを返すため、Copyを呼んだ後でも依然としてこのBStringの内容は有効です。 | ||
===== 使用例 ===== | ===== 使用例===== | ||
Dim BStr As BString("piyo") | Dim BStr As BString("piyo") | ||
Function GetBStr() As BString | Function GetBStr() As BString | ||
116行目: | 108行目: | ||
End Sub | End Sub | ||
==== Detach ==== | ====Detach==== | ||
BStringが現在保持しているBSTRを管理下から外します。 | BStringが現在保持しているBSTRを管理下から外します。 | ||
Function Detach() As BSTR | Function Detach() As BSTR | ||
; 戻り値 | ;戻り値 | ||
: これまでBStringが保持していたBSTR文字列 | :これまでBStringが保持していたBSTR文字列 | ||
[[#Copy|Copy]]と違い、このメソッドを呼び出した後[[#BStr|BStr]]から得られる値は0 (NULL)になります。 | [[#Copy|Copy]]と違い、このメソッドを呼び出した後[[#BStr|BStr]]から得られる値は0 (NULL)になります。 | ||
===== 使用例 ===== | =====使用例===== | ||
Function SomeFuncReturingBSTR() As BSTR | Function SomeFuncReturingBSTR() As BSTR | ||
Dim bs As BString("ぴよ") | Dim bs As BString("ぴよ") | ||
132行目: | 124行目: | ||
SysFreeString(ret) | SysFreeString(ret) | ||
==== ToString ==== | ====ToString==== | ||
[[ | [[Stringクラス|String]]型へ文字列を変換します。 | ||
Override Function ToString() As String | Override Function ToString() As String | ||
; 戻り値 | ;戻り値 | ||
: このBString文字列の内容をString文字列化したもの。 | :このBString文字列の内容をString文字列化したもの。 | ||
StringがUnicode文字列のときには、情報が失われることはありません。そうでない場合、Stringへ変換すると表現できない文字があるため一部の情報が失われる(BStringに戻しても元と同じ文字列にならない)可能性があります。 | |||
=== プロパティ === | ===プロパティ=== | ||
==== BStr ==== | ==== BStr==== | ||
BStringインスタンスが内部に保持しているBSTR文字列を得ます。 | BStringインスタンスが内部に保持しているBSTR文字列を得ます。 | ||
Function BStr() As BSTR | Function BStr() As BSTR | ||
; 戻り値 | ;戻り値 | ||
: BSTR文字列 | :BSTR文字列 | ||
このプロパティで得られるBSTR文字列のメモリはBStringの管理下にありますので、このプロパティで得られるBSTR値に対してSysFreeStringやSysReAllocStringで解放・再割当は行わないでください。BStringの管理下から外し手動で解放するようにしたい場合は、[[#Detach|Detach]]を使用してください。 | このプロパティで得られるBSTR文字列のメモリはBStringの管理下にありますので、このプロパティで得られるBSTR値に対してSysFreeStringやSysReAllocStringで解放・再割当は行わないでください。BStringの管理下から外し手動で解放するようにしたい場合は、[[#Detach|Detach]]を使用してください。 | ||
==== Length ==== | ====Length==== | ||
文字列の長さを得ます。 | 文字列の長さを得ます。 | ||
Const Function Length() As DWord | Const Function Length() As DWord | ||
; 戻り値 | ;戻り値 | ||
: 文字列の長さ | :文字列の長さ | ||
文字列の長さには終端のヌル文字は含まれません。 | 文字列の長さには終端のヌル文字は含まれません。 | ||
[[Category: | [[Category:ActiveBasic.COM名前空間|BSTRING]] |
2007年8月5日 (日) 11:19時点における最新版
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
- 戻り値
- 文字列の長さ
文字列の長さには終端のヌル文字は含まれません。