Dmitry Timoshkov : oleaut32: Do not rely on vtable placement in the implementation structure.

Alexandre Julliard julliard at winehq.org
Fri Jun 14 11:03:50 CDT 2013


Module: wine
Branch: master
Commit: 08bade6880e3818a990d05b25ba0ccc266755bbc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=08bade6880e3818a990d05b25ba0ccc266755bbc

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Fri Jun 14 10:03:56 2013 +0900

oleaut32: Do not rely on vtable placement in the implementation structure.

---

 dlls/oleaut32/typelib.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 9502b3c..bc7ee56 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -4628,7 +4628,7 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeInfo(
     if(index >= This->TypeInfoCount)
         return TYPE_E_ELEMENTNOTFOUND;
 
-    *ppTInfo = (ITypeInfo*)This->typeinfos[index];
+    *ppTInfo = (ITypeInfo *)&This->typeinfos[index]->ITypeInfo2_iface;
     ITypeInfo_AddRef(*ppTInfo);
 
     return S_OK;
@@ -4676,7 +4676,7 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeInfoOfGuid(
 
     for(i = 0; i < This->TypeInfoCount; ++i){
         if(IsEqualIID(TLB_get_guid_null(This->typeinfos[i]->guid), guid)){
-            *ppTInfo = (ITypeInfo*)This->typeinfos[i];
+            *ppTInfo = (ITypeInfo *)&This->typeinfos[i]->ITypeInfo2_iface;
             ITypeInfo_AddRef(*ppTInfo);
             return S_OK;
         }
@@ -4918,8 +4918,8 @@ static HRESULT WINAPI ITypeLib2_fnFindName(
 
         continue;
 ITypeLib2_fnFindName_exit:
-        ITypeInfo_AddRef((ITypeInfo*)pTInfo);
-        ppTInfo[count]=(LPTYPEINFO)pTInfo;
+        ITypeInfo2_AddRef(&pTInfo->ITypeInfo2_iface);
+        ppTInfo[count] = (ITypeInfo *)&pTInfo->ITypeInfo2_iface;
         count++;
     }
     TRACE("found %d typeinfos\n", count);
@@ -5253,7 +5253,7 @@ static HRESULT WINAPI ITypeLibComp_fnBind(
                     return hr;
 
                 *pDescKind = DESCKIND_IMPLICITAPPOBJ;
-                *ppTInfo = (ITypeInfo *)pTypeInfo;
+                *ppTInfo = (ITypeInfo *)&pTypeInfo->ITypeInfo2_iface;
                 ITypeInfo_AddRef(*ppTInfo);
                 return S_OK;
             }
@@ -8195,7 +8195,7 @@ HRESULT WINAPI CreateDispTypeInfo(
 
     dump_TypeInfo(pTIClass);
 
-    *pptinfo = (ITypeInfo*)pTIClass;
+    *pptinfo = (ITypeInfo *)&pTIClass->ITypeInfo2_iface;
 
     ITypeInfo_AddRef(*pptinfo);
     ITypeLib2_Release(&pTypeLibImpl->ITypeLib2_iface);
@@ -8208,21 +8208,21 @@ static HRESULT WINAPI ITypeComp_fnQueryInterface(ITypeComp * iface, REFIID riid,
 {
     ITypeInfoImpl *This = info_impl_from_ITypeComp(iface);
 
-    return ITypeInfo_QueryInterface((ITypeInfo *)This, riid, ppv);
+    return ITypeInfo2_QueryInterface(&This->ITypeInfo2_iface, riid, ppv);
 }
 
 static ULONG WINAPI ITypeComp_fnAddRef(ITypeComp * iface)
 {
     ITypeInfoImpl *This = info_impl_from_ITypeComp(iface);
 
-    return ITypeInfo_AddRef((ITypeInfo *)This);
+    return ITypeInfo2_AddRef(&This->ITypeInfo2_iface);
 }
 
 static ULONG WINAPI ITypeComp_fnRelease(ITypeComp * iface)
 {
     ITypeInfoImpl *This = info_impl_from_ITypeComp(iface);
 
-    return ITypeInfo_Release((ITypeInfo *)This);
+    return ITypeInfo2_Release(&This->ITypeInfo2_iface);
 }
 
 static HRESULT WINAPI ITypeComp_fnBind(




More information about the wine-cvs mailing list