WinStd
Windows Win32 API using Standard C++
Loading...
Searching...
No Matches
winstd::com_obj< T > Class Template Reference

COM object wrapper template. More...

#include <WinStd/COM.h>

Inheritance diagram for winstd::com_obj< T >:
winstd::dplhandle< T *, NULL > winstd::handle< T, INVAL >

Public Member Functions

 com_obj (REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext)
 Creates a new instance of a class.
 
template<class _Other >
 com_obj (_Other *other)
 Queries the object for another interface and creates new class with it.
 
template<class _Other >
 com_obj (com_obj< _Other > &other)
 Queries the object for another interface and creates new class with it.
 
virtual ~com_obj ()
 Releases object.
 
template<class _Other >
HRESULT query_interface (_Other **h) const
 Queries the object for another interface.
 
template<class _Other >
HRESULT query_interface (com_obj< _Other > &h) const
 Queries the object for another interface.
 
- Public Member Functions inherited from winstd::dplhandle< T *, NULL >
 dplhandle () noexcept
 Initializes a new class instance with the object handle set to INVAL.
 
 dplhandle (handle_type h) noexcept
 Initializes a new class instance with an already available object handle.
 
 dplhandle (const dplhandle< handle_type, INVAL > &h)
 Copy constructor.
 
 dplhandle (dplhandle< handle_type, INVAL > &&h) noexcept
 Move constructor.
 
dplhandle< handle_type, INVAL > & operator= (handle_type h) noexcept
 Attaches already available object handle.
 
dplhandle< handle_type, INVAL > & operator= (const dplhandle< handle_type, INVAL > &h) noexcept
 Duplicates the object.
 
dplhandle< handle_type, INVAL > & operator= (dplhandle< handle_type, INVAL > &&h) noexcept
 Moves the object.
 
handle_type duplicate () const
 Duplicates and returns a new object handle.
 
void attach_duplicated (handle_type h)
 Duplicates an object handle and sets a new object handle.
 
- Public Member Functions inherited from winstd::handle< T, INVAL >
 handle () noexcept
 Initializes a new class instance with the object handle set to INVAL.
 
 handle (handle_type h) noexcept
 Initializes a new class instance with an already available object handle.
 
 handle (handle< handle_type, INVAL > &&h) noexcept
 Move constructor.
 
handle< handle_type, INVAL > & operator= (handle_type h) noexcept
 Attaches already available object handle.
 
handle< handle_type, INVAL > & operator= (handle< handle_type, INVAL > &&h) noexcept
 Move assignment.
 
 operator handle_type () const
 Auto-typecasting operator.
 
handle_type *& operator* () const
 Returns the object handle value when the object handle is a pointer to a value (class, struct, etc.).
 
handle_typeoperator& ()
 Returns the object handle reference.
 
handle_type operator-> () const
 Provides object handle member access when the object handle is a pointer to a class or struct.
 
bool operator! () const
 Tests if the object handle is invalid.
 
bool operator< (handle_type h) const
 Is handle less than?
 
bool operator<= (handle_type h) const
 Is handle less than or equal to?
 
bool operator>= (handle_type h) const
 Is handle greater than or equal to?
 
bool operator> (handle_type h) const
 Is handle greater than?
 
bool operator!= (handle_type h) const
 Is handle not equal to?
 
bool operator== (handle_type h) const
 Is handle equal to?
 
void attach (handle_type h) noexcept
 Sets a new object handle for the class.
 
handle_type detach ()
 Dismisses the object handle from this class.
 
void free ()
 Destroys the object.
 

Protected Member Functions

void free_internal () noexcept override
 Releases the object by decrementing reference counter.
 
T * duplicate_internal (T *h) const override
 Duplicates the object by incrementing the reference counter.
 
- Protected Member Functions inherited from winstd::dplhandle< T *, NULL >
virtual handle_type duplicate_internal (handle_type h) const=0
 Abstract member function that must be implemented by child classes to do the actual object handle duplication. On failure, it should throw appropriate exception describing the cause, rather than return an invalid handle.
 
- Protected Member Functions inherited from winstd::handle< T, INVAL >

Additional Inherited Members

- Public Types inherited from winstd::handle< T, INVAL >
typedef T handle_type
 Datatype of the object handle this template class handles.
 
- Static Public Attributes inherited from winstd::handle< T, INVAL >
static const T invalid = INVAL
 Invalid handle value.
 
- Protected Attributes inherited from winstd::handle< T, INVAL >
handle_type m_h
 Object handle.
 

Detailed Description

template<class T>
class winstd::com_obj< T >

COM object wrapper template.

See also
CoCreateInstance function

Constructor & Destructor Documentation

◆ com_obj() [1/3]

template<class T >
winstd::com_obj< T >::com_obj ( REFCLSID rclsid,
LPUNKNOWN pUnkOuter,
DWORD dwClsContext )
inline

Creates a new instance of a class.

See also
CoCreateInstance function

◆ com_obj() [2/3]

template<class T >
template<class _Other >
winstd::com_obj< T >::com_obj ( _Other * other)
inline

Queries the object for another interface and creates new class with it.

See also
IUnknown::QueryInterface method

◆ com_obj() [3/3]

template<class T >
template<class _Other >
winstd::com_obj< T >::com_obj ( com_obj< _Other > & other)
inline

Queries the object for another interface and creates new class with it.

See also
IUnknown::QueryInterface method

Member Function Documentation

◆ duplicate_internal()

template<class T >
T * winstd::com_obj< T >::duplicate_internal ( T * h) const
inlineoverrideprotected

Duplicates the object by incrementing the reference counter.

See also
IUnknown::AddRef method
Parameters
[in]hObject handle of existing object
Returns
Duplicated object handle

◆ free_internal()

template<class T >
void winstd::com_obj< T >::free_internal ( )
inlineoverrideprotectedvirtualnoexcept

Releases the object by decrementing reference counter.

See also
IUnknown::Release method

Implements winstd::handle< T, INVAL >.

◆ query_interface() [1/2]

template<class T >
template<class _Other >
HRESULT winstd::com_obj< T >::query_interface ( _Other ** h) const
inline

Queries the object for another interface.

See also
IUnknown::QueryInterface method

◆ query_interface() [2/2]

template<class T >
template<class _Other >
HRESULT winstd::com_obj< T >::query_interface ( com_obj< _Other > & h) const
inline

Queries the object for another interface.

See also
IUnknown::QueryInterface method

The documentation for this class was generated from the following file: