source: Include/com/bstring.ab@ 208

Last change on this file since 208 was 208, checked in by イグトランス (egtra), 17 years ago

[207]参照型変数のNothing初期化に対応する修正

File size: 2.6 KB
Line 
1' com/bstring.ab
2
3#require <ole2.ab>
4#require <oleauto.ab>
5
6Class BString
7Public
8 Sub BString()
9 bs = 0
10 End Sub
11
12 Sub BString(len As DWord)
13 bs = SysAllocStringLen(0, len)
14 End Sub
15
16 Sub BString(ByRef s As BString)
17 BString(s.bs, s.Length)
18 End Sub
19
20 Sub BString(s As LPCOLESTR)
21 bs = SysAllocString(s)
22 End Sub
23
24 Sub BString(s As LPCOLESTR, len As DWord)
25 bs = SysAllocStringLen(s, len)
26 End Sub
27
28 Sub BString(s As PCSTR)
29 BString(s, lstrlenA(s))
30 End Sub
31
32 Sub BString(s As PCSTR, len As DWord)
33 Dim lenBS = MultiByteToWideChar(CP_THREAD_ACP, 0, s, len As Long, 0, 0)
34 bs = SysAllocStringLen(0, lenBS)
35 MultiByteToWideChar(CP_THREAD_ACP, 0, s, len As Long, bs, lenBS)
36 End Sub
37
38 Sub BString(ByRef s As String)
39 BString(s.StrPtr, s.Length As DWord)
40 End Sub
41
42 Sub ~BString()
43 Clear()
44 End Sub
45
46 Sub Operator =(ByRef bstr As BString)
47 Clear()
48 BString(bstr)
49 End Sub
50
51 Sub Operator =(s As LPCOLESTR)
52 Clear()
53 BString(s)
54 End Sub
55
56 Sub Assign(ByRef bstr As BString)
57 Clear()
58 BString(bstr)
59 End Sub
60
61 Sub Assign(s As LPCOLESTR)
62 Clear()
63 BString(s)
64 End Sub
65
66 Sub AssignFromBStr(bstr As BSTR)
67 Clear()
68 String.Copy(bs, bstr)
69 End Sub
70
71 Const Function Copy() As BSTR
72 BString.Copy(Copy, bs)
73 End Function
74
75 Sub Clear()
76 If bs <> 0 Then
77 SysFreeString(bs)
78 bs = 0
79 End If
80 End Sub
81
82 Sub Attach(ByRef bstr As BSTR)
83 Clear()
84 BString.Move(bs, bstr)
85 End Sub
86
87 Function Detach() As BSTR
88 BString.Move(Detach, bs)
89 End Function
90
91 Function BStr() As BSTR
92 BStr = bs
93 End Function
94/*
95 Static Function Assgin(bs As BSTR) As BString
96 Assgin = New BString
97 Assgin.Assgin(bs)
98 End Function
99
100 Static Function Attach(bs As BSTR) As BString
101 Attach = New BString
102 Attach.Attach(bs)
103 End Function
104*/
105 Const Function Length() As DWord
106 Length = SysStringLen(bs)
107 End Function
108
109 Const Function Operator [](i As SIZE_T) As OLECHAR
110#ifdef _DEBUG
111 If i > Length Then
112 'Throw OutOfRangeException
113 End If
114#endif
115 Return bs[i]
116 End Function
117
118 Sub Operator []=(i As SIZE_T, c As OLECHAR)
119#ifdef _DEBUG
120 If i > Length Then
121 'Throw OutOfRangeException
122 End If
123#endif
124 bs[i] = c
125 End Sub
126
127 Override Function ToString() As String
128 Return New String(bs As PCWSTR, Length As Long)
129 End Function
130
131 Override Function GetHashCode() As Long
132 Return _System_GetHashFromWordArray(bs, Length)
133 End Function
134
135Private
136 bs As BSTR
137
138 Static Sub Copy(ByRef dst As BSTR, ByVal src As BSTR)
139 dst = SysAllocStringLen(src, SysStringLen(src))
140 End Sub
141
142 Static Sub Move(ByRef dst As BSTR, ByRef src As BSTR)
143 dst = src
144 src = 0
145 End Sub
146End Class
147
Note: See TracBrowser for help on using the repository browser.