ole32: Use an iface instead of a vtbl pointer in RemUnknown.
Michael Stefaniuc
mstefani at redhat.de
Wed Dec 8 15:59:55 CST 2010
---
dlls/ole32/stubmanager.c | 15 ++++++++++-----
1 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/dlls/ole32/stubmanager.c b/dlls/ole32/stubmanager.c
index f6b8bfa..f5a6ee8 100644
--- a/dlls/ole32/stubmanager.c
+++ b/dlls/ole32/stubmanager.c
@@ -578,12 +578,17 @@ BOOL stub_manager_is_table_marshaled(struct stub_manager *m, const IPID *ipid)
typedef struct rem_unknown
{
- const IRemUnknownVtbl *lpVtbl;
+ IRemUnknown IRemUnknown_iface;
LONG refs;
} RemUnknown;
static const IRemUnknownVtbl RemUnknown_Vtbl;
+static inline RemUnknown *impl_from_IRemUnknown(IRemUnknown *iface)
+{
+ return CONTAINING_RECORD(iface, RemUnknown, IRemUnknown_iface);
+}
+
/* construct an IRemUnknown object with one outstanding reference */
static HRESULT RemUnknown_Construct(IRemUnknown **ppRemUnknown)
@@ -592,10 +597,10 @@ static HRESULT RemUnknown_Construct(IRemUnknown **ppRemUnknown)
if (!This) return E_OUTOFMEMORY;
- This->lpVtbl = &RemUnknown_Vtbl;
+ This->IRemUnknown_iface.lpVtbl = &RemUnknown_Vtbl;
This->refs = 1;
- *ppRemUnknown = (IRemUnknown *)This;
+ *ppRemUnknown = &This->IRemUnknown_iface;
return S_OK;
}
@@ -620,7 +625,7 @@ static HRESULT WINAPI RemUnknown_QueryInterface(IRemUnknown *iface, REFIID riid,
static ULONG WINAPI RemUnknown_AddRef(IRemUnknown *iface)
{
ULONG refs;
- RemUnknown *This = (RemUnknown *)iface;
+ RemUnknown *This = impl_from_IRemUnknown(iface);
refs = InterlockedIncrement(&This->refs);
@@ -631,7 +636,7 @@ static ULONG WINAPI RemUnknown_AddRef(IRemUnknown *iface)
static ULONG WINAPI RemUnknown_Release(IRemUnknown *iface)
{
ULONG refs;
- RemUnknown *This = (RemUnknown *)iface;
+ RemUnknown *This = impl_from_IRemUnknown(iface);
refs = InterlockedDecrement(&This->refs);
if (!refs)
--
1.7.3.2
More information about the wine-patches
mailing list