AAFRESULT STDMETHODCALLTYPE ImplAAFOperationDef::GetParameterDefs ( ImplEnumAAFParameterDefs **ppEnum) { ImplEnumAAFParameterDefs *theEnum; if(ppEnum == NULL) return(AAFRESULT_NULL_PARAM); *ppEnum = NULL; theEnum = (ImplEnumAAFParameterDefs *)CreateImpl(CLSID_EnumAAFParameterDefs); if(theEnum == NULL) return(AAFRESULT_NOMEMORY); XPROTECT() { OMWeakReferenceSetIterator<OMUniqueObjectIdentification, ImplAAFParameterDef>* iter = new OMWeakReferenceSetIterator<OMUniqueObjectIdentification, ImplAAFParameterDef>(_paramDefined); if(iter == 0) RAISE(AAFRESULT_NOMEMORY); CHECK(theEnum->Initialize(&CLSID_EnumAAFParameterDefs, this, iter)); *ppEnum = theEnum; } XEXCEPT { if (theEnum) { theEnum->ReleaseReference(); theEnum = 0; } } XEND; return(AAFRESULT_SUCCESS); }
HRESULT STDMETHODCALLTYPE CAAFOperationDef::GetParameterDefs (IEnumAAFParameterDefs ** ppEnum) { HRESULT hr; ImplAAFOperationDef * ptr; ImplAAFRoot * pO; pO = GetRepObject (); assert (pO); ptr = static_cast<ImplAAFOperationDef*> (pO); assert (ptr); // // set up for ppEnum // ImplEnumAAFParameterDefs * internalppEnum = NULL; ImplEnumAAFParameterDefs ** pinternalppEnum = NULL; if (ppEnum) { pinternalppEnum = &internalppEnum; } try { hr = ptr->GetParameterDefs (pinternalppEnum); } catch (OMException& e) { // OMExceptions should be handled by the impl code. However, if an // unhandled OMException occurs, control reaches here. We must not // allow the unhandled exception to reach the client code, so we // turn it into a failure status code. // // If the OMException contains an HRESULT, it is returned to the // client, if not, AAFRESULT_UHANDLED_EXCEPTION is returned. // hr = OMExceptionToResult(e, AAFRESULT_UNHANDLED_EXCEPTION); } catch (OMAssertionViolation &) { // Control reaches here if there is a programming error in the // impl code that was detected by an assertion violation. // We must not allow the assertion to reach the client code so // here we turn it into a failure status code. // hr = AAFRESULT_ASSERTION_VIOLATION; } catch (...) { // We CANNOT throw an exception out of a COM interface method! // Return a reasonable exception code. // hr = AAFRESULT_UNEXPECTED_EXCEPTION; } // // cleanup for ppEnum // if (SUCCEEDED(hr)) { IUnknown *pUnknown; HRESULT hStat; if (internalppEnum) { pUnknown = static_cast<IUnknown *> (internalppEnum->GetContainer()); hStat = pUnknown->QueryInterface(IID_IEnumAAFParameterDefs, (void **)ppEnum); assert (SUCCEEDED (hStat)); //pUnknown->Release(); internalppEnum->ReleaseReference(); // We are through with this pointer. } } return hr; }