From fa4db6d9ef11b9725e84346f50be486b4687dd3c Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Tue, 17 Jul 2012 11:14:12 +0400 Subject: [PATCH] ole32: COM cleanup for IErrorInfo. --- dlls/ole32/errorinfo.c | 135 +++++++++++++++++++------------------------------ 1 file changed, 52 insertions(+), 83 deletions(-) diff --git a/dlls/ole32/errorinfo.c b/dlls/ole32/errorinfo.c index 39751ab6551..6a499fc3287 100644 --- a/dlls/ole32/errorinfo.c +++ b/dlls/ole32/errorinfo.c @@ -121,91 +121,56 @@ static VOID ERRORINFO_SysFreeString(BSTR in) HeapFree(GetProcessHeap(), 0, bufferPointer); } - typedef struct ErrorInfoImpl { - const IErrorInfoVtbl *lpvtei; - const ICreateErrorInfoVtbl *lpvtcei; - const ISupportErrorInfoVtbl *lpvtsei; - LONG ref; + IErrorInfo IErrorInfo_iface; + ICreateErrorInfo ICreateErrorInfo_iface; + ISupportErrorInfo ISupportErrorInfo_iface; + LONG ref; - GUID m_Guid; - BSTR bstrSource; - BSTR bstrDescription; - BSTR bstrHelpFile; - DWORD m_dwHelpContext; + GUID m_Guid; + BSTR bstrSource; + BSTR bstrDescription; + BSTR bstrHelpFile; + DWORD m_dwHelpContext; } ErrorInfoImpl; -static const IErrorInfoVtbl IErrorInfoImpl_VTable; -static const ICreateErrorInfoVtbl ICreateErrorInfoImpl_VTable; -static const ISupportErrorInfoVtbl ISupportErrorInfoImpl_VTable; - -/* - converts an object pointer to This - */ - static inline ErrorInfoImpl *impl_from_IErrorInfo( IErrorInfo *iface ) { - return (ErrorInfoImpl *)((char*)iface - FIELD_OFFSET(ErrorInfoImpl, lpvtei)); + return CONTAINING_RECORD(iface, ErrorInfoImpl, IErrorInfo_iface); } static inline ErrorInfoImpl *impl_from_ICreateErrorInfo( ICreateErrorInfo *iface ) { - return (ErrorInfoImpl *)((char*)iface - FIELD_OFFSET(ErrorInfoImpl, lpvtcei)); + return CONTAINING_RECORD(iface, ErrorInfoImpl, ICreateErrorInfo_iface); } static inline ErrorInfoImpl *impl_from_ISupportErrorInfo( ISupportErrorInfo *iface ) { - return (ErrorInfoImpl *)((char*)iface - FIELD_OFFSET(ErrorInfoImpl, lpvtsei)); + return CONTAINING_RECORD(iface, ErrorInfoImpl, ISupportErrorInfo_iface); } - -/* - converts This to an object pointer - */ -#define _IErrorInfo_(This) ((IErrorInfo*)&(This)->lpvtei) -#define _ICreateErrorInfo_(This) (&(This)->lpvtcei) -#define _ISupportErrorInfo_(This) (&(This)->lpvtsei) - -static IErrorInfo * IErrorInfoImpl_Constructor(void) -{ - ErrorInfoImpl * ei = HeapAlloc(GetProcessHeap(), 0, sizeof(ErrorInfoImpl)); - if (ei) - { - ei->lpvtei = &IErrorInfoImpl_VTable; - ei->lpvtcei = &ICreateErrorInfoImpl_VTable; - ei->lpvtsei = &ISupportErrorInfoImpl_VTable; - ei->ref = 1; - ei->bstrSource = NULL; - ei->bstrDescription = NULL; - ei->bstrHelpFile = NULL; - ei->m_dwHelpContext = 0; - } - return (IErrorInfo *)ei; -} - - static HRESULT WINAPI IErrorInfoImpl_QueryInterface( IErrorInfo* iface, REFIID riid, - VOID** ppvoid) + void** ppvoid) { ErrorInfoImpl *This = impl_from_IErrorInfo(iface); - TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(riid),ppvoid); + TRACE("(%p)->(%s,%p)\n", This, debugstr_guid(riid),ppvoid); *ppvoid = NULL; if(IsEqualIID(riid, &IID_IErrorInfo)) { - *ppvoid = _IErrorInfo_(This); + *ppvoid = &This->IErrorInfo_iface; } else if(IsEqualIID(riid, &IID_ICreateErrorInfo)) { - *ppvoid = _ICreateErrorInfo_(This); + *ppvoid = &This->ICreateErrorInfo_iface; } else if(IsEqualIID(riid, &IID_ISupportErrorInfo)) { - *ppvoid = _ISupportErrorInfo_(This); + *ppvoid = &This->ISupportErrorInfo_iface; } if(*ppvoid) @@ -311,12 +276,11 @@ static HRESULT WINAPI IErrorInfoImpl_GetHelpContext( return S_OK; } -static const IErrorInfoVtbl IErrorInfoImpl_VTable = +static const IErrorInfoVtbl ErrorInfoVtbl = { IErrorInfoImpl_QueryInterface, IErrorInfoImpl_AddRef, IErrorInfoImpl_Release, - IErrorInfoImpl_GetGUID, IErrorInfoImpl_GetSource, IErrorInfoImpl_GetDescription, @@ -330,25 +294,22 @@ static HRESULT WINAPI ICreateErrorInfoImpl_QueryInterface( REFIID riid, VOID** ppvoid) { - ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface); - TRACE("(%p)\n", This); - return IErrorInfo_QueryInterface(_IErrorInfo_(This), riid, ppvoid); + ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface); + return IErrorInfo_QueryInterface(&This->IErrorInfo_iface, riid, ppvoid); } static ULONG WINAPI ICreateErrorInfoImpl_AddRef( ICreateErrorInfo* iface) { - ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface); - TRACE("(%p)\n", This); - return IErrorInfo_AddRef(_IErrorInfo_(This)); + ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface); + return IErrorInfo_AddRef(&This->IErrorInfo_iface); } static ULONG WINAPI ICreateErrorInfoImpl_Release( ICreateErrorInfo* iface) { - ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface); - TRACE("(%p)\n", This); - return IErrorInfo_Release(_IErrorInfo_(This)); + ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface); + return IErrorInfo_Release(&This->IErrorInfo_iface); } @@ -410,12 +371,11 @@ static HRESULT WINAPI ICreateErrorInfoImpl_SetHelpContext( return S_OK; } -static const ICreateErrorInfoVtbl ICreateErrorInfoImpl_VTable = +static const ICreateErrorInfoVtbl CreateErrorInfoVtbl = { ICreateErrorInfoImpl_QueryInterface, ICreateErrorInfoImpl_AddRef, ICreateErrorInfoImpl_Release, - ICreateErrorInfoImpl_SetGUID, ICreateErrorInfoImpl_SetSource, ICreateErrorInfoImpl_SetDescription, @@ -428,29 +388,22 @@ static HRESULT WINAPI ISupportErrorInfoImpl_QueryInterface( REFIID riid, VOID** ppvoid) { - ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface); - TRACE("(%p)\n", This); - - return IErrorInfo_QueryInterface(_IErrorInfo_(This), riid, ppvoid); + ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface); + return IErrorInfo_QueryInterface(&This->IErrorInfo_iface, riid, ppvoid); } -static ULONG WINAPI ISupportErrorInfoImpl_AddRef( - ISupportErrorInfo* iface) +static ULONG WINAPI ISupportErrorInfoImpl_AddRef(ISupportErrorInfo* iface) { - ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface); - TRACE("(%p)\n", This); - return IErrorInfo_AddRef(_IErrorInfo_(This)); + ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface); + return IErrorInfo_AddRef(&This->IErrorInfo_iface); } -static ULONG WINAPI ISupportErrorInfoImpl_Release( - ISupportErrorInfo* iface) +static ULONG WINAPI ISupportErrorInfoImpl_Release(ISupportErrorInfo* iface) { - ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface); - TRACE("(%p)\n", This); - return IErrorInfo_Release(_IErrorInfo_(This)); + ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface); + return IErrorInfo_Release(&This->IErrorInfo_iface); } - static HRESULT WINAPI ISupportErrorInfoImpl_InterfaceSupportsErrorInfo( ISupportErrorInfo* iface, REFIID riid) @@ -460,16 +413,32 @@ static HRESULT WINAPI ISupportErrorInfoImpl_InterfaceSupportsErrorInfo( return (IsEqualIID(riid, &This->m_Guid)) ? S_OK : S_FALSE; } -static const ISupportErrorInfoVtbl ISupportErrorInfoImpl_VTable = +static const ISupportErrorInfoVtbl SupportErrorInfoVtbl = { ISupportErrorInfoImpl_QueryInterface, ISupportErrorInfoImpl_AddRef, ISupportErrorInfoImpl_Release, - - ISupportErrorInfoImpl_InterfaceSupportsErrorInfo }; +static IErrorInfo* IErrorInfoImpl_Constructor(void) +{ + ErrorInfoImpl *This = HeapAlloc(GetProcessHeap(), 0, sizeof(ErrorInfoImpl)); + + if (!This) return NULL; + + This->IErrorInfo_iface.lpVtbl = &ErrorInfoVtbl; + This->ICreateErrorInfo_iface.lpVtbl = &CreateErrorInfoVtbl; + This->ISupportErrorInfo_iface.lpVtbl = &SupportErrorInfoVtbl; + This->ref = 1; + This->bstrSource = NULL; + This->bstrDescription = NULL; + This->bstrHelpFile = NULL; + This->m_dwHelpContext = 0; + + return &This->IErrorInfo_iface; +} + /*********************************************************************** * CreateErrorInfo (OLE32.@) * -- 2.11.4.GIT