「BStringクラス」の版間の差分

提供: AB開発Wiki
ナビゲーションに移動検索に移動
(BStringはCOMのBSTR型のラッパ)
 
(ページ BString クラスBStringクラス へ移動: #127)
 
(同じ利用者による、間の7版が非表示)
1行目: 1行目:
'''BString''' クラスは、COMで用いられるUnicode (UTF-16)文字列のBSTR型をラップするクラスです。
+
'''BString''' クラスは、COMで用いられるUnicode (UTF-16LE)文字列のBSTR型をラップするクラスです。
  
 
== クラスの機能 ==
 
== クラスの機能 ==
9行目: 9行目:
 
  Sub BString(len As DWord)
 
  Sub BString(len As DWord)
 
lenで指定された長さを持つようになります。中身は不定です。
 
lenで指定された長さを持つようになります。中身は不定です。
  Sub BString(ByRef s As 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(ByRef s As String)
+
  Sub BString(s As String)
[[String クラス]]の内容を元に構築します。
+
[[Stringクラス]]の内容を元に構築します。
  
 
==== デストラクタ ====
 
==== デストラクタ ====
 
BStringインスタンスの破棄を行います。
 
BStringインスタンスの破棄を行います。
 
  Sub ~BString()
 
  Sub ~BString()
Clearメソッドを呼びます。
+
[[#Clear|Clear]]を呼びます。
  
==== 代入演算子 ====
+
====添え字演算子====
代入を行います。
 
Sub Operator =(ByRef bstr As BString)
 
Sub Operator =(s As LPCOLESTR)
 
; bstr, s
 
: 代入元となる文字列。
 
[[#Assgin|Assign]]が呼ばれます。BSTR文字列の代入には[[#AssginFromBStr|AssginFromBStr]]の使用をお勧めします。
 
 
 
==== 添え字演算子 ====
 
 
要素を参照します。
 
要素を参照します。
 
  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 []=では要素を書き込みます。
  
==== Assign ====
+
====Clear====
 +
文字列のメモリを解放します。
 +
Sub Clear()
 +
メモリが確保されている場合、SysFreeString関数で解放されます。
 +
 
 +
====Assign====
 
代入を行います。
 
代入を行います。
  Sub Assign(ByRef bstr As BString)
+
  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(...)
74行目: 71行目:
 
  End Sub
 
  End Sub
  
==== Attach ====
+
====Attach====
 
既存のBSTR文字列をBStringの管理下に置きます。
 
既存のBSTR文字列をBStringの管理下に置きます。
  Sub Attach(bstr As BSTR)
+
  Sub Attach(ByRef bstr As BSTR)
 
それまでBStringが保持していた文字列のメモリは解放されます。
 
それまでBStringが保持していた文字列のメモリは解放されます。
  
 
'''注意''':Attachに引き渡したBSTR文字列は手動で解放しないでください。引き続きBSTRの管理を行う場合は[[#AssginFromBStr|AssginFromBStr]]を使用してください。
 
'''注意''':Attachに引き渡したBSTR文字列は手動で解放しないでください。引き続きBSTRの管理を行う場合は[[#AssginFromBStr|AssginFromBStr]]を使用してください。
  
==== Clear ====
+
=====使用例=====
文字列のメモリを解放します。
 
Sub Clear()
 
メモリが確保されている場合、SysFreeString関数で解放されます。
 
 
 
===== 使用例 =====
 
 
  Function SomeFuncReturingBSTR() As BSTR
 
  Function SomeFuncReturingBSTR() As BSTR
 
     Return SysAllocString(...)
 
     Return SysAllocString(...)
97行目: 89行目:
 
  End Sub
 
  End Sub
  
==== Detach ====
+
====Copy====
 +
文字列を複写して返します。
 +
Const Function Copy() As BSTR
 +
;戻り値
 +
:BStringの内容をコピーしたBSTR
 +
返されたBSTRは手動で開放する必要があります。また、[[#Detach|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を管理下から外します。
 
BStringが現在保持しているBSTRを管理下から外します。
 
  Function Detach() As BSTR
 
  Function Detach() As BSTR
; 戻り値
+
;戻り値
: これまでBStringが保持していたBSTR文字列
+
:これまでBStringが保持していたBSTR文字列
このメソッドを呼び出した後[[#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("ぴよ")
113行目: 124行目:
 
  SysFreeString(ret)
 
  SysFreeString(ret)
  
==== ToString ====
+
====ToString====
[[String クラス|String]]へ文字列を変換します。
+
[[Stringクラス|String]]型へ文字列を変換します。
 
  Override Function ToString() As String
 
  Override Function ToString() As String
; 戻り値
+
;戻り値
: このBString文字列の内容をString文字列化したもの。
+
:このBString文字列の内容をString文字列化したもの。
StringがUnicode文字列のときには、内容が失われることはありません。そうでない場合、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:COM]]
+
[[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
戻り値
文字列の長さ

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