' com/bstring.ab #require #require Class BString Public Sub BString() bs = 0 End Sub Sub BString(len As DWord) bs = SysAllocStringLen(0, len) End Sub Sub BString(ByRef s As BString) BString(s.bs, s.Length) End Sub Sub BString(s As LPCOLESTR) bs = SysAllocString(s) End Sub Sub BString(s As LPCOLESTR, len As DWord) bs = SysAllocStringLen(s, len) End Sub Sub BString(s As PCSTR) BString(s, lstrlenA(s)) End Sub Sub BString(s As PCSTR, len As DWord) Dim lenBS = MultiByteToWideChar(CP_THREAD_ACP, 0, s, len, 0, 0) bs = SysAllocStringLen(0, lenBS) MultiByteToWideChar(CP_THREAD_ACP, 0, s, len, bs, lenBS) End Sub Sub BString(ByRef s As String) BString(s.StrPtr, s.Length As DWord) End Sub Sub ~BString() Clear() End Sub Sub Operator =(ByRef bstr As BString) Clear() BString(bstr) End Sub Sub Operator =(s As LPCOLESTR) Clear() BString(s) End Sub Sub Assign(ByRef bstr As BString) Clear() BString(bstr) End Sub Sub Assign(s As LPCOLESTR) Clear() BString(s) End Sub Sub AssignFromBStr(bstr As BSTR) Clear() BString(bstr) End Sub Sub Clear() If bs <> 0 Then SysFreeString(bs) bs = 0 End If End Sub Sub Attach(bstr As BSTR) Clear() bs = bstr End Sub Function Detach() As BSTR Detach = bs bs = 0 End Function Function BStr() As BSTR BStr = bs End Function Const Function Length() As DWord Length = SysStringLen(bs) End Function Const Function Operator [](i As SIZE_T) As OLECHAR #ifdef _DEBUG If i > Length Then 'Throw OutOfRangeException End If #endif Return bs[i] End Function Sub Operator []=(i As SIZE_T, c As OLECHAR) #ifdef _DEBUG If i > Length Then 'Throw OutOfRangeException End If #endif bs[i] = c End Sub Override Function ToString() As String Dim s As String(bs, Length) Return s End Function Private bs As BSTR End Class