/*
* List all interface VTables here
*/
- const IOleObjectVtbl* lpvtbl1;
- const IUnknownVtbl* lpvtbl2;
- const IDataObjectVtbl* lpvtbl3;
- const IRunnableObjectVtbl* lpvtbl4;
+ const IOleObjectVtbl* lpVtbl;
+ const IUnknownVtbl* lpvtblIUnknown;
+ const IDataObjectVtbl* lpvtblIDataObject;
+ const IRunnableObjectVtbl* lpvtblIRunnableObject;
/*
* Reference count of this object
/*
* IUnknown implementation of the outer object.
- */
+p */
IUnknown* outerUnknown;
/*
typedef struct DefaultHandler DefaultHandler;
/*
- * Here, I define utility macros to help with the casting of the
+ * Here, I define utility functions to help with the casting of the
* "this" parameter.
* There is a version to accommodate all of the VTables implemented
* by this object.
*/
-#define _ICOM_THIS_From_IOleObject(class,name) class* this = (class*)name
-#define _ICOM_THIS_From_NDIUnknown(class, name) class* this = (class*)(((char*)name)-sizeof(void*))
-#define _ICOM_THIS_From_IDataObject(class, name) class* this = (class*)(((char*)name)-2*sizeof(void*))
-#define _ICOM_THIS_From_IRunnableObject(class, name) class* this = (class*)(((char*)name)-3*sizeof(void*))
+static inline DefaultHandler *impl_from_IOleObject( IOleObject *iface )
+{
+ return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpVtbl));
+}
+
+static inline DefaultHandler *impl_from_NDIUnknown( IUnknown *iface )
+{
+ return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpvtblIUnknown));
+}
+
+static inline DefaultHandler *impl_from_IDataObject( IDataObject *iface )
+{
+ return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpvtblIDataObject));
+}
+
+static inline DefaultHandler *impl_from_IRunnableObject( IRunnableObject *iface )
+{
+ return (DefaultHandler *)((char*)iface - FIELD_OFFSET(DefaultHandler, lpvtblIRunnableObject));
+}
+
/*
* Prototypes for the methods of the DefaultHandler class.
/*
* Make sure it supports the interface required by the caller.
*/
- hr = IUnknown_QueryInterface((IUnknown*)&(newHandler->lpvtbl2), riid, ppvObj);
+ hr = IUnknown_QueryInterface((IUnknown*)&(newHandler->lpvtblIUnknown), riid, ppvObj);
/*
* Release the reference obtained in the constructor. If
* the QueryInterface was unsuccessful, it will free the class.
*/
- IUnknown_Release((IUnknown*)&(newHandler->lpvtbl2));
+ IUnknown_Release((IUnknown*)&(newHandler->lpvtblIUnknown));
return hr;
}
/*
* Initialize the virtual function table.
*/
- newObject->lpvtbl1 = &DefaultHandler_IOleObject_VTable;
- newObject->lpvtbl2 = &DefaultHandler_NDIUnknown_VTable;
- newObject->lpvtbl3 = &DefaultHandler_IDataObject_VTable;
- newObject->lpvtbl4 = &DefaultHandler_IRunnableObject_VTable;
+ newObject->lpVtbl = &DefaultHandler_IOleObject_VTable;
+ newObject->lpvtblIUnknown = &DefaultHandler_NDIUnknown_VTable;
+ newObject->lpvtblIDataObject = &DefaultHandler_IDataObject_VTable;
+ newObject->lpvtblIRunnableObject = &DefaultHandler_IRunnableObject_VTable;
/*
* Start with one reference count. The caller of this function
* lifetime.
*/
if (pUnkOuter==NULL)
- pUnkOuter = (IUnknown*)&(newObject->lpvtbl2);
+ pUnkOuter = (IUnknown*)&(newObject->lpvtblIUnknown);
newObject->outerUnknown = pUnkOuter;
REFIID riid,
void** ppvObject)
{
- _ICOM_THIS_From_NDIUnknown(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_NDIUnknown(iface);
/*
* Perform a sanity check on the parameters.
}
else if (memcmp(&IID_IOleObject, riid, sizeof(IID_IOleObject)) == 0)
{
- *ppvObject = (IOleObject*)&(this->lpvtbl1);
+ *ppvObject = (IOleObject*)&(this->lpVtbl);
}
else if (memcmp(&IID_IDataObject, riid, sizeof(IID_IDataObject)) == 0)
{
- *ppvObject = (IDataObject*)&(this->lpvtbl3);
+ *ppvObject = (IDataObject*)&(this->lpvtblIDataObject);
}
else if (memcmp(&IID_IRunnableObject, riid, sizeof(IID_IRunnableObject)) == 0)
{
- *ppvObject = (IRunnableObject*)&(this->lpvtbl4);
+ *ppvObject = (IRunnableObject*)&(this->lpvtblIRunnableObject);
}
else
{
static ULONG WINAPI DefaultHandler_NDIUnknown_AddRef(
IUnknown* iface)
{
- _ICOM_THIS_From_NDIUnknown(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_NDIUnknown(iface);
return InterlockedIncrement(&this->ref);
}
static ULONG WINAPI DefaultHandler_NDIUnknown_Release(
IUnknown* iface)
{
- _ICOM_THIS_From_NDIUnknown(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_NDIUnknown(iface);
ULONG ref;
/*
REFIID riid,
void** ppvObject)
{
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
return IUnknown_QueryInterface(this->outerUnknown, riid, ppvObject);
}
static ULONG WINAPI DefaultHandler_AddRef(
IOleObject* iface)
{
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
return IUnknown_AddRef(this->outerUnknown);
}
static ULONG WINAPI DefaultHandler_Release(
IOleObject* iface)
{
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
return IUnknown_Release(this->outerUnknown);
}
IOleObject* iface,
IOleClientSite* pClientSite)
{
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %p)\n", iface, pClientSite);
IOleObject* iface,
IOleClientSite** ppClientSite)
{
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
/*
* Sanity check.
LPCOLESTR szContainerApp,
LPCOLESTR szContainerObj)
{
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %s, %s)\n",
iface,
DWORD dwWhichMoniker,
IMoniker** ppmk)
{
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %ld, %ld, %p)\n",
iface, dwAssign, dwWhichMoniker, ppmk);
IOleObject* iface,
IEnumOLEVERB** ppEnumOleVerb)
{
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %p)\n", iface, ppEnumOleVerb);
IOleObject* iface,
CLSID* pClsid)
{
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %p)\n", iface, pClsid);
DWORD dwFormOfType,
LPOLESTR* pszUserType)
{
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %ld, %p)\n", iface, dwFormOfType, pszUserType);
IViewObject2* cacheView = NULL;
HRESULT hres;
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %lx, %p)\n", iface, dwDrawAspect, psizel);
DWORD* pdwConnection)
{
HRESULT hres = S_OK;
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %p, %p)\n", iface, pAdvSink, pdwConnection);
IOleObject* iface,
DWORD dwConnection)
{
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %ld)\n", iface, dwConnection);
IOleObject* iface,
IEnumSTATDATA** ppenumAdvise)
{
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %p)\n", iface, ppenumAdvise);
DWORD* pdwStatus)
{
HRESULT hres;
- _ICOM_THIS_From_IOleObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IOleObject(iface);
TRACE("(%p, %lx, %p)\n", iface, dwAspect, pdwStatus);
REFIID riid,
void** ppvObject)
{
- _ICOM_THIS_From_IDataObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IDataObject(iface);
return IUnknown_QueryInterface(this->outerUnknown, riid, ppvObject);
}
static ULONG WINAPI DefaultHandler_IDataObject_AddRef(
IDataObject* iface)
{
- _ICOM_THIS_From_IDataObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IDataObject(iface);
return IUnknown_AddRef(this->outerUnknown);
}
static ULONG WINAPI DefaultHandler_IDataObject_Release(
IDataObject* iface)
{
- _ICOM_THIS_From_IDataObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IDataObject(iface);
return IUnknown_Release(this->outerUnknown);
}
IDataObject* cacheDataObject = NULL;
HRESULT hres;
- _ICOM_THIS_From_IDataObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %p, %p)\n", iface, pformatetcIn, pmedium);
IDataObject* cacheDataObject = NULL;
HRESULT hres;
- _ICOM_THIS_From_IDataObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %p)\n", iface, pformatetc);
IDataObject* cacheDataObject = NULL;
HRESULT hres;
- _ICOM_THIS_From_IDataObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %p, %p, %d)\n", iface, pformatetc, pmedium, fRelease);
IEnumFORMATETC** ppenumFormatEtc)
{
HRESULT hres;
- _ICOM_THIS_From_IDataObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %lx, %p)\n", iface, dwDirection, ppenumFormatEtc);
DWORD* pdwConnection)
{
HRESULT hres = S_OK;
- _ICOM_THIS_From_IDataObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %p, %ld, %p, %p)\n",
iface, pformatetc, advf, pAdvSink, pdwConnection);
IDataObject* iface,
DWORD dwConnection)
{
- _ICOM_THIS_From_IDataObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %ld)\n", iface, dwConnection);
IDataObject* iface,
IEnumSTATDATA** ppenumAdvise)
{
- _ICOM_THIS_From_IDataObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IDataObject(iface);
TRACE("(%p, %p)\n", iface, ppenumAdvise);
REFIID riid,
void** ppvObject)
{
- _ICOM_THIS_From_IRunnableObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IRunnableObject(iface);
return IUnknown_QueryInterface(this->outerUnknown, riid, ppvObject);
}
static ULONG WINAPI DefaultHandler_IRunnableObject_AddRef(
IRunnableObject* iface)
{
- _ICOM_THIS_From_IRunnableObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IRunnableObject(iface);
return IUnknown_AddRef(this->outerUnknown);
}
static ULONG WINAPI DefaultHandler_IRunnableObject_Release(
IRunnableObject* iface)
{
- _ICOM_THIS_From_IRunnableObject(DefaultHandler, iface);
+ DefaultHandler *this = impl_from_IRunnableObject(iface);
return IUnknown_Release(this->outerUnknown);
}