mlang: Get rid of ICOM_THIS_MULTI macro.

Dmitry Timoshkov dmitry at codeweavers.com
Wed Feb 4 01:25:19 CST 2009


---
 dlls/mlang/mlang.c |  166 +++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 111 insertions(+), 55 deletions(-)

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 @@ WINE_DEFAULT_DEBUG_CHANNEL(mlang);
 
 #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 @@ typedef struct tagEnumCodePage_impl
     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 HRESULT WINAPI fnIEnumCodePage_QueryInterface(
 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 @@ static HRESULT WINAPI fnIEnumCodePage_Clone(
         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 @@ static  HRESULT WINAPI fnIEnumCodePage_Next(
         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_Next(
 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 @@ static  HRESULT WINAPI fnIEnumCodePage_Skip(
         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 @@ typedef struct tagEnumScript_impl
     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 HRESULT WINAPI fnIEnumScript_QueryInterface(
 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 @@ static HRESULT WINAPI fnIEnumScript_Clone(
         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 @@ static  HRESULT WINAPI fnIEnumScript_Next(
         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_Next(
 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 @@ static  HRESULT WINAPI fnIEnumScript_Skip(
         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 HRESULT EnumScript_create( MLang_impl* mlang, DWORD dwFlags,
 
 /******************************************************************************/
 
+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 @@ static HRESULT WINAPI fnIMLangFontLink_CodePageToCodePages(
         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 @@ static HRESULT WINAPI fnIMLangFontLink_CodePagesToCodePage(
         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 @@ static HRESULT WINAPI fnIMLangFontLink_GetFontCodePages(
 {
     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 const IMLangFontLinkVtbl IMLangFontLink_vtbl =
 
 /******************************************************************************/
 
+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 @@ static HRESULT WINAPI fnIMultiLanguage_GetCodePageInfo(
     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 @@ static HRESULT WINAPI fnIMultiLanguage_EnumCodePages(
     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 @@ static HRESULT WINAPI fnIMultiLanguage_GetCharsetInfo(
     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 @@ typedef struct tagEnumRfc1766_impl
     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 HRESULT WINAPI fnIEnumRfc1766_QueryInterface(
 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 @@ static HRESULT WINAPI fnIEnumRfc1766_Clone(
         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 @@ static  HRESULT WINAPI fnIEnumRfc1766_Next(
         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_Next(
 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 @@ static  HRESULT WINAPI fnIEnumRfc1766_Skip(
         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 @@ static HRESULT WINAPI fnIMultiLanguage_EnumRfc1766(
     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 const IMultiLanguageVtbl IMultiLanguage_vtbl =
 
 /******************************************************************************/
 
+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 @@ static HRESULT WINAPI fnIMultiLanguage2_GetNumberOfCodePageInfo(
     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 @@ static HRESULT WINAPI fnIMultiLanguage2_GetCodePageInfo(
     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 @@ static HRESULT WINAPI fnIMultiLanguage2_EnumCodePages(
     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 @@ static HRESULT WINAPI fnIMultiLanguage2_GetCharsetInfo(
     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 @@ static HRESULT WINAPI fnIMultiLanguage2_EnumRfc1766(
     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 @@ static HRESULT WINAPI fnIMultiLanguage2_GetNumberOfScripts(
     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 @@ static HRESULT WINAPI fnIMultiLanguage2_EnumScripts(
     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 @@ static HRESULT WINAPI fnIMultiLanguage2_ValidateCodePageEx(
     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 @@ static HRESULT WINAPI fnIMultiLanguage3_DetectOutboundCodePage(
     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 @@ static HRESULT WINAPI fnIMultiLanguage3_DetectOutboundCodePageInIStream(
     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 const IMultiLanguage3Vtbl IMultiLanguage3_vtbl =
 };
 
 /******************************************************************************/
+
+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 const IMLangFontLink2Vtbl IMLangFontLink2_vtbl =
 
 /******************************************************************************/
 
+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 );
 }
 
-- 
1.6.1




More information about the wine-patches mailing list