91 com_obj(_In_ REFCLSID rclsid, _In_opt_ LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL)
93 CoCreateInstance(rclsid, pUnkOuter, dwClsContext, __uuidof(T), (LPVOID*)&
m_h);
101 template <
class _Other>
105 other->QueryInterface(__uuidof(T), (
void**)&
m_h);
113 template <
class _Other>
116 other->QueryInterface(__uuidof(T), (
void**)&
m_h);
133 HRESULT
create(_In_ REFCLSID rclsid, _In_opt_ LPUNKNOWN pUnkOuter = NULL, _In_ DWORD dwClsContext = CLSCTX_ALL)
136 HRESULT hr = CoCreateInstance(rclsid, pUnkOuter, dwClsContext, __uuidof(T), (
void**)&h);
147 template <
class _Other>
152 return m_h->QueryInterface(__uuidof(_Other), (
void**)h);
160 template <
class _Other>
165 HRESULT hr =
m_h->QueryInterface(__uuidof(_Other), (
void**)&_h);
209 bstr(_In_ LPCOLESTR src)
noexcept
211 m_h = SysAllocString(src);
217 bstr(_In_ LPCOLESTR src, _In_ UINT len)
noexcept
219 m_h = SysAllocStringLen(src, len);
225 template<
class _Traits,
class _Ax>
226 bstr(_In_
const std::basic_string<wchar_t, _Traits, _Ax> &src)
noexcept
228 m_h = SysAllocStringLen(src.c_str(), (UINT)src.length());
249 return SysStringLen(
m_h);
274 return SysAllocStringLen(h, SysStringLen(h));
281 #pragma warning(push)
282 #pragma warning(disable: 26432)
300 const HRESULT hr = VariantCopy(
this, &varSrc);
308 #pragma warning(suppress: 26495)
311 memcpy(
this, &varSrc,
sizeof(VARIANT));
312 varSrc.vt = VT_EMPTY;
321 boolVal = bSrc ? VARIANT_TRUE : VARIANT_FALSE;
363 variant(_In_
int nSrc, _In_ VARTYPE vtSrc = VT_I4)
noexcept
365 assert(vtSrc == VT_I4 || vtSrc == VT_INT);
373 variant(_In_
unsigned int nSrc, _In_ VARTYPE vtSrc = VT_UI4)
noexcept
375 assert(vtSrc == VT_UI4 || vtSrc == VT_UINT);
383 variant(_In_
long nSrc, _In_ VARTYPE vtSrc = VT_I4)
noexcept
385 assert(vtSrc == VT_I4 || vtSrc == VT_ERROR);
411 variant(_In_
double dblSrc, _In_ VARTYPE vtSrc = VT_R8)
noexcept
413 assert(vtSrc == VT_R8 || vtSrc == VT_DATE);
430 variant(_In_
unsigned long long nSrc)
noexcept
472 if (pdispVal != NULL)
493 assert(pSrc != NULL);
496 const HRESULT hr = SafeArrayCopy(
const_cast<LPSAFEARRAY
>(pSrc), &pCopy);
500 SafeArrayGetVartype(
const_cast<LPSAFEARRAY
>(pSrc), &vt);
518 if (
this != &varSrc) {
519 const HRESULT hr = VariantCopy(
this, &varSrc);
531 if (
this != &varSrc) {
533 memcpy(
this, &varSrc,
sizeof(VARIANT));
534 varSrc.vt = VT_EMPTY;
548 boolVal = bSrc ? VARIANT_TRUE : VARIANT_FALSE;
730 bstrVal = SysAllocString(lpszSrc);
742 if (pdispVal != NULL)
765 if (vt != (VT_UI1|VT_BYREF)) {
767 vt = VT_UI1|VT_BYREF;
778 if (vt != (VT_I2|VT_BYREF)) {
791 if (vt != (VT_UI2|VT_BYREF)) {
793 vt = VT_UI2|VT_BYREF;
804 if (vt != (VT_I4|VT_BYREF)) {
817 if (vt != (VT_UI4|VT_BYREF)) {
819 vt = VT_UI4|VT_BYREF;
830 if (vt != (VT_I4|VT_BYREF)) {
843 if (vt != (VT_UI4|VT_BYREF)) {
845 vt = VT_UI4|VT_BYREF;
856 if (vt != (VT_I8|VT_BYREF)) {
869 if (vt != (VT_UI8|VT_BYREF)) {
871 vt = VT_UI8|VT_BYREF;
882 if (vt != (VT_R4|VT_BYREF)) {
895 if (vt != (VT_R8|VT_BYREF)) {
908 assert(pSrc != NULL);
912 const HRESULT hr = SafeArrayCopy(
const_cast<LPSAFEARRAY
>(pSrc), &pCopy);
914 SafeArrayGetVartype(
const_cast<LPSAFEARRAY
>(pSrc), &vt);
934 if (vt == VT_NULL && varSrc.vt == VT_NULL)
return true;
935 if (vt != varSrc.vt)
return false;
936 return compare(
static_cast<const VARIANT&
>(*
this), varSrc, LOCALE_USER_DEFAULT, 0) ==
static_cast<HRESULT
>(VARCMP_EQ);
960 bool operator<(_In_
const VARIANT& varSrc)
const noexcept
962 if (vt == VT_NULL && varSrc.vt == VT_NULL)
return false;
963 return compare(
static_cast<const VARIANT&
>(*
this), varSrc, LOCALE_USER_DEFAULT, 0)==
static_cast<HRESULT
>(VARCMP_LT);
974 bool operator>(_In_
const VARIANT& varSrc)
const noexcept
976 if (vt == VT_NULL && varSrc.vt == VT_NULL)
return false;
977 return compare(
static_cast<const VARIANT&
>(*
this), varSrc, LOCALE_USER_DEFAULT, 0)==
static_cast<HRESULT
>(VARCMP_GT);
1011 HRESULT
change_type(_In_ VARTYPE _vt, _In_opt_ USHORT wFlags = 0) noexcept
1013 return VariantChangeType(
this,
this, wFlags, _vt);
1018 HRESULT compare(_In_
const VARIANT &varLeft, _In_
const VARIANT &varRight, _In_ LCID lcid, _In_ ULONG dwFlags)
const noexcept
1021 case VT_I1:
return varLeft.cVal == varRight.cVal ? VARCMP_EQ : varLeft.cVal > varRight.cVal ? VARCMP_GT : VARCMP_LT;
1022 case VT_UI2:
return varLeft.uiVal == varRight.uiVal ? VARCMP_EQ : varLeft.uiVal > varRight.uiVal ? VARCMP_GT : VARCMP_LT;
1023 case VT_UI4:
return varLeft.uintVal == varRight.uintVal ? VARCMP_EQ : varLeft.uintVal > varRight.uintVal ? VARCMP_GT : VARCMP_LT;
1024 case VT_UI8:
return varLeft.ullVal == varRight.ullVal ? VARCMP_EQ : varLeft.ullVal > varRight.ullVal ? VARCMP_GT : VARCMP_LT;
1025 default:
return VarCmp(
const_cast<LPVARIANT
>(&varLeft),
const_cast<LPVARIANT
>(&varRight), lcid, dwFlags);
1030 #pragma warning(pop)
1048 m_result = CoInitialize(pvReserved);
1058 m_result = CoInitializeEx(pvReserved, dwCoInit);
BSTR string wrapper.
Definition: COM.h:202
virtual ~bstr()
Destroys the string.
Definition: COM.h:236
bstr(_In_ const std::basic_string< wchar_t, _Traits, _Ax > &src) noexcept
Constructs BSTR from std::basic_string.
Definition: COM.h:226
void free_internal() noexcept override
Destroys the string.
Definition: COM.h:258
bstr(_In_ LPCOLESTR src) noexcept
Constructs BSTR from OLE string.
Definition: COM.h:209
UINT length() const noexcept
Returns the length of the string.
Definition: COM.h:247
handle_type duplicate_internal(_In_ handle_type h) const noexcept override
Duplicates the string.
Definition: COM.h:272
bstr(_In_ LPCOLESTR src, _In_ UINT len) noexcept
Constructs BSTR from OLE string with length.
Definition: COM.h:217
Context scope automatic COM (un)initialization.
Definition: COM.h:1036
com_initializer(_In_opt_ LPVOID pvReserved) noexcept
Initializes the COM library on the current thread and identifies the concurrency model as single-thre...
Definition: COM.h:1046
com_initializer(_In_opt_ LPVOID pvReserved, _In_ DWORD dwCoInit) noexcept
Initializes the COM library for use by the calling thread, sets the thread's concurrency model,...
Definition: COM.h:1056
HRESULT status() const noexcept
Return result of CoInitialize() call.
Definition: COM.h:1077
virtual ~com_initializer()
Uninitializes COM.
Definition: COM.h:1066
HRESULT m_result
Result of CoInitialize call.
Definition: COM.h:1083
COM object wrapper template.
Definition: COM.h:82
void free_internal() noexcept override
Releases the object by decrementing reference counter.
Definition: COM.h:177
handle_type duplicate_internal(_In_ handle_type h) const noexcept override
Duplicates the object by incrementing the reference counter.
Definition: COM.h:191
com_obj(_In_ com_obj< _Other > &other)
Queries the object for another interface and creates new class with it.
Definition: COM.h:114
com_obj(_In_ _Other *other)
Queries the object for another interface and creates new class with it.
Definition: COM.h:102
HRESULT create(_In_ REFCLSID rclsid, _In_opt_ LPUNKNOWN pUnkOuter=NULL, _In_ DWORD dwClsContext=CLSCTX_ALL)
Creates a new object.
Definition: COM.h:133
virtual ~com_obj()
Releases object.
Definition: COM.h:122
com_obj(_In_ REFCLSID rclsid, _In_opt_ LPUNKNOWN pUnkOuter=NULL, DWORD dwClsContext=CLSCTX_ALL)
Constructs a new object and creates a new class with it.
Definition: COM.h:91
HRESULT query_interface(_Out_ _Other **h) const
Queries the object for another interface.
Definition: COM.h:148
HRESULT query_interface(_Out_ com_obj< _Other > &h) const
Queries the object for another interface.
Definition: COM.h:161
COM runtime error.
Definition: COM.h:24
com_runtime_error(_In_ error_type num, _In_opt_z_ const char *msg=nullptr)
Constructs an exception.
Definition: COM.h:42
com_runtime_error(_In_ error_type num, _In_ const std::string &msg)
Constructs an exception.
Definition: COM.h:32
Base abstract template class to support object handle keeping for objects that support handle duplica...
Definition: Common.h:844
T * handle_type
Datatype of the object handle this template class handles.
Definition: Common.h:585
void attach(_In_opt_ handle_type h) noexcept
Sets a new object handle for the class.
Definition: Common.h:794
handle_type m_h
Object handle.
Definition: Common.h:833
Numerical runtime error.
Definition: Common.h:1390
HRESULT error_type
Error number type.
Definition: Common.h:1392
VARIANT struct wrapper.
Definition: COM.h:284
variant & operator=(_In_ double *pfSrc) noexcept
Copy from double reference.
Definition: COM.h:893
variant & operator=(_In_ short *pnSrc) noexcept
Copy from short reference.
Definition: COM.h:776
variant & operator=(_In_ short nSrc) noexcept
Copy from short value.
Definition: COM.h:581
variant & operator=(_In_ unsigned long long nSrc) noexcept
Copy from unsigned long long value.
Definition: COM.h:672
variant(_In_opt_ IDispatch *pSrc)
Constructs VARIANT from IDispatch.
Definition: COM.h:467
bool operator>=(_In_ const VARIANT &varSrc) const noexcept
Is variant greater than or equal to?
Definition: COM.h:1001
variant(_In_z_ LPCOLESTR lpszSrc) noexcept
Constructs VARIANT from OLE string.
Definition: COM.h:449
variant(_In_ long long nSrc) noexcept
Constructs VARIANT from 64-bit integer.
Definition: COM.h:421
variant & operator=(_In_ int *pnSrc) noexcept
Copy from int reference.
Definition: COM.h:802
bool operator>(_In_ const VARIANT &varSrc) const noexcept
Is variant greater than?
Definition: COM.h:974
variant & operator=(_In_ float fltSrc) noexcept
Copy from float value.
Definition: COM.h:686
variant & operator=(_In_ unsigned short nSrc) noexcept
Copy from unsigned short value.
Definition: COM.h:594
variant & operator=(_In_ char cSrc) noexcept
Copy from char value.
Definition: COM.h:555
variant(_In_ int nSrc, _In_ VARTYPE vtSrc=VT_I4) noexcept
Constructs VARIANT from integer.
Definition: COM.h:363
variant & operator=(_In_ CY cySrc) noexcept
Copy from CY value.
Definition: COM.h:712
variant & operator=(_In_ unsigned long long *pnSrc) noexcept
Copy from unsigned long long reference.
Definition: COM.h:867
variant & operator=(_Inout_opt_ IDispatch *pSrc)
Copy from IDispatch.
Definition: COM.h:737
variant(_In_ unsigned char nSrc) noexcept
Constructs VARIANT from byte.
Definition: COM.h:336
variant(_In_ float fltSrc) noexcept
Constructs VARIANT from float.
Definition: COM.h:402
variant(_In_ unsigned long nSrc) noexcept
Constructs VARIANT from unsigned long.
Definition: COM.h:393
variant(_In_ double dblSrc, _In_ VARTYPE vtSrc=VT_R8) noexcept
Constructs VARIANT from double or variant date.
Definition: COM.h:411
variant(_In_ long nSrc, _In_ VARTYPE vtSrc=VT_I4) noexcept
Constructs VARIANT from long.
Definition: COM.h:383
variant(_In_ unsigned int nSrc, _In_ VARTYPE vtSrc=VT_UI4) noexcept
Constructs VARIANT from unsigned integer.
Definition: COM.h:373
virtual ~variant()
Destroys VARIANT.
Definition: COM.h:508
bool operator<(_In_ const VARIANT &varSrc) const noexcept
Is variant less than?
Definition: COM.h:960
variant & operator=(_In_ unsigned long *pnSrc) noexcept
Copy from unsigned long reference.
Definition: COM.h:841
variant & operator=(_In_ long nSrc) noexcept
Copy from long value.
Definition: COM.h:633
variant & operator=(_In_ int nSrc) noexcept
Copy from int value.
Definition: COM.h:607
variant & operator=(_Inout_opt_ IUnknown *pSrc)
Copy from IUnknown.
Definition: COM.h:750
variant & operator=(_In_ long long nSrc) noexcept
Copy from long long value.
Definition: COM.h:659
variant & operator=(_In_ const SAFEARRAY *pSrc) noexcept
Copy from SAFEARRAY.
Definition: COM.h:906
bool operator!=(_In_ const VARIANT &varSrc) const noexcept
Is variant not equal to?
Definition: COM.h:947
variant(_In_ short nSrc) noexcept
Constructs VARIANT from short.
Definition: COM.h:345
variant(_In_ unsigned short nSrc) noexcept
Constructs VARIANT from unsigned short.
Definition: COM.h:354
variant(_In_ unsigned long long nSrc) noexcept
Constructs VARIANT from unsigned integer.
Definition: COM.h:430
bool operator==(_In_ const VARIANT &varSrc) const noexcept
Is variant equal to?
Definition: COM.h:932
variant & operator=(_In_ unsigned char *pbSrc) noexcept
Copy from unsigned char reference.
Definition: COM.h:763
variant(_In_z_ BSTR bstr) noexcept
Constructs VARIANT from BSTR.
Definition: COM.h:458
variant() noexcept
Constructs blank VARIANT.
Definition: COM.h:289
variant & operator=(_In_ double dblSrc) noexcept
Copy from double value.
Definition: COM.h:699
variant & operator=(_In_ const VARIANT &varSrc)
Copy from another VARIANT.
Definition: COM.h:516
HRESULT change_type(_In_ VARTYPE _vt, _In_opt_ USHORT wFlags=0) noexcept
Converts a variant from one type to another.
Definition: COM.h:1011
variant & operator=(_In_ bool bSrc) noexcept
Copy from bool value.
Definition: COM.h:542
bool operator<=(_In_ const VARIANT &varSrc) const noexcept
Is variant less than or equal to?
Definition: COM.h:988
variant & operator=(_In_ unsigned long nSrc) noexcept
Copy from unsigned long value.
Definition: COM.h:646
variant & operator=(_In_ long long *pnSrc) noexcept
Copy from long long reference.
Definition: COM.h:854
variant & operator=(_In_z_ LPCOLESTR lpszSrc) noexcept
Copy from OLE string value.
Definition: COM.h:726
variant(_In_ const VARIANT &varSrc)
Constructs VARIANT from another.
Definition: COM.h:297
variant(_Inout_ VARIANT &&varSrc) noexcept
Moves VARIANT from another.
Definition: COM.h:309
variant(_In_ char cSrc) noexcept
Constructs VARIANT from character.
Definition: COM.h:327
variant(_In_ CY cySrc) noexcept
Constructs VARIANT from CY (64-bit integer)
Definition: COM.h:439
variant & operator=(_In_ unsigned char nSrc) noexcept
Copy from unsigned char value.
Definition: COM.h:568
variant(_In_opt_ IUnknown *pSrc)
Constructs VARIANT from IUnknown.
Definition: COM.h:479
variant & operator=(_In_ unsigned int nSrc) noexcept
Copy from unsigned int value.
Definition: COM.h:620
variant & operator=(_In_ float *pfSrc) noexcept
Copy from float reference.
Definition: COM.h:880
variant & operator=(_Inout_ VARIANT &&varSrc) noexcept
Moves from another VARIANT.
Definition: COM.h:529
variant(_In_ bool bSrc) noexcept
Constructs VARIANT from bool.
Definition: COM.h:318
variant(_In_ const SAFEARRAY *pSrc)
Constructs VARIANT from SAFEARRAY.
Definition: COM.h:491
variant & operator=(_In_ unsigned short *pnSrc) noexcept
Copy from unsigned short reference.
Definition: COM.h:789
variant & operator=(_In_ long *pnSrc) noexcept
Copy from long reference.
Definition: COM.h:828
variant & operator=(_In_ unsigned int *pnSrc) noexcept
Copy from unsigned int reference.
Definition: COM.h:815
#define WINSTD_NONCOPYABLE(C)
Declares a class as non-copyable.
Definition: Common.h:53
#define WINSTD_NONMOVABLE(C)
Declares a class as non-movable.
Definition: Common.h:61
#define WINSTD_DPLHANDLE_IMPL(C, INVAL)
Implements default constructors and operators to prevent their auto-generation by compiler.
Definition: Common.h:150
static const T * invalid
Invalid handle value.
Definition: Common.h:590
Deleter for unique_ptr using CoTaskMemFree.
Definition: COM.h:59
void operator()(_T *_Ptr) const
Delete a pointer.
Definition: COM.h:71
CoTaskMemFree_delete() noexcept
Default constructor.
Definition: COM.h:63