mirror of https://github.com/tongzx/nt5src
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.
52 lines
1.0 KiB
52 lines
1.0 KiB
// File: refcount.h
|
|
|
|
#ifndef _REFCOUNT_H_
|
|
#define _REFCOUNT_H_
|
|
|
|
// RefCount destructor callback function
|
|
typedef void (*OBJECTDESTROYEDPROC)(void);
|
|
VOID STDMETHODCALLTYPE DLLObjectDestroyed(void);
|
|
VOID DllLock(void);
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
class RefCount
|
|
{
|
|
private:
|
|
ULONG m_ulcRef;
|
|
OBJECTDESTROYEDPROC m_ObjectDestroyed;
|
|
|
|
#ifdef DEBUG
|
|
BOOL m_fTrack;
|
|
#endif
|
|
|
|
void Init(OBJECTDESTROYEDPROC ObjectDestroyed);
|
|
|
|
public:
|
|
RefCount();
|
|
RefCount(OBJECTDESTROYEDPROC ObjectDestroyed);
|
|
// Virtual destructor defers to destructor of derived class.
|
|
virtual ~RefCount(void);
|
|
|
|
// IUnknown
|
|
ULONG STDMETHODCALLTYPE AddRef(void);
|
|
ULONG STDMETHODCALLTYPE Release(void);
|
|
|
|
#ifdef DEBUG
|
|
VOID SetTrack(BOOL fTrack) {m_fTrack = fTrack;}
|
|
#endif
|
|
};
|
|
DECLARE_STANDARD_TYPES(RefCount);
|
|
|
|
|
|
// Special version of the above that calls our standard Dll locking functions
|
|
class DllRefCount : public RefCount
|
|
{
|
|
public:
|
|
DllRefCount() : RefCount(&DLLObjectDestroyed) {DllLock();}
|
|
~DllRefCount(void) {};
|
|
};
|
|
|
|
#endif /* _REFCOUNT_H_ */
|