Huw Davies : ole32: Use a helper function to access the enum format implementation.
Alexandre Julliard
julliard at winehq.org
Mon Mar 30 12:08:47 CDT 2009
Module: wine
Branch: master
Commit: d93688a721ea2ff0105233893f7d79b2d5b1093d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d93688a721ea2ff0105233893f7d79b2d5b1093d
Author: Huw Davies <huw at codeweavers.com>
Date: Thu Mar 26 15:42:13 2009 +0000
ole32: Use a helper function to access the enum format implementation.
---
dlls/ole32/clipboard.c | 75 +++++++++++++++++++++---------------------------
1 files changed, 33 insertions(+), 42 deletions(-)
diff --git a/dlls/ole32/clipboard.c b/dlls/ole32/clipboard.c
index 5dbcca8..a571412 100644
--- a/dlls/ole32/clipboard.c
+++ b/dlls/ole32/clipboard.c
@@ -105,32 +105,6 @@ static inline ole_clipbrd *impl_from_IDataObject(IDataObject *iface)
return (ole_clipbrd*)((char*)iface - FIELD_OFFSET(ole_clipbrd, lpvtbl));
}
-/****************************************************************************
-* IEnumFORMATETC implementation
-* DO NOT add any members before the VTables declaration!
-*/
-typedef struct
-{
- /* IEnumFORMATETC VTable */
- const IEnumFORMATETCVtbl *lpVtbl;
-
- /* IEnumFORMATETC fields */
- UINT posFmt; /* current enumerator position */
- UINT countFmt; /* number of EnumFORMATETC's in array */
- LPFORMATETC pFmt; /* array of EnumFORMATETC's */
-
- /*
- * Reference count of this object
- */
- LONG ref;
-
- /*
- * IUnknown implementation of the parent data object.
- */
- IUnknown* pUnkDataObj;
-
-} IEnumFORMATETCImpl;
-
typedef struct PresentationDataHeader
{
BYTE unknown1[28];
@@ -177,6 +151,28 @@ typedef struct
* the OLE clipboard's IDataObject.
*---------------------------------------------------------------------*/
+typedef struct enum_fmtetc
+{
+ const IEnumFORMATETCVtbl *lpVtbl;
+ LONG ref;
+
+ UINT posFmt; /* current enumerator position */
+ UINT countFmt; /* number of EnumFORMATETC's in array */
+ LPFORMATETC pFmt; /* array of EnumFORMATETC's */
+
+
+ /*
+ * IUnknown implementation of the parent data object.
+ */
+ IUnknown* pUnkDataObj;
+
+} enum_fmtetc;
+
+static inline enum_fmtetc *impl_from_IEnumFORMATETC(IEnumFORMATETC *iface)
+{
+ return (enum_fmtetc*)((char*)iface - FIELD_OFFSET(enum_fmtetc, lpVtbl));
+}
+
/************************************************************************
* OLEClipbrd_IEnumFORMATETC_QueryInterface (IUnknown)
*
@@ -185,21 +181,16 @@ typedef struct
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_QueryInterface
(LPENUMFORMATETC iface, REFIID riid, LPVOID* ppvObj)
{
- IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
+ enum_fmtetc *This = impl_from_IEnumFORMATETC(iface);
- TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
-
- /*
- * Since enumerators are separate objects from the parent data object
- * we only need to support the IUnknown and IEnumFORMATETC interfaces
- */
+ TRACE("(%p)->(IID: %s, %p)\n", This, debugstr_guid(riid), ppvObj);
*ppvObj = NULL;
if(IsEqualIID(riid, &IID_IUnknown) ||
IsEqualIID(riid, &IID_IEnumFORMATETC))
{
- *ppvObj = This;
+ *ppvObj = iface;
}
if(*ppvObj)
@@ -224,7 +215,7 @@ static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_QueryInterface
*/
static ULONG WINAPI OLEClipbrd_IEnumFORMATETC_AddRef(LPENUMFORMATETC iface)
{
- IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
+ enum_fmtetc *This = impl_from_IEnumFORMATETC(iface);
TRACE("(%p)->(count=%u)\n",This, This->ref);
if (This->pUnkDataObj)
@@ -240,7 +231,7 @@ static ULONG WINAPI OLEClipbrd_IEnumFORMATETC_AddRef(LPENUMFORMATETC iface)
*/
static ULONG WINAPI OLEClipbrd_IEnumFORMATETC_Release(LPENUMFORMATETC iface)
{
- IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
+ enum_fmtetc *This = impl_from_IEnumFORMATETC(iface);
ULONG ref;
TRACE("(%p)->(count=%u)\n",This, This->ref);
@@ -266,7 +257,7 @@ static ULONG WINAPI OLEClipbrd_IEnumFORMATETC_Release(LPENUMFORMATETC iface)
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Next
(LPENUMFORMATETC iface, ULONG celt, FORMATETC *rgelt, ULONG *pceltFethed)
{
- IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
+ enum_fmtetc *This = impl_from_IEnumFORMATETC(iface);
UINT cfetch;
HRESULT hres = S_FALSE;
@@ -304,7 +295,7 @@ static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Next
*/
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Skip(LPENUMFORMATETC iface, ULONG celt)
{
- IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
+ enum_fmtetc *This = impl_from_IEnumFORMATETC(iface);
TRACE("(%p)->(num=%u)\n", This, celt);
This->posFmt += celt;
@@ -323,7 +314,7 @@ static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Skip(LPENUMFORMATETC iface, ULON
*/
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Reset(LPENUMFORMATETC iface)
{
- IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
+ enum_fmtetc *This = impl_from_IEnumFORMATETC(iface);
TRACE("(%p)->()\n", This);
This->posFmt = 0;
@@ -341,7 +332,7 @@ static LPENUMFORMATETC OLEClipbrd_IEnumFORMATETC_Construct(UINT cfmt, const FORM
static HRESULT WINAPI OLEClipbrd_IEnumFORMATETC_Clone
(LPENUMFORMATETC iface, LPENUMFORMATETC* ppenum)
{
- IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
+ enum_fmtetc *This = impl_from_IEnumFORMATETC(iface);
HRESULT hr = S_OK;
TRACE("(%p)->(ppenum=%p)\n", This, ppenum);
@@ -381,10 +372,10 @@ static const IEnumFORMATETCVtbl efvt =
static LPENUMFORMATETC OLEClipbrd_IEnumFORMATETC_Construct(UINT cfmt, const FORMATETC afmt[],
LPUNKNOWN pUnkDataObj)
{
- IEnumFORMATETCImpl* ef;
+ enum_fmtetc* ef;
DWORD size=cfmt * sizeof(FORMATETC);
- ef = HeapAlloc(GetProcessHeap(), 0, sizeof(IEnumFORMATETCImpl));
+ ef = HeapAlloc(GetProcessHeap(), 0, sizeof(*ef));
if (!ef)
return NULL;
More information about the wine-cvs
mailing list