| /* | 
 |  * Copyright (C) 2004 Mike McCormack | 
 |  * | 
 |  * This library is free software; you can redistribute it and/or | 
 |  * modify it under the terms of the GNU Lesser General Public | 
 |  * License as published by the Free Software Foundation; either | 
 |  * version 2.1 of the License, or (at your option) any later version. | 
 |  * | 
 |  * This library is distributed in the hope that it will be useful, | 
 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
 |  * Lesser General Public License for more details. | 
 |  * | 
 |  * You should have received a copy of the GNU Lesser General Public | 
 |  * License along with this library; if not, write to the Free Software | 
 |  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | 
 |  */ | 
 |  | 
 | #ifndef DO_NO_IMPORTS | 
 | import "unknwn.idl"; | 
 | #endif | 
 |  | 
 | interface IStream; | 
 |  | 
 | cpp_quote("#define CPIOD_PEEK          0x40000000") | 
 | cpp_quote("#define CPIOD_FORCE_PROMPT  0x80000000") | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(359f3443-bd4a-11d0-b188-00aa0038c969), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IMLangCodePages : IUnknown | 
 | { | 
 |     HRESULT GetCharCodePages(       | 
 |         [in] WCHAR chSrc, | 
 |         [out] DWORD *pdwCodePages); | 
 |     HRESULT GetStrCodePages(       | 
 |         [in, size_is(cchSrc)] const WCHAR *pszSrc, | 
 |         [in] LONG cchSrc, | 
 |         [in] DWORD dwPriorityCodePages, | 
 |         [out] DWORD *pdwCodePages, | 
 |         [out] LONG *pcchCodePages); | 
 |     HRESULT CodePageToCodePages(       | 
 |         [in] UINT uCodePage, | 
 |         [out] DWORD *pdwCodePages); | 
 |     HRESULT CodePagesToCodePage(       | 
 |         [in] DWORD dwCodePages, | 
 |         [in] UINT uDefaultCodePage, | 
 |         [out] UINT *puCodePage); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(359f3441-bd4a-11d0-b188-00aa0038c969), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IMLangFontLink : IMLangCodePages | 
 | { | 
 |     HRESULT GetFontCodePages( | 
 |         [in] HDC hDC, | 
 |         [in] HFONT hFont, | 
 |         [out] DWORD *pdwCodePages ); | 
 |  | 
 |     HRESULT MapFont(       | 
 |         [in] HDC hDC, | 
 |         [in] DWORD dwCodePages, | 
 |         [in] HFONT hSrcFont, | 
 |         [out] HFONT *phDestFont); | 
 |  | 
 |     HRESULT ReleaseFont(       | 
 |         [in] HFONT hFont); | 
 |  | 
 |     HRESULT ResetFontMapping(); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(ae5f1430-388b-11d2-8380-00c04f8f5da1), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IEnumScript : IUnknown | 
 | { | 
 |     const USHORT MAX_SCRIPT_NAME = 48; | 
 |     const USHORT MAX_MIMEFACE_NAME = 32; | 
 |  | 
 |     typedef BYTE SCRIPT_ID; | 
 |     typedef __int64 SCRIPT_IDS; | 
 |  | 
 |     typedef enum tagSCRIPTCONTF | 
 |     { | 
 |         sidDefault = 0, | 
 |         sidMerge = sidDefault + 1, | 
 |         sidAsciiSym = sidMerge + 1, | 
 |         sidAsciiLatin = sidAsciiSym + 1, | 
 |         sidLatin = sidAsciiLatin + 1, | 
 |         sidGreek = sidLatin + 1, | 
 |         sidCyrillic = sidGreek + 1, | 
 |         sidArmenian = sidCyrillic + 1, | 
 |         sidHebrew = sidArmenian + 1, | 
 |         sidArabic = sidHebrew + 1, | 
 |         sidDevanagari = sidArabic + 1, | 
 |         sidBengali = sidDevanagari + 1, | 
 |         sidGurmukhi = sidBengali + 1, | 
 |         sidGujarati = sidGurmukhi + 1, | 
 |         sidOriya = sidGujarati + 1, | 
 |         sidTamil = sidOriya + 1, | 
 |         sidTelugu = sidTamil + 1, | 
 |         sidKannada = sidTelugu + 1, | 
 |         sidMalayalam = sidKannada + 1, | 
 |         sidThai = sidMalayalam + 1, | 
 |         sidLao = sidThai + 1, | 
 |         sidTibetan = sidLao + 1, | 
 |         sidGeorgian = sidTibetan + 1, | 
 |         sidHangul = sidGeorgian + 1, | 
 |         sidKana = sidHangul + 1, | 
 |         sidBopomofo = sidKana + 1, | 
 |         sidHan = sidBopomofo + 1, | 
 |         sidEthiopic = sidHan + 1, | 
 |         sidCanSyllabic = sidEthiopic + 1, | 
 |         sidCherokee = sidCanSyllabic + 1, | 
 |         sidYi = sidCherokee + 1, | 
 |         sidBraille = sidYi + 1, | 
 |         sidRunic = sidBraille + 1, | 
 |         sidOgham = sidRunic + 1, | 
 |         sidSinhala = sidOgham + 1, | 
 |         sidSyriac = sidSinhala + 1, | 
 |         sidBurmese = sidSyriac + 1, | 
 |         sidKhmer = sidBurmese + 1, | 
 |         sidThaana = sidKhmer + 1, | 
 |         sidMongolian = sidThaana + 1, | 
 |         sidUserDefined = sidMongolian + 1, | 
 |         sidLim = sidUserDefined + 1, | 
 |         sidFEFirst = sidHangul, | 
 |         sidFELast = sidHan | 
 |     } SCRIPTCONTF; | 
 |  | 
 |     typedef enum tagSCRIPTFONTCONTF | 
 |     { | 
 |         SCRIPTCONTF_FIXED_FONT = 0x1, | 
 |         SCRIPTCONTF_PROPORTIONAL_FONT = 0x2, | 
 |         SCRIPTCONTF_SCRIPT_USER = 0x10000, | 
 |         SCRIPTCONTF_SCRIPT_HIDE = 0x20000, | 
 |         SCRIPTCONTF_SCRIPT_SYSTEM = 0x40000 | 
 |     } SCRIPTFONTCONTF; | 
 |  | 
 |     typedef struct tagSCRIPFONTINFO | 
 |     { | 
 |         SCRIPT_IDS scripts; | 
 |         WCHAR wszFont[MAX_MIMEFACE_NAME]; | 
 |     } SCRIPTFONTINFO, *PSCRIPTFONTINFO; | 
 |  | 
 |     typedef struct tagSCRIPTINFO { | 
 |         SCRIPT_ID ScriptId; | 
 |         UINT uiCodePage; | 
 |         WCHAR wszDescription[MAX_SCRIPT_NAME]; | 
 |         WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME]; | 
 |         WCHAR wszProportionalFont[MAX_MIMEFACE_NAME]; | 
 |     } SCRIPTINFO, *PSCRIPTINFO; | 
 |  | 
 |     HRESULT Clone(  | 
 |         [out] IEnumScript **ppEnum); | 
 |  | 
 |     HRESULT Next(       | 
 |         [in] ULONG celt, | 
 |         [out] PSCRIPTINFO rgelt, | 
 |         [out] ULONG *pceltFetched); | 
 |  | 
 |     HRESULT Reset(); | 
 |  | 
 |     HRESULT Skip(       | 
 |         [in] ULONG celt); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(dccfc162-2b38-11d2-b7ec-00c04f8f5d9a), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IMLangFontLink2 : IMLangCodePages | 
 | { | 
 |     typedef struct tagUNICODERANGE | 
 |     { | 
 |         WCHAR wcFrom; | 
 |         WCHAR wcTo; | 
 |     } UNICODERANGE; | 
 |  | 
 |     typedef [unique] IMLangFontLink2 *PMLANGFONTLINK2; | 
 |  | 
 |     HRESULT GetFontCodePages( | 
 |         [in] HDC hDC, | 
 |         [in] HFONT hFont, | 
 |         [out] DWORD *pdwCodePages ); | 
 |  | 
 |     HRESULT ReleaseFont( | 
 |         [in] HFONT hFont); | 
 |  | 
 |     HRESULT ResetFontMapping(); | 
 |  | 
 |     HRESULT MapFont( | 
 |         [in] HDC hDC, | 
 |         [in] DWORD dwCodePages, | 
 |         [in] WCHAR chSrc, | 
 |         [out] HFONT *pFont); | 
 |  | 
 |     HRESULT GetFontUnicodeRanges( | 
 |         [in] HDC hDC, | 
 |         [in,out] UINT *puiRanges, | 
 |         [out] UNICODERANGE* pUranges); | 
 |  | 
 |     HRESULT GetScriptFontInfo( | 
 |         [in] SCRIPT_ID sid, | 
 |         [in] DWORD dwFlags, | 
 |         [in,out] UINT *puiFonts, | 
 |         [out] SCRIPTFONTINFO* pScriptFont); | 
 |  | 
 |     HRESULT CodePageToScriptID( | 
 |         [in] UINT uiCodePage, | 
 |         [out] SCRIPT_ID *pSid); | 
 | } | 
 |  | 
 | [ | 
 |  object, | 
 |  uuid(c04d65ce-b70d-11d0-b188-00aa0038c969), | 
 |  pointer_default(unique) | 
 | ] | 
 | interface IMLangString : IUnknown | 
 | { | 
 | #ifdef NEWMLSTR | 
 |     HRESULT LockMLStr( | 
 |         [in] LONG lPos, | 
 |         [in] DWORD dwFlags, | 
 |         [out] DWORD* pdwCookie, | 
 |         [out] LONG* plActualPos, | 
 |         [out] LONG* plActualLen); | 
 |  | 
 |     HRESULT UnlockMLStr( | 
 |         [in] DWORD dwCookie); | 
 | #else | 
 |     HRESULT Sync( | 
 |         [in] BOOL fNoAccess); | 
 | #endif | 
 |     HRESULT GetLength( | 
 |         [out, retval] LONG* plLen); | 
 |     HRESULT SetMLStr( | 
 |         [in] LONG lDestPos, | 
 |         [in] LONG lDestLen, | 
 |         [in] IUnknown *pSrcMLStr, | 
 |         [in] LONG lSrcPos, | 
 |         [in] LONG lSrcLen); | 
 | #ifdef NEWMLSTR | 
 |     HRESULT RegisterAttr( | 
 |         [in] IUnknown *pUnk, | 
 |         [out] DWORD* pdwCookie); | 
 |     HRESULT UnregisterAttr( | 
 |         [in] DWORD dwCookie); | 
 |     HRESULT EnumAttr( | 
 |         [out] IEnumUnknown **ppEnumUnk); | 
 |     HRESULT FindAttr( | 
 |         [in] REFIID riid, | 
 |         [in] LPARAM lParam, | 
 |         [out] IUnknown **ppUnk); | 
 | #else | 
 |     HRESULT GetMLStr( | 
 |         [in] LONG lSrcPos, | 
 |         [in] LONG lSrcLen, | 
 |         [in] IUnknown *pUnkOuter, | 
 |         [in] DWORD dwClsContext, | 
 |         [in] const IID* piid, | 
 |         [out] IUnknown** ppDestMLStr, | 
 |         [out] LONG* plDestPos, | 
 |         [out] LONG* plDestLen); | 
 | #endif | 
 | } | 
 |  | 
 | [ | 
 |  object, | 
 |  uuid(f5be2ee1-bfd7-11d0-b188-00aa0038c969), | 
 |  pointer_default(unique) | 
 | ] | 
 | interface IMLangLineBreakConsole : IUnknown | 
 | { | 
 |     HRESULT BreakLineML( | 
 |         [in] IMLangString* pSrcMLStr, | 
 |         [in] LONG lSrcPos, | 
 |         [in] LONG lSrcLen, | 
 |         [in] LONG cMinColumns, | 
 |         [in] LONG cMaxColumns, | 
 |         [out] LONG* plLineLen, | 
 |         [out] LONG* plSkipLen); | 
 |  | 
 |     HRESULT BreakLineW( | 
 |         [in] LCID locale, | 
 |         [in, size_is(cchSrc)] const WCHAR* pszSrc, | 
 |         [in] LONG cchSrc, | 
 |         [in] LONG cMaxColumns, | 
 |         [out] LONG* pcchLine, | 
 |         [out] LONG* pcchSkip ); | 
 |  | 
 |     HRESULT BreakLineA( | 
 |         [in] LCID locale, | 
 |         [in] UINT uCodePage, | 
 |         [in, size_is(cchSrc)] const CHAR* pszSrc, | 
 |         [in] LONG cchSrc, | 
 |         [in] LONG cMaxColumns, | 
 |         [out] LONG* pcchLine, | 
 |         [out] LONG* pcchSkip); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(275c23e3-3747-11d0-9fea-00aa003f8646), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IEnumCodePage : IUnknown | 
 | { | 
 |     const USHORT MAX_MIMECP_NAME = 64; | 
 |     const USHORT MAX_MIMECSET_NAME = 50; | 
 |  | 
 |     typedef enum tagMIMECONTF | 
 |     { | 
 |         MIMECONTF_MAILNEWS = 0x00000001, | 
 |         MIMECONTF_BROWSER = 0x00000002, | 
 |         MIMECONTF_MINIMAL = 0x00000004, | 
 |         MIMECONTF_IMPORT = 0x00000008, | 
 |         MIMECONTF_SAVABLE_MAILNEWS = 0x00000100, | 
 |         MIMECONTF_SAVABLE_BROWSER = 0x00000200, | 
 |         MIMECONTF_EXPORT = 0x00000400, | 
 |         MIMECONTF_PRIVCONVERTER = 0x00010000, | 
 |         MIMECONTF_VALID = 0x00020000, | 
 |         MIMECONTF_VALID_NLS = 0x00040000, | 
 |         MIMECONTF_MIME_IE4 = 0x10000000, | 
 |         MIMECONTF_MIME_LATEST = 0x20000000, | 
 |         MIMECONTF_MIME_REGISTRY = 0x40000000 | 
 |     } MIMECONTF; | 
 |  | 
 |     typedef struct tagMIMECPINFO { | 
 |         DWORD dwFlags; | 
 |         UINT uiCodePage; | 
 |         UINT uiFamilyCodePage; | 
 |         WCHAR wszDescription[MAX_MIMECP_NAME]; | 
 |         WCHAR wszWebCharset[MAX_MIMECSET_NAME]; | 
 |         WCHAR wszHeaderCharset[MAX_MIMECSET_NAME]; | 
 |         WCHAR wszBodyCharset[MAX_MIMECSET_NAME]; | 
 |         WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME]; | 
 |         WCHAR wszProportionalFont[MAX_MIMEFACE_NAME]; | 
 |         BYTE bGDICharset; | 
 |     } MIMECPINFO, *PMIMECPINFO; | 
 |  | 
 |     typedef struct tagMIMECSETINFO | 
 |     { | 
 |         UINT uiCodePage; | 
 |         UINT uiInternetEncoding; | 
 |         WCHAR wszCharset[MAX_MIMECSET_NAME]; | 
 |     } MIMECSETINFO, *PMIMECSETINFO; | 
 |  | 
 |     HRESULT Clone(  | 
 |         [out] IEnumCodePage **ppEnum); | 
 |  | 
 |     HRESULT Next(       | 
 |         [in] ULONG celt, | 
 |         [out] PMIMECPINFO rgelt, | 
 |         [out] ULONG *pceltFetched); | 
 |  | 
 |     HRESULT Reset(); | 
 |  | 
 |     HRESULT Skip(       | 
 |         [in] ULONG celt); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(d66d6f98-cdaa-11d0-b822-00c04fc9b31f), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IMLangConvertCharset : IUnknown | 
 | { | 
 |     HRESULT Initialize(       | 
 |         [in] UINT uiSrcCodePage, | 
 |         [in] UINT uiDstCodePage, | 
 |         [in] DWORD dwProperty); | 
 |  | 
 |     HRESULT GetSourceCodePage(       | 
 |         [out] UINT *puiSrcCodePage); | 
 |  | 
 |     HRESULT GetDestinationCodePage(       | 
 |         [out] UINT *puiDstCodePage); | 
 |  | 
 |     HRESULT GetProperty(       | 
 |         [out] DWORD *pdwProperty); | 
 |  | 
 |     HRESULT DoConversion(       | 
 |         [in] BYTE *pSrcStr, | 
 |         [in,out] UINT *pcSrcSize, | 
 |         [in] BYTE *pDstStr, | 
 |         [in,out] UINT *pcDstSize); | 
 |  | 
 |     HRESULT DoConversionToUnicode(       | 
 |         [in] CHAR *pSrcStr, | 
 |         [in,out] UINT *pcSrcSize, | 
 |         [in] WCHAR *pDstStr, | 
 |         [in,out] UINT *pcDstSize); | 
 |  | 
 |     HRESULT DoConversionFromUnicode(       | 
 |         [in] WCHAR *pSrcStr, | 
 |         [in,out] UINT *pcSrcSize, | 
 |         [in] CHAR *pDstStr, | 
 |         [in,out] UINT *pcDstSize); | 
 | } | 
 |  | 
 | [ | 
 |     uuid(d66d6f99-cdaa-11d0-b822-00c04fc9b31f) | 
 | ] | 
 | coclass CMLangConvertCharset | 
 | { | 
 |     [default] interface IMLangConvertCharset; | 
 | }; | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(3dc39d1d-c030-11d0-b81b-00c04fc9b31f), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IEnumRfc1766 : IUnknown | 
 | { | 
 |     const USHORT MAX_RFC1766_NAME = 6; | 
 |     const USHORT MAX_LOCALE_NAME = 32; | 
 |  | 
 |     typedef struct tagRFC1766INFO | 
 |     { | 
 |         LCID lcid; | 
 |         WCHAR wszRfc1766[MAX_RFC1766_NAME]; | 
 |         WCHAR wszLocaleName[MAX_LOCALE_NAME]; | 
 |     } RFC1766INFO, *PRFC1766INFO; | 
 |  | 
 |     HRESULT Clone(  | 
 |         [out] IEnumRfc1766 **ppEnum); | 
 |  | 
 |     HRESULT Next(       | 
 |         [in] ULONG celt, | 
 |         [out] PRFC1766INFO rgelt, | 
 |         [out] ULONG *pceltFetched); | 
 |  | 
 |     HRESULT Reset(); | 
 |  | 
 |     HRESULT Skip(       | 
 |         [in] ULONG celt); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(275c23e1-3747-11d0-9fea-00aa003f8646), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IMultiLanguage : IUnknown | 
 | { | 
 |     HRESULT GetNumberOfCodePageInfo(       | 
 |         [out] UINT *pcCodePage); | 
 |  | 
 |     HRESULT GetCodePageInfo(       | 
 |         [in] UINT uiCodePage, | 
 |         [out] PMIMECPINFO pCodePageInfo); | 
 |  | 
 |     HRESULT GetFamilyCodePage(       | 
 |         [in] UINT uiCodePage, | 
 |         [out] UINT *puiFamilyCodePage); | 
 |  | 
 |     HRESULT EnumCodePages(       | 
 |         [in] DWORD grfFlags, | 
 |         [out] IEnumCodePage **ppEnumCodePage); | 
 |  | 
 |     HRESULT GetCharsetInfo(       | 
 |         [in] BSTR Charset, | 
 |         [in] PMIMECSETINFO pCharsetInfo); | 
 |  | 
 |     HRESULT IsConvertible(       | 
 |         [in] DWORD dwSrcEncoding, | 
 |         [in] DWORD dwDstEncoding); | 
 |  | 
 |     HRESULT ConvertString(       | 
 |         [in,out] DWORD *pdwMode, | 
 |         [in] DWORD dwSrcEncoding, | 
 |         [in] DWORD dwDstEncoding, | 
 |         [in] BYTE *pSrcStr, | 
 |         [in,out] UINT *pcSrcSize, | 
 |         [in] BYTE *pDstStr, | 
 |         [in,out] UINT *pcDstSize); | 
 |  | 
 |     HRESULT ConvertStringToUnicode(       | 
 |         [in,out] DWORD *pdwMode, | 
 |         [in] DWORD dwEncoding, | 
 |         [in] CHAR *pSrcStr, | 
 |         [in,out] UINT *pcSrcSize, | 
 |         [in] WCHAR *pDstStr, | 
 |         [in,out] UINT *pcDstSize); | 
 |  | 
 |     HRESULT ConvertStringFromUnicode(       | 
 |         [in,out] DWORD *pdwMode, | 
 |         [in] DWORD dwEncoding, | 
 |         [in] WCHAR *pSrcStr, | 
 |         [in,out] UINT *pcSrcSize, | 
 |         [in] CHAR *pDstStr, | 
 |         [in,out] UINT *pcDstSize); | 
 |  | 
 |     HRESULT ConvertStringReset(); | 
 |  | 
 |     HRESULT GetRfc1766FromLcid(       | 
 |         [in] LCID Locale, | 
 |         [out] BSTR *pbstrRfc1766); | 
 |  | 
 |     HRESULT GetLcidFromRfc1766(       | 
 |         [out] LCID *pLocale, | 
 |         [in] BSTR bstrRfc1766); | 
 |  | 
 |     HRESULT EnumRfc1766(       | 
 |         [out] IEnumRfc1766 **ppEnumRfc1766); | 
 |  | 
 |     HRESULT GetRfc1766Info(       | 
 |         [in] LCID Locale, | 
 |         [out] PRFC1766INFO pRfc1766Info); | 
 |  | 
 |     HRESULT CreateConvertCharset(       | 
 |         [in] UINT uiSrcCodePage, | 
 |         [in] UINT uiDstCodePage, | 
 |         [in] DWORD dwProperty, | 
 |         [out] IMLangConvertCharset **ppMLangConvertCharset); | 
 |  | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(dccfc164-2b38-11d2-b7ec-00c04f8f5d9a), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IMultiLanguage2 : IUnknown | 
 | { | 
 |     typedef struct tagDetectEncodingInfo | 
 |     { | 
 |         UINT nLangID; | 
 |         UINT nCodePage; | 
 |         INT nDocPercent; | 
 |         INT nConfidence; | 
 |     } DetectEncodingInfo, *pDetectEncodingInfo; | 
 |  | 
 |     HRESULT GetNumberOfCodePageInfo(       | 
 |         [out] UINT *pcCodePage); | 
 |  | 
 |     HRESULT GetCodePageInfo(       | 
 |         [in] UINT uiCodePage, | 
 |         [in] LANGID LangId, | 
 |         [out] PMIMECPINFO pCodePageInfo); | 
 |  | 
 |     HRESULT GetFamilyCodePage(       | 
 |         [in] UINT uiCodePage, | 
 |         [out] UINT *puiFamilyCodePage); | 
 |  | 
 |     HRESULT EnumCodePages(       | 
 |         [in] DWORD grfFlags, | 
 |         [in] LANGID LangId, | 
 |         [out] IEnumCodePage **ppEnumCodePage); | 
 |  | 
 |     HRESULT GetCharsetInfo(       | 
 |         [in] BSTR Charset, | 
 |         [in] PMIMECSETINFO pCharsetInfo); | 
 |  | 
 |     HRESULT IsConvertible(       | 
 |         [in] DWORD dwSrcEncoding, | 
 |         [in] DWORD dwDstEncoding); | 
 |  | 
 |     HRESULT ConvertString(       | 
 |         [in,out] DWORD *pdwMode, | 
 |         [in] DWORD dwSrcEncoding, | 
 |         [in] DWORD dwDstEncoding, | 
 |         [in] BYTE *pSrcStr, | 
 |         [in,out] UINT *pcSrcSize, | 
 |         [in] BYTE *pDstStr, | 
 |         [in,out] UINT *pcDstSize); | 
 |  | 
 |     HRESULT ConvertStringToUnicode(       | 
 |         [in,out] DWORD *pdwMode, | 
 |         [in] DWORD dwEncoding, | 
 |         [in] CHAR *pSrcStr, | 
 |         [in,out] UINT *pcSrcSize, | 
 |         [in] WCHAR *pDstStr, | 
 |         [in,out] UINT *pcDstSize); | 
 |  | 
 |     HRESULT ConvertStringFromUnicode(       | 
 |         [in,out] DWORD *pdwMode, | 
 |         [in] DWORD dwEncoding, | 
 |         [in] WCHAR *pSrcStr, | 
 |         [in,out] UINT *pcSrcSize, | 
 |         [in] CHAR *pDstStr, | 
 |         [in,out] UINT *pcDstSize); | 
 |  | 
 |     HRESULT ConvertStringReset(); | 
 |  | 
 |     HRESULT GetRfc1766FromLcid(       | 
 |         [in] LCID Locale, | 
 |         [out] BSTR *pbstrRfc1766); | 
 |  | 
 |     HRESULT GetLcidFromRfc1766(       | 
 |         [out] LCID *pLocale, | 
 |         [in] BSTR bstrRfc1766); | 
 |  | 
 |     HRESULT EnumRfc1766(       | 
 |         [in] LANGID LangId, | 
 |         [out] IEnumRfc1766 **ppEnumRfc1766); | 
 |  | 
 |     HRESULT GetRfc1766Info(       | 
 |         [in] LCID Locale, | 
 |         [in] LANGID LangId, | 
 |         [out] PRFC1766INFO pRfc1766Info); | 
 |  | 
 |     HRESULT CreateConvertCharset(       | 
 |         [in] UINT uiSrcCodePage, | 
 |         [in] UINT uiDstCodePage, | 
 |         [in] DWORD dwProperty, | 
 |         [out] IMLangConvertCharset **ppMLangConvertCharset); | 
 |  | 
 |     HRESULT ConvertStringInIStream(       | 
 |         [in,out] DWORD *pdwMode, | 
 |         [in] DWORD dwFlag, | 
 |         [in] WCHAR *lpFallBack, | 
 |         [in] DWORD dwSrcEncoding, | 
 |         [in] DWORD dwDstEncoding, | 
 |         [in] IStream *pstmIn, | 
 |         [in] IStream *pstmOut); | 
 |  | 
 |     HRESULT ConvertStringToUnicodeEx(       | 
 |         [in,out] DWORD *pdwMode, | 
 |         [in] DWORD dwEncoding, | 
 |         [in] CHAR *pSrcStr, | 
 |         [in,out] UINT *pcSrcSize, | 
 |         [in] WCHAR *pDstStr, | 
 |         [in,out] UINT *pcDstSize, | 
 |         [in] DWORD dwFlag, | 
 |         [in] WCHAR *lpFallBack); | 
 |  | 
 |     HRESULT ConvertStringFromUnicodeEx( | 
 |         [in,out] DWORD *pdwMode, | 
 |         [in] DWORD dwEncoding, | 
 |         [in] WCHAR *pSrcStr, | 
 |         [in,out] UINT *pcSrcSize, | 
 |         [in] CHAR *pDstStr, | 
 |         [in,out] UINT *pcDstSize, | 
 |         [in] DWORD dwFlag, | 
 |         [in] WCHAR *lpFallBack); | 
 |  | 
 |     HRESULT DetectCodepageInIStream(       | 
 |         [in] DWORD dwFlag, | 
 |         [in] DWORD dwPrefWinCodePage, | 
 |         [in] IStream *pstmIn, | 
 |         [in,out] DetectEncodingInfo *lpEncoding, | 
 |         [in,out] INT *pnScores); | 
 |  | 
 |     HRESULT DetectInputCodepage(       | 
 |         [in] DWORD dwFlag, | 
 |         [in] DWORD dwPrefWinCodePage, | 
 |         [in] CHAR *pSrcStr, | 
 |         [in,out] INT *pcSrcSize, | 
 |         [in,out] DetectEncodingInfo *lpEncoding, | 
 |         [in,out] INT *pnScores); | 
 |  | 
 |     HRESULT ValidateCodePage( | 
 |         [in] UINT uiCodePage, | 
 |         [in] HWND hwnd); | 
 |  | 
 |     HRESULT GetCodePageDescription(       | 
 |         [in] UINT uiCodePage, | 
 |         [in] LCID lcid, | 
 |         [in,out,size_is(cchWideChar)] LPWSTR lpWideCharStr, | 
 |         [in] int cchWideChar); | 
 |  | 
 |     HRESULT IsCodePageInstallable( | 
 |         [in] UINT uiCodePage); | 
 |  | 
 |     HRESULT SetMimeDBSource(       | 
 |         [in] MIMECONTF dwSource); | 
 |  | 
 |     HRESULT GetNumberOfScripts(       | 
 |         [out] UINT *pnScripts); | 
 |  | 
 |     HRESULT EnumScripts(       | 
 |         [in] DWORD dwFlags, | 
 |         [in] LANGID LangId, | 
 |         [out] IEnumScript **ppEnumScript); | 
 |  | 
 |     HRESULT ValidateCodePageEx( /* undocumented on MSDN */ | 
 |         [in] UINT uiCodePage, | 
 |         [in] HWND hwnd, | 
 |         [in] DWORD dwfIODControl); | 
 | } | 
 |  | 
 | [ | 
 |     object, | 
 |     uuid(4e5868ab-b157-4623-9acc-6a1d9caebe04), | 
 |     pointer_default(unique) | 
 | ] | 
 | interface IMultiLanguage3 : IMultiLanguage2 | 
 | { | 
 |     typedef [unique] IMultiLanguage3 *LPMULTILANGUAGE3; | 
 |     HRESULT DetectOutboundCodePage( | 
 |         [in] DWORD dwFlags, | 
 |         [in] LPCWSTR lpWideCharStr, | 
 |         [in] UINT cchWideChar, | 
 |         [in] UINT *puiPreferredCodePages, | 
 |         [in] UINT nPreferredCodePages, | 
 |         [in] UINT *puiDetectedCodePages, | 
 |         [in, out] UINT *pnDetectedCodePages, | 
 |         [in] WCHAR *lpSpecialChar); | 
 |  | 
 |     HRESULT DetectOutboundCodePageInIStream( | 
 |         [in] DWORD dwFlags, | 
 |         [in] IStream *pStrIn, | 
 |         [in] UINT *puiPreferredCodePages, | 
 |         [in] UINT nPreferredCodePages, | 
 |         [in] UINT *puiDetectedCodePages, | 
 |         [in, out] UINT *pnDetectedCodePages, | 
 |         [in] WCHAR *lpSpecialChar); | 
 | } | 
 |  | 
 | [ | 
 |     uuid(275C23E2-3747-11d0-9FEA-00AA003f8646) | 
 | ] | 
 | coclass CMultiLanguage | 
 | { | 
 |     [default] interface IMultiLanguage; | 
 |     interface IMLangCodePages; | 
 |     interface IMLangFontLink; | 
 |     /* interface IMLangLineBreakConsole; */ | 
 |     interface IMLangFontLink2; | 
 | } | 
 |  | 
 | cpp_quote("STDAPI LcidToRfc1766A(LCID, LPSTR, INT);") | 
 | cpp_quote("STDAPI LcidToRfc1766W(LCID, LPWSTR, INT);") | 
 | cpp_quote("#define LcidToRfc1766 WINELIB_NAME_AW(LcidToRfc1766)") | 
 |  | 
 | cpp_quote("STDAPI Rfc1766ToLcidA(LCID *, LPCSTR);") | 
 | cpp_quote("STDAPI Rfc1766ToLcidW(LCID *, LPCWSTR);") | 
 | cpp_quote("#define Rfc1766ToLcid WINELIB_NAME_AW(Rfc1766ToLcid)") | 
 |  | 
 | cpp_quote("STDAPI GetGlobalFontLinkObject(void **unknown);") | 
 | cpp_quote("STDAPI IsConvertINetStringAvailable(DWORD, DWORD);") | 
 | cpp_quote("STDAPI ConvertINetString(LPDWORD, DWORD, DWORD, LPCSTR, LPINT, LPSTR, LPINT);") | 
 | cpp_quote("STDAPI ConvertINetMultiByteToUnicode(LPDWORD, DWORD, LPCSTR, LPINT, LPWSTR, LPINT);") | 
 | cpp_quote("STDAPI ConvertINetUnicodeToMultiByte(LPDWORD, DWORD, LPCWSTR, LPINT, LPSTR, LPINT);") |