/*************************************************************************** Copyright (c) Microsoft Corporation, All rights reserved. This code sample is provided "AS IS" without warranty of any kind, it is not recommended for use in a production environment. ***************************************************************************/ #ifndef common_h #define common_h #define WINERROR HRESULT_FROM_WIN32 /*--------------------------------------------------------- Debugging -----------------------------------------------------------*/ void Trace( const char* format, ... ); void TraceInit( const char* moduleName, CStr regPath ); void TraceDone(); void TraceCreate( const char* name, IUnknown* obj, bool hide ); void TraceDestroy( IUnknown* obj ); void TraceLiveObjects( const char* msg ); #ifdef NDEBUG # define ASSERT(x) # define TRACE(s) # define TRACE1(s,x) # define TRACE2(s,x,y) # define TRACE3(s,x,y,z) # define TRACE_INIT(name,regPath) # define TRACE_DONE() # define TRACE_LIVE_OBJECTS(msg) # define TRACE_CREATE(name,obj) # define TRACE_DESTROY(obj) # define TRACE_CREATE_HIDE(name,obj) #else # define ASSERT(x) assert(x) # define TRACE(s) Trace(s) # define TRACE1(s,x) Trace(s,x) # define TRACE2(s,x,y) Trace(s,x,y) # define TRACE3(s,x,y,z) Trace(s,x,y,z) # define TRACE_INIT(name,regPath) TraceInit(name,regPath) # define TRACE_DONE() TraceDone() # define TRACE_LIVE_OBJECTS(msg) TraceLiveObjects(msg) # define TRACE_CREATE(name,obj) TraceCreate(name,obj,false) # define TRACE_DESTROY(obj) TraceDestroy(obj) # define TRACE_CREATE_HIDE(name,obj) TraceCreate(name,obj,true) #endif /*--------------------------------------------------------- IDL -----------------------------------------------------------*/ #define in #define out #define inout /*--------------------------------------------------------- Argument checking -----------------------------------------------------------*/ #define OUTARG(p) ASSERT(p); if (!(p)) return E_INVALIDARG; else *(p) = 0; #define OUTVAR(v) ASSERT(v); if (!(v)) return E_INVALIDARG; else VariantInit(v); #define INARG(p) ASSERT(p); if (!(p)) return E_INVALIDARG; #define INOUTARG(p) ASSERT(p); if (!(p)) return E_INVALIDARG; #define REFARG(p) ASSERT(p); if (!(p)) return E_INVALIDARG; /*--------------------------------------------------------- Memory management -----------------------------------------------------------*/ #ifdef DELETE #undef DELETE #endif #define ALLOC(tp) (tp*)VSAlloc(sizeof(tp)) #define NALLOC(tp,n) (tp*)VSAlloc(sizeof(tp)*(n)) #define FREE(p) if (p) { VSFree ((void*)(p)); (p) = NULL; } #define DELETE(p) if (p) { delete (p); (p) = NULL; } #define RELEASE(p) if (p) { (p)->Release(); (p) = NULL; } #define REMOVE(p) if (p) { while ((p)->Release() != 0) ; (p) = NULL; } #define ADDREF(p) ASSERT(p); if (p) { (p)->AddRef(); } /*--------------------------------------------------------- Reference counting -----------------------------------------------------------*/ ULONG IncRefCount( inout ULONG* refCount ); ULONG DecRefCount( inout ULONG* refCount ); /*--------------------------------------------------------- COM -----------------------------------------------------------*/ bool SameObject ( in IUnknown* obj1, in IUnknown* obj2 ); STDMETHODIMP Connect ( in IUnknown* eventSource, in IUnknown* eventSink, in const IID& eventIID, out DWORD* cookie ); STDMETHODIMP DisConnect ( in IUnknown* eventSource, in const IID& eventIID, inout DWORD* cookie ); #endif