[PATCH 2/3] oleaut32: COM cleanup for ITypeInfo object

Andrew Eikum aeikum at codeweavers.com
Thu May 9 09:27:22 CDT 2013


Looks like I missed replacing the ITypeInfo casts with impl_from
calls, e.g.:
  static HRESULT WINAPI ITypeInfo_fnGetTypeComp( ITypeInfo2 *iface,
          ITypeComp  * *ppTComp)
  {
      ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
You can apply these, or wait until I amend them to fix that, too.
Whichever.

Andrew

On Wed, May 08, 2013 at 03:12:45PM -0500, Andrew Eikum wrote:
> ---
>  dlls/oleaut32/typelib.c | 30 +++++++++++++++---------------
>  1 file changed, 15 insertions(+), 15 deletions(-)
> 
> diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
> index e62fa84..c6d2189 100644
> --- a/dlls/oleaut32/typelib.c
> +++ b/dlls/oleaut32/typelib.c
> @@ -1094,8 +1094,8 @@ typedef struct tagTLBImplType
>  /* internal TypeInfo data */
>  typedef struct tagITypeInfoImpl
>  {
> -    const ITypeInfo2Vtbl *lpVtbl;
> -    const ITypeCompVtbl  *lpVtblTypeComp;
> +    ITypeInfo2 ITypeInfo2_iface;
> +    ITypeComp ITypeComp_iface;
>      LONG ref;
>      BOOL not_attached_to_typelib;
>      TYPEATTR TypeAttr ;         /* _lots_ of type information. */
> @@ -1125,7 +1125,7 @@ typedef struct tagITypeInfoImpl
>  
>  static inline ITypeInfoImpl *info_impl_from_ITypeComp( ITypeComp *iface )
>  {
> -    return (ITypeInfoImpl *)((char*)iface - FIELD_OFFSET(ITypeInfoImpl, lpVtblTypeComp));
> +    return CONTAINING_RECORD(iface, ITypeInfoImpl, ITypeComp_iface);
>  }
>  
>  static const ITypeInfo2Vtbl tinfvt;
> @@ -4884,7 +4884,7 @@ static HRESULT WINAPI ITypeLibComp_fnBind(
>              if (pTypeInfo->Name && !strcmpW(pTypeInfo->Name, szName))
>              {
>                  *pDescKind = DESCKIND_TYPECOMP;
> -                pBindPtr->lptcomp = (ITypeComp *)&pTypeInfo->lpVtblTypeComp;
> +                pBindPtr->lptcomp = &pTypeInfo->ITypeComp_iface;
>                  ITypeComp_AddRef(pBindPtr->lptcomp);
>                  TRACE("module or enum: %s\n", debugstr_w(szName));
>                  return S_OK;
> @@ -4894,7 +4894,7 @@ static HRESULT WINAPI ITypeLibComp_fnBind(
>          if ((pTypeInfo->TypeAttr.typekind == TKIND_MODULE) ||
>              (pTypeInfo->TypeAttr.typekind == TKIND_ENUM))
>          {
> -            ITypeComp *pSubTypeComp = (ITypeComp *)&pTypeInfo->lpVtblTypeComp;
> +            ITypeComp *pSubTypeComp = &pTypeInfo->ITypeComp_iface;
>              HRESULT hr;
>  
>              hr = ITypeComp_Bind(pSubTypeComp, szName, lHash, wFlags, ppTInfo, pDescKind, pBindPtr);
> @@ -4910,7 +4910,7 @@ static HRESULT WINAPI ITypeLibComp_fnBind(
>          if ((pTypeInfo->TypeAttr.typekind == TKIND_COCLASS) &&
>              (pTypeInfo->TypeAttr.wTypeFlags & TYPEFLAG_FAPPOBJECT))
>          {
> -            ITypeComp *pSubTypeComp = (ITypeComp *)&pTypeInfo->lpVtblTypeComp;
> +            ITypeComp *pSubTypeComp = &pTypeInfo->ITypeComp_iface;
>              HRESULT hr;
>              ITypeInfo *subtypeinfo;
>              BINDPTR subbindptr;
> @@ -5013,9 +5013,9 @@ static HRESULT WINAPI ITypeLibComp_fnBindType(
>          if (pTypeInfo->Name && !strcmpiW(pTypeInfo->Name, szName))
>          {
>              TRACE("returning %p\n", pTypeInfo);
> -            *ppTInfo = (ITypeInfo *)&pTypeInfo->lpVtbl;
> +            *ppTInfo = (ITypeInfo *)&pTypeInfo->ITypeInfo2_iface;
>              ITypeInfo_AddRef(*ppTInfo);
> -            *ppTComp = (ITypeComp *)&pTypeInfo->lpVtblTypeComp;
> +            *ppTComp = &pTypeInfo->ITypeComp_iface;
>              ITypeComp_AddRef(*ppTComp);
>              return S_OK;
>          }
> @@ -5046,8 +5046,8 @@ static ITypeInfoImpl* ITypeInfoImpl_Constructor(void)
>      pTypeInfoImpl = heap_alloc_zero(sizeof(ITypeInfoImpl));
>      if (pTypeInfoImpl)
>      {
> -      pTypeInfoImpl->lpVtbl = &tinfvt;
> -      pTypeInfoImpl->lpVtblTypeComp = &tcompvt;
> +      pTypeInfoImpl->ITypeInfo2_iface.lpVtbl = &tinfvt;
> +      pTypeInfoImpl->ITypeComp_iface.lpVtbl = &tcompvt;
>        pTypeInfoImpl->ref = 0;
>        pTypeInfoImpl->hreftype = -1;
>        pTypeInfoImpl->TypeAttr.memidConstructor = MEMBERID_NIL;
> @@ -5238,7 +5238,7 @@ static HRESULT WINAPI ITypeInfo_fnGetTypeComp( ITypeInfo2 *iface,
>  
>      TRACE("(%p)->(%p)\n", This, ppTComp);
>  
> -    *ppTComp = (ITypeComp *)&This->lpVtblTypeComp;
> +    *ppTComp = &This->ITypeComp_iface;
>      ITypeComp_AddRef(*ppTComp);
>      return S_OK;
>  }
> @@ -6999,7 +6999,7 @@ static HRESULT WINAPI ITypeInfo_fnGetRefTypeInfo(
>  
>      if ((This->hreftype != -1) && (This->hreftype == hRefType))
>      {
> -        *ppTInfo = (ITypeInfo *)&This->lpVtbl;
> +        *ppTInfo = (ITypeInfo *)&This->ITypeInfo2_iface;
>          ITypeInfo_AddRef(*ppTInfo);
>          result = S_OK;
>      }
> @@ -7913,7 +7913,7 @@ static HRESULT WINAPI ITypeComp_fnBind(
>          if (FAILED(hr))
>              return hr;
>          *pDescKind = DESCKIND_FUNCDESC;
> -        *ppTInfo = (ITypeInfo *)&This->lpVtbl;
> +        *ppTInfo = (ITypeInfo *)&This->ITypeInfo2_iface;
>          ITypeInfo_AddRef(*ppTInfo);
>          return S_OK;
>      } else {
> @@ -7923,7 +7923,7 @@ static HRESULT WINAPI ITypeComp_fnBind(
>              if (FAILED(hr))
>                  return hr;
>              *pDescKind = DESCKIND_VARDESC;
> -            *ppTInfo = (ITypeInfo *)&This->lpVtbl;
> +            *ppTInfo = (ITypeInfo *)&This->ITypeInfo2_iface;
>              ITypeInfo_AddRef(*ppTInfo);
>              return S_OK;
>          }
> @@ -7934,7 +7934,7 @@ static HRESULT WINAPI ITypeComp_fnBind(
>          ITypeInfo *pTInfo;
>          ITypeComp *pTComp;
>          HRESULT hr;
> -        hr=ITypeInfo_GetRefTypeInfo((ITypeInfo *)&This->lpVtbl, This->impltypes[0].hRef, &pTInfo);
> +        hr=ITypeInfo2_GetRefTypeInfo(&This->ITypeInfo2_iface, This->impltypes[0].hRef, &pTInfo);
>          if (SUCCEEDED(hr))
>          {
>              hr = ITypeInfo_GetTypeComp(pTInfo,&pTComp);
> -- 
> 1.8.2.2
> 
> 
> 
> 



More information about the wine-devel mailing list