ole32: Standardize the COM usage in defaulthandler.c.

This commit is contained in:
Michael Stefaniuc 2010-12-23 02:05:43 +01:00 committed by Alexandre Julliard
parent feba7c37b4
commit 91ecb05f29
1 changed files with 45 additions and 42 deletions

View File

@ -83,12 +83,12 @@ enum object_state
*/
struct DefaultHandler
{
const IOleObjectVtbl* lpVtbl;
const IUnknownVtbl* lpvtblIUnknown;
const IDataObjectVtbl* lpvtblIDataObject;
const IRunnableObjectVtbl* lpvtblIRunnableObject;
const IAdviseSinkVtbl *lpvtblIAdviseSink;
const IPersistStorageVtbl *lpvtblIPersistStorage;
IOleObject IOleObject_iface;
IUnknown IUnknown_iface;
IDataObject IDataObject_iface;
IRunnableObject IRunnableObject_iface;
IAdviseSink IAdviseSink_iface;
IPersistStorage IPersistStorage_iface;
/* Reference count of this object */
LONG ref;
@ -148,39 +148,39 @@ typedef struct DefaultHandler DefaultHandler;
static inline DefaultHandler *impl_from_IOleObject( IOleObject *iface )
{
return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpVtbl));
return CONTAINING_RECORD(iface, DefaultHandler, IOleObject_iface);
}
static inline DefaultHandler *impl_from_NDIUnknown( IUnknown *iface )
static inline DefaultHandler *impl_from_IUnknown( IUnknown *iface )
{
return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpvtblIUnknown));
return CONTAINING_RECORD(iface, DefaultHandler, IUnknown_iface);
}
static inline DefaultHandler *impl_from_IDataObject( IDataObject *iface )
{
return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpvtblIDataObject));
return CONTAINING_RECORD(iface, DefaultHandler, IDataObject_iface);
}
static inline DefaultHandler *impl_from_IRunnableObject( IRunnableObject *iface )
{
return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpvtblIRunnableObject));
return CONTAINING_RECORD(iface, DefaultHandler, IRunnableObject_iface);
}
static inline DefaultHandler *impl_from_IAdviseSink( IAdviseSink *iface )
{
return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpvtblIAdviseSink));
return CONTAINING_RECORD(iface, DefaultHandler, IAdviseSink_iface);
}
static inline DefaultHandler *impl_from_IPersistStorage( IPersistStorage *iface )
{
return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpvtblIPersistStorage));
return CONTAINING_RECORD(iface, DefaultHandler, IPersistStorage_iface);
}
static void DefaultHandler_Destroy(DefaultHandler* This);
static inline BOOL object_is_running(DefaultHandler *This)
{
return IRunnableObject_IsRunning((IRunnableObject*)&This->lpvtblIRunnableObject);
return IRunnableObject_IsRunning(&This->IRunnableObject_iface);
}
/*********************************************************
@ -201,7 +201,7 @@ static HRESULT WINAPI DefaultHandler_NDIUnknown_QueryInterface(
REFIID riid,
void** ppvObject)
{
DefaultHandler *This = impl_from_NDIUnknown(iface);
DefaultHandler *This = impl_from_IUnknown(iface);
if (!ppvObject)
return E_INVALIDARG;
@ -211,14 +211,14 @@ static HRESULT WINAPI DefaultHandler_NDIUnknown_QueryInterface(
if (IsEqualIID(&IID_IUnknown, riid))
*ppvObject = iface;
else if (IsEqualIID(&IID_IOleObject, riid))
*ppvObject = &This->lpVtbl;
*ppvObject = &This->IOleObject_iface;
else if (IsEqualIID(&IID_IDataObject, riid))
*ppvObject = &This->lpvtblIDataObject;
*ppvObject = &This->IDataObject_iface;
else if (IsEqualIID(&IID_IRunnableObject, riid))
*ppvObject = &This->lpvtblIRunnableObject;
*ppvObject = &This->IRunnableObject_iface;
else if (IsEqualIID(&IID_IPersist, riid) ||
IsEqualIID(&IID_IPersistStorage, riid))
*ppvObject = &This->lpvtblIPersistStorage;
*ppvObject = &This->IPersistStorage_iface;
else if (IsEqualIID(&IID_IViewObject, riid) ||
IsEqualIID(&IID_IViewObject2, riid) ||
IsEqualIID(&IID_IOleCache, riid) ||
@ -260,7 +260,7 @@ static HRESULT WINAPI DefaultHandler_NDIUnknown_QueryInterface(
static ULONG WINAPI DefaultHandler_NDIUnknown_AddRef(
IUnknown* iface)
{
DefaultHandler *This = impl_from_NDIUnknown(iface);
DefaultHandler *This = impl_from_IUnknown(iface);
return InterlockedIncrement(&This->ref);
}
@ -275,7 +275,7 @@ static ULONG WINAPI DefaultHandler_NDIUnknown_AddRef(
static ULONG WINAPI DefaultHandler_NDIUnknown_Release(
IUnknown* iface)
{
DefaultHandler *This = impl_from_NDIUnknown(iface);
DefaultHandler *This = impl_from_IUnknown(iface);
ULONG ref;
ref = InterlockedDecrement(&This->ref);
@ -617,7 +617,7 @@ static HRESULT WINAPI DefaultHandler_DoVerb(
LPCRECT lprcPosRect)
{
DefaultHandler *This = impl_from_IOleObject(iface);
IRunnableObject *pRunnableObj = (IRunnableObject *)&This->lpvtblIRunnableObject;
IRunnableObject *pRunnableObj = &This->IRunnableObject_iface;
HRESULT hr;
TRACE("(%d, %p, %p, %d, %p, %s)\n", iVerb, lpmsg, pActiveSite, lindex, hwndParent, wine_dbgstr_rect(lprcPosRect));
@ -1328,9 +1328,7 @@ static HRESULT WINAPI DefaultHandler_Run(
This->object_state = object_state_running;
hr = IOleObject_Advise(This->pOleDelegate,
(IAdviseSink *)&This->lpvtblIAdviseSink,
&This->dwAdvConn);
hr = IOleObject_Advise(This->pOleDelegate, &This->IAdviseSink_iface, &This->dwAdvConn);
if (SUCCEEDED(hr) && This->clientSite)
hr = IOleObject_SetClientSite(This->pOleDelegate, This->clientSite);
@ -1440,7 +1438,7 @@ static ULONG WINAPI DefaultHandler_IAdviseSink_AddRef(
{
DefaultHandler *This = impl_from_IAdviseSink(iface);
return IUnknown_AddRef((IUnknown *)&This->lpvtblIUnknown);
return IUnknown_AddRef(&This->IUnknown_iface);
}
static ULONG WINAPI DefaultHandler_IAdviseSink_Release(
@ -1448,7 +1446,7 @@ static ULONG WINAPI DefaultHandler_IAdviseSink_Release(
{
DefaultHandler *This = impl_from_IAdviseSink(iface);
return IUnknown_Release((IUnknown *)&This->lpvtblIUnknown);
return IUnknown_Release(&This->IUnknown_iface);
}
static void WINAPI DefaultHandler_IAdviseSink_OnDataChange(
@ -1919,12 +1917,12 @@ static DefaultHandler* DefaultHandler_Construct(
if (!This)
return This;
This->lpVtbl = &DefaultHandler_IOleObject_VTable;
This->lpvtblIUnknown = &DefaultHandler_NDIUnknown_VTable;
This->lpvtblIDataObject = &DefaultHandler_IDataObject_VTable;
This->lpvtblIRunnableObject = &DefaultHandler_IRunnableObject_VTable;
This->lpvtblIAdviseSink = &DefaultHandler_IAdviseSink_VTable;
This->lpvtblIPersistStorage = &DefaultHandler_IPersistStorage_VTable;
This->IOleObject_iface.lpVtbl = &DefaultHandler_IOleObject_VTable;
This->IUnknown_iface.lpVtbl = &DefaultHandler_NDIUnknown_VTable;
This->IDataObject_iface.lpVtbl = &DefaultHandler_IDataObject_VTable;
This->IRunnableObject_iface.lpVtbl = &DefaultHandler_IRunnableObject_VTable;
This->IAdviseSink_iface.lpVtbl = &DefaultHandler_IAdviseSink_VTable;
This->IPersistStorage_iface.lpVtbl = &DefaultHandler_IPersistStorage_VTable;
This->inproc_server = (flags & EMBDHLP_INPROC_SERVER) ? TRUE : FALSE;
@ -1941,7 +1939,7 @@ static DefaultHandler* DefaultHandler_Construct(
* lifetime.
*/
if (!pUnkOuter)
pUnkOuter = (IUnknown*)&This->lpvtblIUnknown;
pUnkOuter = &This->IUnknown_iface;
This->outerUnknown = pUnkOuter;
@ -2117,13 +2115,13 @@ HRESULT WINAPI OleCreateEmbeddingHelper(
/*
* Make sure it supports the interface required by the caller.
*/
hr = IUnknown_QueryInterface((IUnknown*)&newHandler->lpvtblIUnknown, riid, ppvObj);
hr = IUnknown_QueryInterface(&newHandler->IUnknown_iface, riid, ppvObj);
/*
* Release the reference obtained in the constructor. If
* the QueryInterface was unsuccessful, it will free the class.
*/
IUnknown_Release((IUnknown*)&newHandler->lpvtblIUnknown);
IUnknown_Release(&newHandler->IUnknown_iface);
return hr;
}
@ -2142,11 +2140,16 @@ HRESULT WINAPI OleCreateDefaultHandler(REFCLSID clsid, LPUNKNOWN pUnkOuter,
typedef struct HandlerCF
{
const IClassFactoryVtbl *lpVtbl;
IClassFactory IClassFactory_iface;
LONG refs;
CLSID clsid;
} HandlerCF;
static inline HandlerCF *impl_from_IClassFactory(IClassFactory *iface)
{
return CONTAINING_RECORD(iface, HandlerCF, IClassFactory_iface);
}
static HRESULT WINAPI
HandlerCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid, LPVOID *ppv)
{
@ -2163,13 +2166,13 @@ HandlerCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid, LPVOID *ppv)
static ULONG WINAPI HandlerCF_AddRef(LPCLASSFACTORY iface)
{
HandlerCF *This = (HandlerCF *)iface;
HandlerCF *This = impl_from_IClassFactory(iface);
return InterlockedIncrement(&This->refs);
}
static ULONG WINAPI HandlerCF_Release(LPCLASSFACTORY iface)
{
HandlerCF *This = (HandlerCF *)iface;
HandlerCF *This = impl_from_IClassFactory(iface);
ULONG refs = InterlockedDecrement(&This->refs);
if (!refs)
HeapFree(GetProcessHeap(), 0, This);
@ -2180,7 +2183,7 @@ static HRESULT WINAPI
HandlerCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pUnk,
REFIID riid, LPVOID *ppv)
{
HandlerCF *This = (HandlerCF *)iface;
HandlerCF *This = impl_from_IClassFactory(iface);
return OleCreateDefaultHandler(&This->clsid, pUnk, riid, ppv);
}
@ -2203,11 +2206,11 @@ HRESULT HandlerCF_Create(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
HRESULT hr;
HandlerCF *This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
if (!This) return E_OUTOFMEMORY;
This->lpVtbl = &HandlerClassFactoryVtbl;
This->IClassFactory_iface.lpVtbl = &HandlerClassFactoryVtbl;
This->refs = 0;
This->clsid = *rclsid;
hr = IUnknown_QueryInterface((IUnknown *)&This->lpVtbl, riid, ppv);
hr = IUnknown_QueryInterface((IUnknown *)&This->IClassFactory_iface, riid, ppv);
if (FAILED(hr))
HeapFree(GetProcessHeap(), 0, This);