mlang: Get rid of ICOM_THIS_MULTI macro.
diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c
index 424011d..f7d8097 100644
--- a/dlls/mlang/mlang.c
+++ b/dlls/mlang/mlang.c
@@ -43,8 +43,6 @@
#define CP_UNICODE 1200
-#define ICOM_THIS_MULTI(impl,field,iface) impl* const This=(impl*)((char*)(iface) - offsetof(impl,field))
-
static HRESULT MultiLanguage_create(IUnknown *pUnkOuter, LPVOID *ppObj);
static HRESULT EnumRfc1766_create(LANGID LangId, IEnumRfc1766 **ppEnum);
@@ -1486,12 +1484,17 @@
DWORD total, pos;
} EnumCodePage_impl;
+static inline EnumCodePage_impl *impl_from_IEnumCodePage( IEnumCodePage *iface )
+{
+ return (EnumCodePage_impl *)CONTAINING_RECORD( iface, EnumCodePage_impl, vtbl_IEnumCodePage );
+}
+
static HRESULT WINAPI fnIEnumCodePage_QueryInterface(
IEnumCodePage* iface,
REFIID riid,
void** ppvObject)
{
- ICOM_THIS_MULTI(EnumCodePage_impl, vtbl_IEnumCodePage, iface);
+ EnumCodePage_impl *This = impl_from_IEnumCodePage( iface );
TRACE("%p -> %s\n", This, debugstr_guid(riid) );
@@ -1511,14 +1514,14 @@
static ULONG WINAPI fnIEnumCodePage_AddRef(
IEnumCodePage* iface)
{
- ICOM_THIS_MULTI(EnumCodePage_impl, vtbl_IEnumCodePage, iface);
+ EnumCodePage_impl *This = impl_from_IEnumCodePage( iface );
return InterlockedIncrement(&This->ref);
}
static ULONG WINAPI fnIEnumCodePage_Release(
IEnumCodePage* iface)
{
- ICOM_THIS_MULTI(EnumCodePage_impl, vtbl_IEnumCodePage, iface);
+ EnumCodePage_impl *This = impl_from_IEnumCodePage( iface );
ULONG ref = InterlockedDecrement(&This->ref);
TRACE("%p ref = %d\n", This, ref);
@@ -1536,7 +1539,7 @@
IEnumCodePage* iface,
IEnumCodePage** ppEnum)
{
- ICOM_THIS_MULTI(EnumCodePage_impl, vtbl_IEnumCodePage, iface);
+ EnumCodePage_impl *This = impl_from_IEnumCodePage( iface );
FIXME("%p %p\n", This, ppEnum);
return E_NOTIMPL;
}
@@ -1548,8 +1551,8 @@
ULONG* pceltFetched)
{
ULONG i;
+ EnumCodePage_impl *This = impl_from_IEnumCodePage( iface );
- ICOM_THIS_MULTI(EnumCodePage_impl, vtbl_IEnumCodePage, iface);
TRACE("%p %u %p %p\n", This, celt, rgelt, pceltFetched);
if (!pceltFetched) return S_FALSE;
@@ -1585,7 +1588,8 @@
static HRESULT WINAPI fnIEnumCodePage_Reset(
IEnumCodePage* iface)
{
- ICOM_THIS_MULTI(EnumCodePage_impl, vtbl_IEnumCodePage, iface);
+ EnumCodePage_impl *This = impl_from_IEnumCodePage( iface );
+
TRACE("%p\n", This);
This->pos = 0;
@@ -1596,7 +1600,8 @@
IEnumCodePage* iface,
ULONG celt)
{
- ICOM_THIS_MULTI(EnumCodePage_impl, vtbl_IEnumCodePage, iface);
+ EnumCodePage_impl *This = impl_from_IEnumCodePage( iface );
+
TRACE("%p %u\n", This, celt);
if (celt >= This->total) return S_FALSE;
@@ -1672,12 +1677,17 @@
DWORD total, pos;
} EnumScript_impl;
+static inline EnumScript_impl *impl_from_IEnumScript( IEnumScript *iface )
+{
+ return (EnumScript_impl *)CONTAINING_RECORD( iface, EnumScript_impl, vtbl_IEnumScript );
+}
+
static HRESULT WINAPI fnIEnumScript_QueryInterface(
IEnumScript* iface,
REFIID riid,
void** ppvObject)
{
- ICOM_THIS_MULTI(EnumScript_impl, vtbl_IEnumScript, iface);
+ EnumScript_impl *This = impl_from_IEnumScript( iface );
TRACE("%p -> %s\n", This, debugstr_guid(riid) );
@@ -1697,14 +1707,14 @@
static ULONG WINAPI fnIEnumScript_AddRef(
IEnumScript* iface)
{
- ICOM_THIS_MULTI(EnumScript_impl, vtbl_IEnumScript, iface);
+ EnumScript_impl *This = impl_from_IEnumScript( iface );
return InterlockedIncrement(&This->ref);
}
static ULONG WINAPI fnIEnumScript_Release(
IEnumScript* iface)
{
- ICOM_THIS_MULTI(EnumScript_impl, vtbl_IEnumScript, iface);
+ EnumScript_impl *This = impl_from_IEnumScript( iface );
ULONG ref = InterlockedDecrement(&This->ref);
TRACE("%p ref = %d\n", This, ref);
@@ -1722,7 +1732,7 @@
IEnumScript* iface,
IEnumScript** ppEnum)
{
- ICOM_THIS_MULTI(EnumScript_impl, vtbl_IEnumScript, iface);
+ EnumScript_impl *This = impl_from_IEnumScript( iface );
FIXME("%p %p: stub!\n", This, ppEnum);
return E_NOTIMPL;
}
@@ -1733,7 +1743,8 @@
PSCRIPTINFO rgelt,
ULONG* pceltFetched)
{
- ICOM_THIS_MULTI(EnumScript_impl, vtbl_IEnumScript, iface);
+ EnumScript_impl *This = impl_from_IEnumScript( iface );
+
TRACE("%p %u %p %p\n", This, celt, rgelt, pceltFetched);
if (!pceltFetched || !rgelt) return E_FAIL;
@@ -1755,7 +1766,8 @@
static HRESULT WINAPI fnIEnumScript_Reset(
IEnumScript* iface)
{
- ICOM_THIS_MULTI(EnumScript_impl, vtbl_IEnumScript, iface);
+ EnumScript_impl *This = impl_from_IEnumScript( iface );
+
TRACE("%p\n", This);
This->pos = 0;
@@ -1766,7 +1778,8 @@
IEnumScript* iface,
ULONG celt)
{
- ICOM_THIS_MULTI(EnumScript_impl, vtbl_IEnumScript, iface);
+ EnumScript_impl *This = impl_from_IEnumScript( iface );
+
TRACE("%p %u\n", This, celt);
if (celt >= This->total) return S_FALSE;
@@ -1826,26 +1839,31 @@
/******************************************************************************/
+static inline MLang_impl *impl_from_IMLangFontLink( IMLangFontLink *iface )
+{
+ return (MLang_impl *)CONTAINING_RECORD( iface, MLang_impl, vtbl_IMLangFontLink );
+}
+
static HRESULT WINAPI fnIMLangFontLink_QueryInterface(
IMLangFontLink* iface,
REFIID riid,
void** ppvObject)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangFontLink, iface);
+ MLang_impl *This = impl_from_IMLangFontLink( iface );
return MLang_QueryInterface( This, riid, ppvObject );
}
static ULONG WINAPI fnIMLangFontLink_AddRef(
IMLangFontLink* iface)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangFontLink, iface);
+ MLang_impl *This = impl_from_IMLangFontLink( iface );
return MLang_AddRef( This );
}
static ULONG WINAPI fnIMLangFontLink_Release(
IMLangFontLink* iface)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangFontLink, iface);
+ MLang_impl *This = impl_from_IMLangFontLink( iface );
return MLang_Release( This );
}
@@ -1896,7 +1914,7 @@
UINT uCodePage,
DWORD* pdwCodePages)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangFontLink, iface);
+ MLang_impl *This = impl_from_IMLangFontLink( iface );
CHARSETINFO cs;
BOOL rc;
@@ -1922,7 +1940,7 @@
UINT uDefaultCodePage,
UINT* puCodePage)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangFontLink, iface);
+ MLang_impl *This = impl_from_IMLangFontLink( iface );
DWORD mask = 0x00000000;
UINT i;
CHARSETINFO cs;
@@ -1975,7 +1993,7 @@
{
HFONT old_font;
FONTSIGNATURE fontsig;
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangFontLink, iface);
+ MLang_impl *This = impl_from_IMLangFontLink( iface );
TRACE("(%p)\n",This);
@@ -2033,24 +2051,29 @@
/******************************************************************************/
+static inline MLang_impl *impl_from_IMultiLanguage( IMultiLanguage *iface )
+{
+ return (MLang_impl *)CONTAINING_RECORD( iface, MLang_impl, vtbl_IMultiLanguage );
+}
+
static HRESULT WINAPI fnIMultiLanguage_QueryInterface(
IMultiLanguage* iface,
REFIID riid,
void** ppvObject)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage, iface);
+ MLang_impl *This = impl_from_IMultiLanguage( iface );
return MLang_QueryInterface( This, riid, ppvObject );
}
static ULONG WINAPI fnIMultiLanguage_AddRef( IMultiLanguage* iface )
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage, iface);
+ MLang_impl *This = impl_from_IMultiLanguage( iface );
return IMLangFontLink_AddRef( ((IMLangFontLink*)This) );
}
static ULONG WINAPI fnIMultiLanguage_Release( IMultiLanguage* iface )
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage, iface);
+ MLang_impl *This = impl_from_IMultiLanguage( iface );
return IMLangFontLink_Release( ((IMLangFontLink*)This) );
}
@@ -2068,8 +2091,8 @@
PMIMECPINFO pCodePageInfo)
{
UINT i, n;
+ MLang_impl *This = impl_from_IMultiLanguage( iface );
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage, iface);
TRACE("%p, %u, %p\n", This, uiCodePage, pCodePageInfo);
for (i = 0; i < sizeof(mlang_data)/sizeof(mlang_data[0]); i++)
@@ -2100,7 +2123,8 @@
DWORD grfFlags,
IEnumCodePage** ppEnumCodePage)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage, iface);
+ MLang_impl *This = impl_from_IMultiLanguage( iface );
+
TRACE("%p %08x %p\n", This, grfFlags, ppEnumCodePage);
return EnumCodePage_create( This, grfFlags, 0, ppEnumCodePage );
@@ -2111,7 +2135,7 @@
BSTR Charset,
PMIMECSETINFO pCharsetInfo)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage, iface);
+ MLang_impl *This = impl_from_IMultiLanguage( iface );
return IMultiLanguage3_GetCharsetInfo((IMultiLanguage3*)&This->vtbl_IMultiLanguage3, Charset, pCharsetInfo);
}
@@ -2220,12 +2244,17 @@
DWORD total, pos;
} EnumRfc1766_impl;
+static inline EnumRfc1766_impl *impl_from_IEnumRfc1766( IEnumRfc1766 *iface )
+{
+ return (EnumRfc1766_impl *)CONTAINING_RECORD( iface, EnumRfc1766_impl, vtbl_IEnumRfc1766 );
+}
+
static HRESULT WINAPI fnIEnumRfc1766_QueryInterface(
IEnumRfc1766 *iface,
REFIID riid,
void** ppvObject)
{
- ICOM_THIS_MULTI(EnumRfc1766_impl, vtbl_IEnumRfc1766, iface);
+ EnumRfc1766_impl *This = impl_from_IEnumRfc1766( iface );
TRACE("%p -> %s\n", This, debugstr_guid(riid) );
@@ -2245,14 +2274,14 @@
static ULONG WINAPI fnIEnumRfc1766_AddRef(
IEnumRfc1766 *iface)
{
- ICOM_THIS_MULTI(EnumRfc1766_impl, vtbl_IEnumRfc1766, iface);
+ EnumRfc1766_impl *This = impl_from_IEnumRfc1766( iface );
return InterlockedIncrement(&This->ref);
}
static ULONG WINAPI fnIEnumRfc1766_Release(
IEnumRfc1766 *iface)
{
- ICOM_THIS_MULTI(EnumRfc1766_impl, vtbl_IEnumRfc1766, iface);
+ EnumRfc1766_impl *This = impl_from_IEnumRfc1766( iface );
ULONG ref = InterlockedDecrement(&This->ref);
TRACE("%p ref = %d\n", This, ref);
@@ -2269,7 +2298,8 @@
IEnumRfc1766 *iface,
IEnumRfc1766 **ppEnum)
{
- ICOM_THIS_MULTI(EnumRfc1766_impl, vtbl_IEnumRfc1766, iface);
+ EnumRfc1766_impl *This = impl_from_IEnumRfc1766( iface );
+
FIXME("%p %p\n", This, ppEnum);
return E_NOTIMPL;
}
@@ -2281,8 +2311,8 @@
ULONG *pceltFetched)
{
ULONG i;
+ EnumRfc1766_impl *This = impl_from_IEnumRfc1766( iface );
- ICOM_THIS_MULTI(EnumRfc1766_impl, vtbl_IEnumRfc1766, iface);
TRACE("%p %u %p %p\n", This, celt, rgelt, pceltFetched);
if (!pceltFetched) return S_FALSE;
@@ -2312,7 +2342,8 @@
static HRESULT WINAPI fnIEnumRfc1766_Reset(
IEnumRfc1766 *iface)
{
- ICOM_THIS_MULTI(EnumRfc1766_impl, vtbl_IEnumRfc1766, iface);
+ EnumRfc1766_impl *This = impl_from_IEnumRfc1766( iface );
+
TRACE("%p\n", This);
This->pos = 0;
@@ -2323,7 +2354,8 @@
IEnumRfc1766 *iface,
ULONG celt)
{
- ICOM_THIS_MULTI(EnumRfc1766_impl, vtbl_IEnumRfc1766, iface);
+ EnumRfc1766_impl *This = impl_from_IEnumRfc1766( iface );
+
TRACE("%p %u\n", This, celt);
if (celt >= This->total) return S_FALSE;
@@ -2428,7 +2460,8 @@
IMultiLanguage *iface,
IEnumRfc1766 **ppEnumRfc1766)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage, iface);
+ MLang_impl *This = impl_from_IMultiLanguage( iface );
+
TRACE("%p %p\n", This, ppEnumRfc1766);
return EnumRfc1766_create(0, ppEnumRfc1766);
@@ -2481,24 +2514,29 @@
/******************************************************************************/
+static inline MLang_impl *impl_from_IMultiLanguage3( IMultiLanguage3 *iface )
+{
+ return (MLang_impl *)CONTAINING_RECORD( iface, MLang_impl, vtbl_IMultiLanguage3 );
+}
+
static HRESULT WINAPI fnIMultiLanguage2_QueryInterface(
IMultiLanguage3* iface,
REFIID riid,
void** ppvObject)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage3, iface);
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
return MLang_QueryInterface( This, riid, ppvObject );
}
static ULONG WINAPI fnIMultiLanguage2_AddRef( IMultiLanguage3* iface )
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage3, iface);
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
return MLang_AddRef( This );
}
static ULONG WINAPI fnIMultiLanguage2_Release( IMultiLanguage3* iface )
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage3, iface);
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
return MLang_Release( This );
}
@@ -2506,7 +2544,8 @@
IMultiLanguage3* iface,
UINT* pcCodePage)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage3, iface);
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
+
TRACE("%p, %p\n", This, pcCodePage);
if (!pcCodePage) return S_FALSE;
@@ -2560,8 +2599,8 @@
PMIMECPINFO pCodePageInfo)
{
UINT i, n;
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage3, iface);
TRACE("%p, %u, %04x, %p\n", This, uiCodePage, LangId, pCodePageInfo);
for (i = 0; i < sizeof(mlang_data)/sizeof(mlang_data[0]); i++)
@@ -2593,7 +2632,8 @@
LANGID LangId,
IEnumCodePage** ppEnumCodePage)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage3, iface);
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
+
TRACE("%p %08x %04x %p\n", This, grfFlags, LangId, ppEnumCodePage);
return EnumCodePage_create( This, grfFlags, LangId, ppEnumCodePage );
@@ -2605,8 +2645,8 @@
PMIMECSETINFO pCharsetInfo)
{
UINT i, n;
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage3, iface);
TRACE("%p %s %p\n", This, debugstr_w(Charset), pCharsetInfo);
if (!pCharsetInfo) return E_FAIL;
@@ -2753,7 +2793,8 @@
LANGID LangId,
IEnumRfc1766** ppEnumRfc1766)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage, iface);
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
+
TRACE("%p %p\n", This, ppEnumRfc1766);
return EnumRfc1766_create(LangId, ppEnumRfc1766);
@@ -2962,7 +3003,8 @@
IMultiLanguage3* iface,
UINT* pnScripts)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage3, iface);
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
+
TRACE("%p %p\n", This, pnScripts);
if (!pnScripts) return S_FALSE;
@@ -2977,7 +3019,8 @@
LANGID LangId,
IEnumScript** ppEnumScript)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage3, iface);
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
+
TRACE("%p %08x %04x %p\n", This, dwFlags, LangId, ppEnumScript);
return EnumScript_create( This, dwFlags, LangId, ppEnumScript );
@@ -2990,7 +3033,7 @@
DWORD dwfIODControl)
{
int i;
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage3, iface);
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
TRACE("%p %u %p %08x\n", This, uiCodePage, hwnd, dwfIODControl);
@@ -3026,7 +3069,8 @@
UINT *pnDetectedCodePages,
WCHAR *lpSpecialChar)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage3, iface);
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
+
FIXME("(%p)->(%08x %s %u %p %u %p %p %p)\n", This, dwFlags, debugstr_w(lpWideCharStr),
cchWideChar, puiPreferredCodePages, nPreferredCodePages, puiDetectedCodePages,
pnDetectedCodePages, lpSpecialChar);
@@ -3043,7 +3087,8 @@
UINT *pnDetectedCodePages,
WCHAR *lpSpecialChar)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMultiLanguage3, iface);
+ MLang_impl *This = impl_from_IMultiLanguage3( iface );
+
FIXME("(%p)->(%08x %p %p %u %p %p %p)\n", This, dwFlags, pStrIn,
puiPreferredCodePages, nPreferredCodePages, puiDetectedCodePages,
pnDetectedCodePages, lpSpecialChar);
@@ -3087,24 +3132,30 @@
};
/******************************************************************************/
+
+static inline MLang_impl *impl_from_IMLangFontLink2( IMLangFontLink2 *iface )
+{
+ return (MLang_impl *)CONTAINING_RECORD( iface, MLang_impl, vtbl_IMLangFontLink2 );
+}
+
static HRESULT WINAPI fnIMLangFontLink2_QueryInterface(
IMLangFontLink2 * iface,
REFIID riid,
void** ppvObject)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangFontLink2, iface);
+ MLang_impl *This = impl_from_IMLangFontLink2( iface );
return MLang_QueryInterface( This, riid, ppvObject );
}
static ULONG WINAPI fnIMLangFontLink2_AddRef( IMLangFontLink2* iface )
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangFontLink2, iface);
+ MLang_impl *This = impl_from_IMLangFontLink2( iface );
return MLang_AddRef( This );
}
static ULONG WINAPI fnIMLangFontLink2_Release( IMLangFontLink2* iface )
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangFontLink2, iface);
+ MLang_impl *This = impl_from_IMLangFontLink2( iface );
return MLang_Release( This );
}
@@ -3238,26 +3289,31 @@
/******************************************************************************/
+static inline MLang_impl *impl_from_IMLangLineBreakConsole( IMLangLineBreakConsole *iface )
+{
+ return (MLang_impl *)CONTAINING_RECORD( iface, MLang_impl, vtbl_IMLangLineBreakConsole );
+}
+
static HRESULT WINAPI fnIMLangLineBreakConsole_QueryInterface(
IMLangLineBreakConsole* iface,
REFIID riid,
void** ppvObject)
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangLineBreakConsole, iface);
+ MLang_impl *This = impl_from_IMLangLineBreakConsole( iface );
return MLang_QueryInterface( This, riid, ppvObject );
}
static ULONG WINAPI fnIMLangLineBreakConsole_AddRef(
IMLangLineBreakConsole* iface )
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangLineBreakConsole, iface);
+ MLang_impl *This = impl_from_IMLangLineBreakConsole( iface );
return MLang_AddRef( This );
}
static ULONG WINAPI fnIMLangLineBreakConsole_Release(
IMLangLineBreakConsole* iface )
{
- ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangLineBreakConsole, iface);
+ MLang_impl *This = impl_from_IMLangLineBreakConsole( iface );
return MLang_Release( This );
}