diff options
| author | karlf <[email protected]> | 2016-08-11 13:28:13 -0700 |
|---|---|---|
| committer | karlf <[email protected]> | 2016-08-11 13:28:13 -0700 |
| commit | 96eb96dfb613e4c745db6bd1f53a92fe7e2290fc (patch) | |
| tree | ad5f3ede5cbcd6b598677ce41bcf8318471bdd92 /network/wlan/ihvsampleui/iunk.h | |
| parent | 687b274aa38fd05c8c26e3068932121876d7f745 (diff) | |
Updated for "Windows 10 Anniversary Update" (Version 1607)
Diffstat (limited to 'network/wlan/ihvsampleui/iunk.h')
| -rw-r--r-- | network/wlan/ihvsampleui/iunk.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/network/wlan/ihvsampleui/iunk.h b/network/wlan/ihvsampleui/iunk.h new file mode 100644 index 00000000..9b8242c5 --- /dev/null +++ b/network/wlan/ihvsampleui/iunk.h @@ -0,0 +1,54 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +// Common macro based implementation of IUnknown +// using a interface table approach + +#define IMPLEMENT_REFCOUNT()\ + ULONG m_crefCount;\ + \ + STDMETHODIMP_(ULONG) AddRef(void)\ + {\ + return InterlockedIncrement((PLONG)&m_crefCount);\ + }\ + \ + _At_(this, __drv_aliasesMem)\ + STDMETHODIMP_(ULONG) Release(void)\ + {\ + ULONG res = InterlockedDecrement((PLONG)&m_crefCount);\ + if (res == 0)\ + {\ + delete this;\ + }\ + return res;\ + } + +#define BEGIN_INTERFACE_TABLE()\ + IMPLEMENT_REFCOUNT()\ + STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject)\ + {\ + if (riid == IID_IUnknown)\ + {\ + *ppvObject = reinterpret_cast<IUnknown*>(this);\ + } + +#define IMPLEMENTS_INTERFACE(Itf)\ + else if (riid == IID_ ## Itf)\ + {\ + *ppvObject = static_cast<Itf*>(this);\ + } + +#define END_INTERFACE_TABLE()\ + else \ + {\ + *ppvObject = NULL;\ + return E_NOINTERFACE;\ + }\ + \ + reinterpret_cast<IUnknown *>(*ppvObject)->AddRef();\ + \ + return S_OK;\ + } + |
