windows-nt/Source/XPSP1/NT/multimedia/directx/dmusic/dmscript/unkhelp.cpp

55 lines
855 B
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
// Copyright (c) 1999 Microsoft Corporation. All rights reserved.
//
// Helper classes for implementing IUnknown.
//
#include "stdinc.h"
#include "unkhelp.h"
#include "dll.h"
ComRefCount::ComRefCount()
: m_cRef(1)
{
LockModule(true);
}
STDMETHODIMP_(ULONG)
ComRefCount::AddRef()
{
return InterlockedIncrement(&m_cRef);
}
STDMETHODIMP_(ULONG)
ComRefCount::Release()
{
if (!InterlockedDecrement(&m_cRef))
{
delete this;
LockModule(false);
return 0;
}
return m_cRef;
}
STDMETHODIMP
ComSingleInterface::QueryInterface(const IID &iid, void **ppv, const IID&iidExpected, void *pvInterface)
{
V_INAME(ComSingleInterface::QueryInterface);
V_PTRPTR_WRITE(ppv);
V_REFGUID(iid);
if (iid == IID_IUnknown || iid == iidExpected)
{
*ppv = pvInterface;
}
else
{
*ppv = NULL;
return E_NOINTERFACE;
}
this->AddRef();
return S_OK;
}