17BSTR AllocBstrOrDie(std::wstring_view non_bstr) {
18 BSTR
result = ::SysAllocStringLen(non_bstr.data(),
19 checked_cast<UINT>(non_bstr.length()));
25BSTR AllocBstrBytesOrDie(
size_t bytes) {
26 BSTR
result = ::SysAllocStringByteLen(
nullptr, checked_cast<UINT>(bytes));
35 : bstr_(AllocBstrOrDie(non_bstr)) {}
38 static_assert(
sizeof(
ScopedBstr) ==
sizeof(BSTR),
"ScopedBstrSize");
39 ::SysFreeString(bstr_);
45 ::SysFreeString(bstr_);
68 Reset(AllocBstrOrDie(str));
73 Reset(AllocBstrBytesOrDie(bytes));
79 uint32_t* data =
reinterpret_cast<uint32_t*
>(bstr_);
80 data[-1] = checked_cast<uint32_t>(bytes);
84 return ::SysStringLen(bstr_);
88 return ::SysStringByteLen(bstr_);
BSTR Allocate(std::wstring_view str)
size_t ByteLength() const
void SetByteLen(size_t bytes)
void Reset(BSTR bstr=nullptr)
void Swap(ScopedBstr &bstr2)
BSTR AllocateBytes(size_t bytes)
#define BASE_DCHECK(condition)