static HRESULT WINAPI IErrorInfoImpl_QueryInterface( IErrorInfo* iface, REFIID riid, void** ppvoid) { ErrorInfoImpl *This = impl_from_IErrorInfo(iface); TRACE("(%p)->(%s,%p)\n", This, debugstr_guid(riid),ppvoid); *ppvoid = NULL; if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IErrorInfo)) { *ppvoid = &This->IErrorInfo_iface; } else if(IsEqualIID(riid, &IID_ICreateErrorInfo)) { *ppvoid = &This->ICreateErrorInfo_iface; } else if(IsEqualIID(riid, &IID_ISupportErrorInfo)) { *ppvoid = &This->ISupportErrorInfo_iface; } if(*ppvoid) { IUnknown_AddRef( (IUnknown*)*ppvoid ); TRACE("-- Interface: (%p)->(%p)\n",ppvoid,*ppvoid); return S_OK; } TRACE("-- Interface: E_NOINTERFACE\n"); return E_NOINTERFACE; }
static ULONG WINAPI IErrorInfoImpl_AddRef( IErrorInfo* iface) { ErrorInfoImpl *This = impl_from_IErrorInfo(iface); TRACE("(%p)->(count=%u)\n",This,This->ref); return InterlockedIncrement(&This->ref); }
static ULONG WINAPI errorrecords_Release(IErrorInfo* iface) { errorrecords *This = impl_from_IErrorInfo(iface); ULONG ref = InterlockedDecrement(&This->ref); TRACE("(%p)->%u\n",This,ref+1); if (!ref) { unsigned int i; for (i = 0; i < This->count; i++) { DISPPARAMS *dispparams = &This->records[i].dispparams; unsigned int j; if (This->records[i].custom_error) IUnknown_Release(This->records[i].custom_error); for (j = 0; j < dispparams->cArgs && dispparams->rgvarg; j++) VariantClear(&dispparams->rgvarg[i]); CoTaskMemFree(dispparams->rgvarg); CoTaskMemFree(dispparams->rgdispidNamedArgs); } heap_free(This->records); heap_free(This); } return ref; }
static HRESULT WINAPI IErrorInfoImpl_QueryInterface(IErrorInfo* iface, REFIID riid, void **ppvoid) { ErrorInfoImpl *This = impl_from_IErrorInfo(iface); TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid),ppvoid); *ppvoid = NULL; if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IErrorInfo)) { *ppvoid = &This->IErrorInfo_iface; } else if (IsEqualIID(riid, &IID_IErrorRecords)) { *ppvoid = &This->IErrorRecords_iface; } if(*ppvoid) { IUnknown_AddRef( (IUnknown*)*ppvoid ); return S_OK; } FIXME("interface %s not implemented\n", debugstr_guid(riid)); return E_NOINTERFACE; }
static HRESULT WINAPI IErrorInfoImpl_GetGUID( IErrorInfo* iface, GUID * pGUID) { ErrorInfoImpl *This = impl_from_IErrorInfo(iface); TRACE("(%p)->(count=%u)\n",This,This->ref); if(!pGUID )return E_INVALIDARG; *pGUID = This->m_Guid; return S_OK; }
static HRESULT WINAPI IErrorInfoImpl_GetSource( IErrorInfo* iface, BSTR *pBstrSource) { ErrorInfoImpl *This = impl_from_IErrorInfo(iface); TRACE("(%p)->(pBstrSource=%p)\n",This,pBstrSource); if (pBstrSource == NULL) return E_INVALIDARG; *pBstrSource = SysAllocString(This->source); return S_OK; }
static HRESULT WINAPI IErrorInfoImpl_GetHelpContext( IErrorInfo* iface, DWORD *pdwHelpContext) { ErrorInfoImpl *This = impl_from_IErrorInfo(iface); TRACE("(%p)->(pdwHelpContext=%p)\n",This, pdwHelpContext); if (pdwHelpContext == NULL) return E_INVALIDARG; *pdwHelpContext = This->m_dwHelpContext; return S_OK; }
static HRESULT WINAPI IErrorInfoImpl_GetDescription( IErrorInfo* iface, BSTR *pBstrDescription) { ErrorInfoImpl *This = impl_from_IErrorInfo(iface); TRACE("(%p)->(pBstrDescription=%p)\n",This,pBstrDescription); if (pBstrDescription == NULL) return E_INVALIDARG; *pBstrDescription = SysAllocString(This->description); return S_OK; }
static HRESULT WINAPI errorrecords_GetHelpContext(IErrorInfo* iface, DWORD *context) { errorrecords *This = impl_from_IErrorInfo(iface); TRACE("(%p)->(%p)\n", This, context); if (!context) return E_INVALIDARG; *context = 0; return E_FAIL; }
static HRESULT WINAPI errorrecords_GetHelpFile(IErrorInfo* iface, BSTR *helpfile) { errorrecords *This = impl_from_IErrorInfo(iface); TRACE("(%p)->(%p)\n", This, helpfile); if (!helpfile) return E_INVALIDARG; *helpfile = NULL; return E_FAIL; }
static HRESULT WINAPI errorrecords_GetDescription(IErrorInfo* iface, BSTR *description) { errorrecords *This = impl_from_IErrorInfo(iface); TRACE("(%p)->(%p)\n", This, description); if (!description) return E_INVALIDARG; *description = NULL; return E_FAIL; }
static HRESULT WINAPI errorrecords_GetSource(IErrorInfo* iface, BSTR *source) { errorrecords *This = impl_from_IErrorInfo(iface); TRACE("(%p)->(%p)\n", This, source); if (!source) return E_INVALIDARG; *source = NULL; return E_FAIL; }
static HRESULT WINAPI errorrecords_GetGUID(IErrorInfo* iface, GUID *guid) { errorrecords *This = impl_from_IErrorInfo(iface); TRACE("(%p)->(%p)\n", This, guid); if (!guid) return E_INVALIDARG; *guid = GUID_NULL; return S_OK; }
static ULONG WINAPI IErrorInfoImpl_Release( IErrorInfo* iface) { ErrorInfoImpl *This = impl_from_IErrorInfo(iface); ULONG ref = InterlockedDecrement(&This->ref); TRACE("(%p)->(count=%u)\n",This,ref+1); if (!ref) { TRACE("-- destroying IErrorInfo(%p)\n",This); heap_free(This->source); heap_free(This->description); heap_free(This->help_file); heap_free(This); } return ref; }
static ULONG WINAPI IErrorInfoImpl_Release(IErrorInfo* iface) { ErrorInfoImpl *This = impl_from_IErrorInfo(iface); ULONG ref = InterlockedDecrement(&This->ref); struct ErrorEntry *cursor, *cursor2; TRACE("(%p)->%u\n",This,ref+1); if (!ref) { SysFreeString(This->source); SysFreeString(This->description); SysFreeString(This->help_file); LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, &This->errors, struct ErrorEntry, entry) { list_remove(&cursor->entry); if(cursor->unknown) IUnknown_Release(cursor->unknown); heap_free(cursor); } heap_free(This); }
static ULONG WINAPI errorrecords_AddRef(IErrorInfo* iface) { errorrecords *This = impl_from_IErrorInfo(iface); TRACE("(%p)->%u\n",This,This->ref); return InterlockedIncrement(&This->ref); }