Michael Stefaniuc : ole32/tests: Use an iface instead of a vtbl pointer in HeapUnknown.

Alexandre Julliard julliard at winehq.org
Sun Dec 5 12:10:06 CST 2010


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

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Sat Dec  4 22:14:56 2010 +0100

ole32/tests: Use an iface instead of a vtbl pointer in HeapUnknown.

---

 dlls/ole32/tests/marshal.c |   17 +++++++++++------
 dlls/ole32/tests/moniker.c |   27 ++++++++++++++++-----------
 2 files changed, 27 insertions(+), 17 deletions(-)

diff --git a/dlls/ole32/tests/marshal.c b/dlls/ole32/tests/marshal.c
index 3d0ab16..5563085 100644
--- a/dlls/ole32/tests/marshal.c
+++ b/dlls/ole32/tests/marshal.c
@@ -1697,10 +1697,15 @@ static void test_proxy_interfaces(void)
 
 typedef struct
 {
-    const IUnknownVtbl *lpVtbl;
+    IUnknown IUnknown_iface;
     ULONG refs;
 } HeapUnknown;
 
+static inline HeapUnknown *impl_from_IUnknown(IUnknown *iface)
+{
+    return CONTAINING_RECORD(iface, HeapUnknown, IUnknown_iface);
+}
+
 static HRESULT WINAPI HeapUnknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
 {
     if (IsEqualIID(riid, &IID_IUnknown))
@@ -1715,13 +1720,13 @@ static HRESULT WINAPI HeapUnknown_QueryInterface(IUnknown *iface, REFIID riid, v
 
 static ULONG WINAPI HeapUnknown_AddRef(IUnknown *iface)
 {
-    HeapUnknown *This = (HeapUnknown *)iface;
+    HeapUnknown *This = impl_from_IUnknown(iface);
     return InterlockedIncrement((LONG*)&This->refs);
 }
 
 static ULONG WINAPI HeapUnknown_Release(IUnknown *iface)
 {
-    HeapUnknown *This = (HeapUnknown *)iface;
+    HeapUnknown *This = impl_from_IUnknown(iface);
     ULONG refs = InterlockedDecrement((LONG*)&This->refs);
     if (!refs) HeapFree(GetProcessHeap(), 0, This);
     return refs;
@@ -1744,7 +1749,7 @@ static void test_proxybuffer(REFIID riid)
     CLSID clsid;
     HeapUnknown *pUnkOuter = HeapAlloc(GetProcessHeap(), 0, sizeof(*pUnkOuter));
 
-    pUnkOuter->lpVtbl = &HeapUnknown_Vtbl;
+    pUnkOuter->IUnknown_iface.lpVtbl = &HeapUnknown_Vtbl;
     pUnkOuter->refs = 1;
 
     hr = CoGetPSClsid(riid, &clsid);
@@ -1753,13 +1758,13 @@ static void test_proxybuffer(REFIID riid)
     hr = CoGetClassObject(&clsid, CLSCTX_INPROC_SERVER, NULL, &IID_IPSFactoryBuffer, (LPVOID*)&psfb);
     ok_ole_success(hr, CoGetClassObject);
 
-    hr = IPSFactoryBuffer_CreateProxy(psfb, (IUnknown*)pUnkOuter, riid, &proxy, &lpvtbl);
+    hr = IPSFactoryBuffer_CreateProxy(psfb, &pUnkOuter->IUnknown_iface, riid, &proxy, &lpvtbl);
     ok_ole_success(hr, IPSFactoryBuffer_CreateProxy);
     ok(lpvtbl != NULL, "IPSFactoryBuffer_CreateProxy succeeded, but returned a NULL vtable!\n");
 
     /* release our reference to the outer unknown object - the PS factory
      * buffer will have AddRef's it in the CreateProxy call */
-    refs = IUnknown_Release((IUnknown *)pUnkOuter);
+    refs = IUnknown_Release(&pUnkOuter->IUnknown_iface);
     ok(refs == 1, "Ref count of outer unknown should have been 1 instead of %d\n", refs);
 
     refs = IPSFactoryBuffer_Release(psfb);
diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c
index 33edde1..eb7973e 100644
--- a/dlls/ole32/tests/moniker.c
+++ b/dlls/ole32/tests/moniker.c
@@ -156,10 +156,15 @@ static IClassFactory Test_ClassFactory = { &TestClassFactory_Vtbl };
 
 typedef struct
 {
-    const IUnknownVtbl *lpVtbl;
+    IUnknown IUnknown_iface;
     ULONG refs;
 } HeapUnknown;
 
+static inline HeapUnknown *impl_from_IUnknown(IUnknown *iface)
+{
+    return CONTAINING_RECORD(iface, HeapUnknown, IUnknown_iface);
+}
+
 static HRESULT WINAPI HeapUnknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
 {
     if (IsEqualIID(riid, &IID_IUnknown))
@@ -174,13 +179,13 @@ static HRESULT WINAPI HeapUnknown_QueryInterface(IUnknown *iface, REFIID riid, v
 
 static ULONG WINAPI HeapUnknown_AddRef(IUnknown *iface)
 {
-    HeapUnknown *This = (HeapUnknown *)iface;
+    HeapUnknown *This = impl_from_IUnknown(iface);
     return InterlockedIncrement((LONG*)&This->refs);
 }
 
 static ULONG WINAPI HeapUnknown_Release(IUnknown *iface)
 {
-    HeapUnknown *This = (HeapUnknown *)iface;
+    HeapUnknown *This = impl_from_IUnknown(iface);
     ULONG refs = InterlockedDecrement((LONG*)&This->refs);
     if (!refs) HeapFree(GetProcessHeap(), 0, This);
     return refs;
@@ -1880,9 +1885,9 @@ static void test_bind_context(void)
     ok(hr == E_INVALIDARG, "IBindCtx_RegisterObjectParam should have returned E_INVALIDARG instead of 0x%08x\n", hr);
 
     unknown = HeapAlloc(GetProcessHeap(), 0, sizeof(*unknown));
-    unknown->lpVtbl = &HeapUnknown_Vtbl;
+    unknown->IUnknown_iface.lpVtbl = &HeapUnknown_Vtbl;
     unknown->refs = 1;
-    hr = IBindCtx_RegisterObjectParam(pBindCtx, (WCHAR *)wszParamName, (IUnknown *)&unknown->lpVtbl);
+    hr = IBindCtx_RegisterObjectParam(pBindCtx, (WCHAR *)wszParamName, &unknown->IUnknown_iface);
     ok_ole_success(hr, "IBindCtx_RegisterObjectParam");
 
     hr = IBindCtx_GetObjectParam(pBindCtx, (WCHAR *)wszParamName, &param_obj);
@@ -1907,23 +1912,23 @@ static void test_bind_context(void)
     ok(hr == E_INVALIDARG, "IBindCtx_RevokeObjectBound(NULL) should have return E_INVALIDARG instead of 0x%08x\n", hr);
 
     unknown2 = HeapAlloc(GetProcessHeap(), 0, sizeof(*unknown));
-    unknown2->lpVtbl = &HeapUnknown_Vtbl;
+    unknown2->IUnknown_iface.lpVtbl = &HeapUnknown_Vtbl;
     unknown2->refs = 1;
-    hr = IBindCtx_RegisterObjectBound(pBindCtx, (IUnknown *)&unknown2->lpVtbl);
+    hr = IBindCtx_RegisterObjectBound(pBindCtx, &unknown2->IUnknown_iface);
     ok_ole_success(hr, "IBindCtx_RegisterObjectBound");
 
-    hr = IBindCtx_RevokeObjectBound(pBindCtx, (IUnknown *)&unknown2->lpVtbl);
+    hr = IBindCtx_RevokeObjectBound(pBindCtx, &unknown2->IUnknown_iface);
     ok_ole_success(hr, "IBindCtx_RevokeObjectBound");
 
-    hr = IBindCtx_RevokeObjectBound(pBindCtx, (IUnknown *)&unknown2->lpVtbl);
+    hr = IBindCtx_RevokeObjectBound(pBindCtx, &unknown2->IUnknown_iface);
     ok(hr == MK_E_NOTBOUND, "IBindCtx_RevokeObjectBound with not bound object should have returned MK_E_NOTBOUND instead of 0x%08x\n", hr);
 
     IBindCtx_Release(pBindCtx);
 
-    refs = IUnknown_Release((IUnknown *)&unknown->lpVtbl);
+    refs = IUnknown_Release(&unknown->IUnknown_iface);
     ok(!refs, "object param should have been destroyed, instead of having %d refs\n", refs);
 
-    refs = IUnknown_Release((IUnknown *)&unknown2->lpVtbl);
+    refs = IUnknown_Release(&unknown2->IUnknown_iface);
     ok(!refs, "bound object should have been destroyed, instead of having %d refs\n", refs);
 }
 




More information about the wine-cvs mailing list