acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
bstring.h
1
#pragma once
2
3
4
#include "acme/_operating_system.h"
5
6
7
class
CLASS_DECL_ACME bstring
8
{
9
public
:
10
11
12
BSTR m_bstr;
13
14
15
bstring() { m_bstr =
nullptr
; }
16
bstring(
const
OLECHAR * sz) { m_bstr = allocate_string(sz); }
17
18
bstring(const ::scoped_string & scopedstr)
19
{
20
21
m_bstr = allocate_string(scopedstr);
22
23
}
24
25
~bstring() {
if
(m_bstr) allocate_string(m_bstr); m_bstr =
nullptr
; }
26
27
28
operator
BSTR() {
return
m_bstr; }
29
operator
BSTR()
const
{
return
m_bstr; }
30
31
BSTR c_str()
const
{
return
m_bstr; }
32
33
static
BSTR allocate_string(
const
OLECHAR * sz);
34
35
static
BSTR allocate_string(const ::scoped_string & scopedstr);
36
37
static
void
free_string(BSTR bstr);
38
39
inline
static ::u32 SysStringByteLen(BSTR bstr)
40
{
41
if
(bstr == 0)
42
return
0;
43
return
*((::u32 *)bstr - 1);
44
}
45
46
inline
static ::u32 SysStringLen(BSTR bstr)
47
{
48
return
SysStringByteLen(bstr) /
sizeof
(OLECHAR);
49
}
50
51
BSTR detach()
52
{
53
auto
bstr = m_bstr;
54
55
m_bstr =
nullptr
;
56
return
bstr;
57
58
}
59
60
};
operating_system
windows_common
com
bstring.h
Generated by
1.17.0