94 _In_opt_ LPUNKNOWN pUnkOuter,
95 _In_ DWORD dwClsContext)
107 template <
class _Other>
111 HRESULT hr = other->QueryInterface(__uuidof(T), (
void**)&
m_h);
121 template <
class _Other>
124 HRESULT hr = other->QueryInterface(__uuidof(T), (
void**)&
m_h);
143 template <
class _Other>
148 return m_h->QueryInterface(__uuidof(_Other), (
void**)h);
156 template <
class _Other>
161 HRESULT hr =
m_h->QueryInterface(__uuidof(_Other), (
void**)&_h);
207 m_h = SysAllocString(src);
209 throw std::bad_alloc();
215 bstr(_In_reads_opt_(len) LPCOLESTR src, _In_ UINT len)
217 m_h = SysAllocStringLen(src, len);
219 throw std::bad_alloc();
225 template<
class _Traits,
class _Ax>
226 bstr(_In_
const std::basic_string<OLECHAR, _Traits, _Ax> &src)
228 if (src.length() >= UINT_MAX)
229 throw std::invalid_argument(
"String too long");
230 m_h = SysAllocStringLen(src.c_str(), (UINT)src.length());
232 throw std::bad_alloc();
253 return SysStringLen(
m_h);
278 handle_type h_new = SysAllocStringLen(h, SysStringLen(h));
281 throw std::bad_alloc();
288 #pragma warning(push)
289 #pragma warning(disable: 26432)
307 const HRESULT hr = VariantCopy(
this, &varSrc);
315 #pragma warning(suppress: 26495)
318 memcpy(
this, &varSrc,
sizeof(VARIANT));
319 varSrc.vt = VT_EMPTY;
328 boolVal = bSrc ? VARIANT_TRUE : VARIANT_FALSE;
370 variant(_In_
int nSrc, _In_ VARTYPE vtSrc = VT_I4)
noexcept
372 assert(vtSrc == VT_I4 || vtSrc == VT_INT);
380 variant(_In_
unsigned int nSrc, _In_ VARTYPE vtSrc = VT_UI4)
noexcept
382 assert(vtSrc == VT_UI4 || vtSrc == VT_UINT);
390 variant(_In_
long nSrc, _In_ VARTYPE vtSrc = VT_I4)
noexcept
392 assert(vtSrc == VT_I4 || vtSrc == VT_ERROR);
418 variant(_In_
double dblSrc, _In_ VARTYPE vtSrc = VT_R8)
noexcept
420 assert(vtSrc == VT_R8 || vtSrc == VT_DATE);
437 variant(_In_
unsigned long long nSrc)
noexcept
479 if (pdispVal != NULL)
500 assert(pSrc != NULL);
503 const HRESULT hr = SafeArrayCopy(
const_cast<LPSAFEARRAY
>(pSrc), &pCopy);
507 SafeArrayGetVartype(
const_cast<LPSAFEARRAY
>(pSrc), &vt);
525 if (
this != &varSrc) {
526 const HRESULT hr = VariantCopy(
this, &varSrc);
538 if (
this != &varSrc) {
540 memcpy(
this, &varSrc,
sizeof(VARIANT));
541 varSrc.vt = VT_EMPTY;
555 boolVal = bSrc ? VARIANT_TRUE : VARIANT_FALSE;
737 bstrVal = SysAllocString(lpszSrc);
749 if (pdispVal != NULL)
772 if (vt != (VT_UI1|VT_BYREF)) {
774 vt = VT_UI1|VT_BYREF;
785 if (vt != (VT_I2|VT_BYREF)) {
798 if (vt != (VT_UI2|VT_BYREF)) {
800 vt = VT_UI2|VT_BYREF;
811 if (vt != (VT_I4|VT_BYREF)) {
824 if (vt != (VT_UI4|VT_BYREF)) {
826 vt = VT_UI4|VT_BYREF;
837 if (vt != (VT_I4|VT_BYREF)) {
850 if (vt != (VT_UI4|VT_BYREF)) {
852 vt = VT_UI4|VT_BYREF;
863 if (vt != (VT_I8|VT_BYREF)) {
876 if (vt != (VT_UI8|VT_BYREF)) {
878 vt = VT_UI8|VT_BYREF;
889 if (vt != (VT_R4|VT_BYREF)) {
902 if (vt != (VT_R8|VT_BYREF)) {
915 assert(pSrc != NULL);
919 const HRESULT hr = SafeArrayCopy(
const_cast<LPSAFEARRAY
>(pSrc), &pCopy);
921 SafeArrayGetVartype(
const_cast<LPSAFEARRAY
>(pSrc), &vt);
940 if (vt == VT_NULL && varSrc.vt == VT_NULL)
return true;
941 if (vt != varSrc.vt)
return false;
942 return compare(
static_cast<const VARIANT&
>(*
this), varSrc, LOCALE_USER_DEFAULT, 0) ==
static_cast<HRESULT
>(VARCMP_EQ);
966 bool operator<(_In_
const VARIANT& varSrc)
const noexcept
968 if (vt == VT_NULL && varSrc.vt == VT_NULL)
return false;
969 return compare(
static_cast<const VARIANT&
>(*
this), varSrc, LOCALE_USER_DEFAULT, 0)==
static_cast<HRESULT
>(VARCMP_LT);
980 bool operator>(_In_
const VARIANT& varSrc)
const noexcept
982 if (vt == VT_NULL && varSrc.vt == VT_NULL)
return false;
983 return compare(
static_cast<const VARIANT&
>(*
this), varSrc, LOCALE_USER_DEFAULT, 0)==
static_cast<HRESULT
>(VARCMP_GT);
1017 HRESULT
change_type(_In_ VARTYPE _vt, _In_opt_ USHORT wFlags = 0) noexcept
1019 return VariantChangeType(
this,
this, wFlags, _vt);
1024 HRESULT compare(_In_
const VARIANT &varLeft, _In_
const VARIANT &varRight, _In_ LCID lcid, _In_ ULONG dwFlags)
const noexcept
1027 case VT_I1:
return varLeft.cVal == varRight.cVal ? VARCMP_EQ : varLeft.cVal > varRight.cVal ? VARCMP_GT : VARCMP_LT;
1028 case VT_UI2:
return varLeft.uiVal == varRight.uiVal ? VARCMP_EQ : varLeft.uiVal > varRight.uiVal ? VARCMP_GT : VARCMP_LT;
1029 case VT_UI4:
return varLeft.uintVal == varRight.uintVal ? VARCMP_EQ : varLeft.uintVal > varRight.uintVal ? VARCMP_GT : VARCMP_LT;
1030 case VT_UI8:
return varLeft.ullVal == varRight.ullVal ? VARCMP_EQ : varLeft.ullVal > varRight.ullVal ? VARCMP_GT : VARCMP_LT;
1031 default:
return VarCmp(
const_cast<LPVARIANT
>(&varLeft),
const_cast<LPVARIANT
>(&varRight), lcid, dwFlags);
1036 #pragma warning(pop)
1065 SafeArrayDestroy(
m_h);
1080 HRESULT hr = SafeArrayCopy(h, &h_new);
1104 HRESULT hr = SafeArrayAccessData(psa, (
void HUGEP**)&
m_data);
1116 SafeArrayUnaccessData(
m_sa);
1148 m_result = CoInitialize(pvReserved);
1158 m_result = CoInitializeEx(pvReserved, dwCoInit);
1201 HRESULT hr =
CoCreateInstance(rclsid, pUnkOuter, dwClsContext, __uuidof(T), (LPVOID*)&ppv);
1216 HRESULT hr =
CoGetObject(pszName, pBindOptions, riid, (LPVOID*)&ppv);
BSTR string wrapper.
Definition COM.h:198
bstr(LPCOLESTR src)
Constructs BSTR from OLE string.
Definition COM.h:205
handle_type duplicate_internal(handle_type h) const override
Duplicates the string.
Definition COM.h:276
virtual ~bstr()
Destroys the string.
Definition COM.h:240
void free_internal() noexcept override
Destroys the string.
Definition COM.h:262
UINT length() const noexcept
Returns the length of the string.
Definition COM.h:251
bstr(LPCOLESTR src, UINT len)
Constructs BSTR from OLE string with length.
Definition COM.h:215
bstr(const std::basic_string< OLECHAR, _Traits, _Ax > &src)
Constructs BSTR from std::basic_string.
Definition COM.h:226
Context scope automatic COM (un)initialization.
Definition COM.h:1136
com_initializer(LPVOID pvReserved, DWORD dwCoInit) noexcept
Initializes the COM library for use by the calling thread, sets the thread's concurrency model,...
Definition COM.h:1156
com_initializer(LPVOID pvReserved) noexcept
Initializes the COM library on the current thread and identifies the concurrency model as single-thre...
Definition COM.h:1146
HRESULT status() const noexcept
Return result of CoInitialize() call.
Definition COM.h:1177
virtual ~com_initializer()
Uninitializes COM.
Definition COM.h:1166
HRESULT m_result
Result of CoInitialize call.
Definition COM.h:1183
COM object wrapper template.
Definition COM.h:83
void free_internal() noexcept override
Releases the object by decrementing reference counter.
Definition COM.h:173
com_obj(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext)
Creates a new instance of a class.
Definition COM.h:92
HRESULT query_interface(_Other **h) const
Queries the object for another interface.
Definition COM.h:144
handle_type duplicate_internal(handle_type h) const override
Duplicates the object by incrementing the reference counter.
Definition COM.h:187
HRESULT query_interface(com_obj< _Other > &h) const
Queries the object for another interface.
Definition COM.h:157
virtual ~com_obj()
Releases object.
Definition COM.h:132
com_obj(_Other *other)
Queries the object for another interface and creates new class with it.
Definition COM.h:108
com_obj(com_obj< _Other > &other)
Queries the object for another interface and creates new class with it.
Definition COM.h:122
COM runtime error.
Definition COM.h:26
com_runtime_error(error_type num, const std::string &msg)
Constructs an exception.
Definition COM.h:34
com_runtime_error(error_type num, const char *msg=nullptr)
Constructs an exception.
Definition COM.h:44
Base abstract template class to support object handle keeping for objects that support trivial handle...
Definition Common.h:1248
T handle_type
Datatype of the object handle this template class handles.
Definition Common.h:988
handle_type m_h
Object handle.
Definition Common.h:1237
Numerical runtime error.
Definition Common.h:1446
HRESULT error_type
Error number type.
Definition Common.h:1448
Context scope automatic SAFEARRAY (un)access.
Definition COM.h:1092
safearray_accessor(SAFEARRAY *psa)
Increments the lock count of an array, and retrieves a pointer to the array data.
Definition COM.h:1102
T HUGEP * data() const noexcept
Return SAFEARRAY data pointer.
Definition COM.h:1122
SAFEARRAY * m_sa
SAFEARRAY.
Definition COM.h:1128
virtual ~safearray_accessor()
Decrements the lock count of an array.
Definition COM.h:1114
T HUGEP * m_data
SAFEARRAY data.
Definition COM.h:1129
SAFEARRAY string wrapper.
Definition COM.h:1042
virtual ~safearray()
Destroys the array.
Definition COM.h:1051
handle_type duplicate_internal(handle_type h) const override
Duplicates the array.
Definition COM.h:1077
void free_internal() noexcept override
Destroys the array.
Definition COM.h:1063
VARIANT struct wrapper.
Definition COM.h:291
bool operator<=(const VARIANT &varSrc) const noexcept
Is variant less than or equal to?
Definition COM.h:994
variant(bool bSrc) noexcept
Constructs VARIANT from bool.
Definition COM.h:325
variant & operator=(unsigned int nSrc) noexcept
Copy from unsigned int value.
Definition COM.h:627
variant & operator=(unsigned long nSrc) noexcept
Copy from unsigned long value.
Definition COM.h:653
variant(float fltSrc) noexcept
Constructs VARIANT from float.
Definition COM.h:409
variant(VARIANT &&varSrc) noexcept
Moves VARIANT from another.
Definition COM.h:316
variant & operator=(float fltSrc) noexcept
Copy from float value.
Definition COM.h:693
variant & operator=(float *pfSrc) noexcept
Copy from float reference.
Definition COM.h:887
variant(IDispatch *pSrc)
Constructs VARIANT from IDispatch.
Definition COM.h:474
variant(int nSrc, VARTYPE vtSrc=VT_I4) noexcept
Constructs VARIANT from integer.
Definition COM.h:370
variant(const SAFEARRAY *pSrc)
Constructs VARIANT from SAFEARRAY.
Definition COM.h:498
variant & operator=(double *pfSrc) noexcept
Copy from double reference.
Definition COM.h:900
variant & operator=(const SAFEARRAY *pSrc)
Copy from SAFEARRAY.
Definition COM.h:913
variant & operator=(int *pnSrc) noexcept
Copy from int reference.
Definition COM.h:809
bool operator>(const VARIANT &varSrc) const noexcept
Is variant greater than?
Definition COM.h:980
variant & operator=(bool bSrc) noexcept
Copy from bool value.
Definition COM.h:549
variant & operator=(long nSrc) noexcept
Copy from long value.
Definition COM.h:640
HRESULT change_type(VARTYPE _vt, USHORT wFlags=0) noexcept
Converts a variant from one type to another.
Definition COM.h:1017
variant & operator=(IUnknown *pSrc)
Copy from IUnknown.
Definition COM.h:757
variant & operator=(short nSrc) noexcept
Copy from short value.
Definition COM.h:588
variant & operator=(unsigned char *pbSrc) noexcept
Copy from unsigned char reference.
Definition COM.h:770
variant & operator=(unsigned short nSrc) noexcept
Copy from unsigned short value.
Definition COM.h:601
variant & operator=(unsigned char nSrc) noexcept
Copy from unsigned char value.
Definition COM.h:575
variant & operator=(char cSrc) noexcept
Copy from char value.
Definition COM.h:562
variant(LPCOLESTR lpszSrc) noexcept
Constructs VARIANT from OLE string.
Definition COM.h:456
virtual ~variant()
Destroys VARIANT.
Definition COM.h:515
variant(const VARIANT &varSrc)
Constructs VARIANT from another.
Definition COM.h:304
variant(unsigned char nSrc) noexcept
Constructs VARIANT from byte.
Definition COM.h:343
variant & operator=(double dblSrc) noexcept
Copy from double value.
Definition COM.h:706
bool operator!=(const VARIANT &varSrc) const noexcept
Is variant not equal to?
Definition COM.h:953
variant & operator=(int nSrc) noexcept
Copy from int value.
Definition COM.h:614
variant(unsigned long nSrc) noexcept
Constructs VARIANT from unsigned long.
Definition COM.h:400
bool operator==(const VARIANT &varSrc) const noexcept
Is variant equal to?
Definition COM.h:938
variant(IUnknown *pSrc)
Constructs VARIANT from IUnknown.
Definition COM.h:486
variant(unsigned int nSrc, VARTYPE vtSrc=VT_UI4) noexcept
Constructs VARIANT from unsigned integer.
Definition COM.h:380
variant & operator=(CY cySrc) noexcept
Copy from CY value.
Definition COM.h:719
variant & operator=(LPCOLESTR lpszSrc) noexcept
Copy from OLE string value.
Definition COM.h:733
variant(long long nSrc) noexcept
Constructs VARIANT from 64-bit integer.
Definition COM.h:428
variant & operator=(unsigned int *pnSrc) noexcept
Copy from unsigned int reference.
Definition COM.h:822
variant(long nSrc, VARTYPE vtSrc=VT_I4) noexcept
Constructs VARIANT from long.
Definition COM.h:390
variant & operator=(long *pnSrc) noexcept
Copy from long reference.
Definition COM.h:835
variant(unsigned short nSrc) noexcept
Constructs VARIANT from unsigned short.
Definition COM.h:361
bool operator>=(const VARIANT &varSrc) const noexcept
Is variant greater than or equal to?
Definition COM.h:1007
variant & operator=(short *pnSrc) noexcept
Copy from short reference.
Definition COM.h:783
variant() noexcept
Constructs blank VARIANT.
Definition COM.h:296
bool operator<(const VARIANT &varSrc) const noexcept
Is variant less than?
Definition COM.h:966
variant(unsigned long long nSrc) noexcept
Constructs VARIANT from unsigned integer.
Definition COM.h:437
variant(char cSrc) noexcept
Constructs VARIANT from character.
Definition COM.h:334
variant & operator=(unsigned short *pnSrc) noexcept
Copy from unsigned short reference.
Definition COM.h:796
variant & operator=(long long *pnSrc) noexcept
Copy from long long reference.
Definition COM.h:861
variant(BSTR bstr) noexcept
Constructs VARIANT from BSTR.
Definition COM.h:465
variant & operator=(unsigned long long *pnSrc) noexcept
Copy from unsigned long long reference.
Definition COM.h:874
variant(double dblSrc, VARTYPE vtSrc=VT_R8) noexcept
Constructs VARIANT from double or variant date.
Definition COM.h:418
variant(short nSrc) noexcept
Constructs VARIANT from short.
Definition COM.h:352
variant(CY cySrc) noexcept
Constructs VARIANT from CY (64-bit integer)
Definition COM.h:446
variant & operator=(unsigned long long nSrc) noexcept
Copy from unsigned long long value.
Definition COM.h:679
variant & operator=(VARIANT &&varSrc) noexcept
Moves from another VARIANT.
Definition COM.h:536
variant & operator=(long long nSrc) noexcept
Copy from long long value.
Definition COM.h:666
variant & operator=(IDispatch *pSrc)
Copy from IDispatch.
Definition COM.h:744
variant & operator=(unsigned long *pnSrc) noexcept
Copy from unsigned long reference.
Definition COM.h:848
variant & operator=(const VARIANT &varSrc)
Copy from another VARIANT.
Definition COM.h:523
static _Check_return_ HRESULT CoGetObject(LPCWSTR pszName, BIND_OPTS *pBindOptions, REFIID riid, winstd::com_obj< T > &v)
Converts a display name into a moniker that identifies the object named, and then binds to the object...
Definition COM.h:1213
static _Check_return_ HRESULT CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, winstd::com_obj< T > &v)
Creates and default-initializes a single object of the class associated with a specified CLSID.
Definition COM.h:1198
#define WINSTD_NONCOPYABLE(C)
Declares a class as non-copyable.
Definition Common.h:66
#define WINSTD_NONMOVABLE(C)
Declares a class as non-movable.
Definition Common.h:74
#define WINSTD_DPLHANDLE_IMPL(C, INVAL)
Implements default constructors and operators to prevent their auto-generation by compiler.
Definition Common.h:175
static const T invalid
Invalid handle value.
Definition Common.h:993
Deleter for unique_ptr using CoTaskMemFree.
Definition COM.h:58
void operator()(_T *_Ptr) const
Delete a pointer.
Definition COM.h:70
CoTaskMemFree_delete() noexcept
Default constructor.
Definition COM.h:62