Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// 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; }
|