Classes | |
| class | TBasicUnknown |
| class | TBasicDataExchanger |
| class | TBasicRegisterer |
Defines | |
| #define | STANDARD_RELEASE |
| #define | STANDARD_RELEASE_BRANCH(X) |
| #define | QUERY_INTERFACE(X, iid, obj) |
| #define | QUERY_CLASS(X, iid, obj) |
Functions | |
| void | InitUtilities (IMCUnknown *utilities) |
| void | CleanUpUtilities () |
Variables | |
| int32 | gBasicComRefCount |
| #define QUERY_CLASS | ( | X, | |||
| iid, | |||||
| obj | ) |
if (MCIsEqualIID(iid, X::sClassId)) \ { \ TMCCountedGetHelper<X> result(obj); \ result = this; \ return MC_S_OK; \ }
| #define QUERY_INTERFACE | ( | X, | |||
| iid, | |||||
| obj | ) |
if (MCIsEqualIID(iid, IID_##X)) \ { \ TMCCountedGetHelper<X> result(obj); \ result = this; \ return MC_S_OK; \ }
| #define STANDARD_RELEASE |
virtual uint32 MCCOMAPI Release() { \ if (fControllingUnknown)\ {\ uint32 releaseResult = fControllingUnknown->Release();\ if (releaseResult == -1)\ {\ delete this;\ }\ return releaseResult;\ }\ else \ {\ fRefCount--; \ uint32 res = fRefCount; \ if (fRefCount == 0) \ { \ delete this; \ } \ else if (int32(fRefCount) < 0) \ { \ throw TMCException(-2); \ } \ return res; \ }\ }
Place this macro in your class declaration to get a standard implementation of release that handles aggregation
| #define STANDARD_RELEASE_BRANCH | ( | X | ) |
virtual uint32 MCCOMAPI Release() { \ if (X::fControllingUnknown)\ {\ uint32 releaseResult = X::fControllingUnknown->Release();\ if (releaseResult == -1)\ {\ delete this;\ }\ return releaseResult;\ }\ else \ {\ X::fRefCount--; \ uint32 res = X::fRefCount; \ if (X::fRefCount == 0) \ { \ delete this; \ } \ else if (int32(X::fRefCount) < 0) \ { \ throw TMCException(-2, 0); \ } \ return res; \ }\ }
| void CleanUpUtilities | ( | ) |
| void InitUtilities | ( | IMCUnknown * | utilities | ) |
| int32 gBasicComRefCount |
1.6.3