/*** Autogenerated by WIDL 1.3.20 from mlang.idl - Do not edit ***/

#include <rpc.h>
#include <rpcndr.h>

#ifndef __WIDL_MLANG_H
#define __WIDL_MLANG_H

/* Forward declarations */

#ifndef __IMLangCodePages_FWD_DEFINED__
#define __IMLangCodePages_FWD_DEFINED__
typedef interface IMLangCodePages IMLangCodePages;
#endif

#ifndef __IMLangFontLink_FWD_DEFINED__
#define __IMLangFontLink_FWD_DEFINED__
typedef interface IMLangFontLink IMLangFontLink;
#endif

#ifndef __IEnumScript_FWD_DEFINED__
#define __IEnumScript_FWD_DEFINED__
typedef interface IEnumScript IEnumScript;
#endif

#ifndef __IMLangFontLink2_FWD_DEFINED__
#define __IMLangFontLink2_FWD_DEFINED__
typedef interface IMLangFontLink2 IMLangFontLink2;
#endif

#ifndef __IMLangString_FWD_DEFINED__
#define __IMLangString_FWD_DEFINED__
typedef interface IMLangString IMLangString;
#endif

#ifndef __IMLangLineBreakConsole_FWD_DEFINED__
#define __IMLangLineBreakConsole_FWD_DEFINED__
typedef interface IMLangLineBreakConsole IMLangLineBreakConsole;
#endif

#ifndef __IEnumCodePage_FWD_DEFINED__
#define __IEnumCodePage_FWD_DEFINED__
typedef interface IEnumCodePage IEnumCodePage;
#endif

#ifndef __IMLangConvertCharset_FWD_DEFINED__
#define __IMLangConvertCharset_FWD_DEFINED__
typedef interface IMLangConvertCharset IMLangConvertCharset;
#endif

#ifndef __CMLangConvertCharset_FWD_DEFINED__
#define __CMLangConvertCharset_FWD_DEFINED__
typedef struct CMLangConvertCharset CMLangConvertCharset;
#endif /* defined __CMLangConvertCharset_FWD_DEFINED__ */

#ifndef __IEnumRfc1766_FWD_DEFINED__
#define __IEnumRfc1766_FWD_DEFINED__
typedef interface IEnumRfc1766 IEnumRfc1766;
#endif

#ifndef __IMultiLanguage_FWD_DEFINED__
#define __IMultiLanguage_FWD_DEFINED__
typedef interface IMultiLanguage IMultiLanguage;
#endif

#ifndef __IMultiLanguage2_FWD_DEFINED__
#define __IMultiLanguage2_FWD_DEFINED__
typedef interface IMultiLanguage2 IMultiLanguage2;
#endif

#ifndef __IMultiLanguage3_FWD_DEFINED__
#define __IMultiLanguage3_FWD_DEFINED__
typedef interface IMultiLanguage3 IMultiLanguage3;
#endif

#ifndef __CMultiLanguage_FWD_DEFINED__
#define __CMultiLanguage_FWD_DEFINED__
typedef struct CMultiLanguage CMultiLanguage;
#endif /* defined __CMultiLanguage_FWD_DEFINED__ */

/* Headers for imported files */

#include <unknwn.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __IStream_FWD_DEFINED__
#define __IStream_FWD_DEFINED__
typedef interface IStream IStream;
#endif

#define CPIOD_PEEK          0x40000000
#define CPIOD_FORCE_PROMPT  0x80000000
/*****************************************************************************
 * IMLangCodePages interface
 */
#ifndef __IMLangCodePages_INTERFACE_DEFINED__
#define __IMLangCodePages_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMLangCodePages, 0x359f3443, 0xbd4a, 0x11d0, 0xb1,0x88, 0x00,0xaa,0x00,0x38,0xc9,0x69);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMLangCodePages : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetCharCodePages(
        WCHAR chSrc,
        DWORD *pdwCodePages) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStrCodePages(
        const WCHAR *pszSrc,
        LONG cchSrc,
        DWORD dwPriorityCodePages,
        DWORD *pdwCodePages,
        LONG *pcchCodePages) = 0;

    virtual HRESULT STDMETHODCALLTYPE CodePageToCodePages(
        UINT uCodePage,
        DWORD *pdwCodePages) = 0;

    virtual HRESULT STDMETHODCALLTYPE CodePagesToCodePage(
        DWORD dwCodePages,
        UINT uDefaultCodePage,
        UINT *puCodePage) = 0;

};
#else
typedef struct IMLangCodePagesVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMLangCodePages* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMLangCodePages* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMLangCodePages* This);

    /*** IMLangCodePages methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCharCodePages)(
        IMLangCodePages* This,
        WCHAR chSrc,
        DWORD *pdwCodePages);

    HRESULT (STDMETHODCALLTYPE *GetStrCodePages)(
        IMLangCodePages* This,
        const WCHAR *pszSrc,
        LONG cchSrc,
        DWORD dwPriorityCodePages,
        DWORD *pdwCodePages,
        LONG *pcchCodePages);

    HRESULT (STDMETHODCALLTYPE *CodePageToCodePages)(
        IMLangCodePages* This,
        UINT uCodePage,
        DWORD *pdwCodePages);

    HRESULT (STDMETHODCALLTYPE *CodePagesToCodePage)(
        IMLangCodePages* This,
        DWORD dwCodePages,
        UINT uDefaultCodePage,
        UINT *puCodePage);

    END_INTERFACE
} IMLangCodePagesVtbl;
interface IMLangCodePages {
    CONST_VTBL IMLangCodePagesVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMLangCodePages_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMLangCodePages_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMLangCodePages_Release(This) (This)->lpVtbl->Release(This)
/*** IMLangCodePages methods ***/
#define IMLangCodePages_GetCharCodePages(This,chSrc,pdwCodePages) (This)->lpVtbl->GetCharCodePages(This,chSrc,pdwCodePages)
#define IMLangCodePages_GetStrCodePages(This,pszSrc,cchSrc,dwPriorityCodePages,pdwCodePages,pcchCodePages) (This)->lpVtbl->GetStrCodePages(This,pszSrc,cchSrc,dwPriorityCodePages,pdwCodePages,pcchCodePages)
#define IMLangCodePages_CodePageToCodePages(This,uCodePage,pdwCodePages) (This)->lpVtbl->CodePageToCodePages(This,uCodePage,pdwCodePages)
#define IMLangCodePages_CodePagesToCodePage(This,dwCodePages,uDefaultCodePage,puCodePage) (This)->lpVtbl->CodePagesToCodePage(This,dwCodePages,uDefaultCodePage,puCodePage)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMLangCodePages_GetCharCodePages_Proxy(
    IMLangCodePages* This,
    WCHAR chSrc,
    DWORD *pdwCodePages);
void __RPC_STUB IMLangCodePages_GetCharCodePages_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangCodePages_GetStrCodePages_Proxy(
    IMLangCodePages* This,
    const WCHAR *pszSrc,
    LONG cchSrc,
    DWORD dwPriorityCodePages,
    DWORD *pdwCodePages,
    LONG *pcchCodePages);
void __RPC_STUB IMLangCodePages_GetStrCodePages_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangCodePages_CodePageToCodePages_Proxy(
    IMLangCodePages* This,
    UINT uCodePage,
    DWORD *pdwCodePages);
void __RPC_STUB IMLangCodePages_CodePageToCodePages_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangCodePages_CodePagesToCodePage_Proxy(
    IMLangCodePages* This,
    DWORD dwCodePages,
    UINT uDefaultCodePage,
    UINT *puCodePage);
void __RPC_STUB IMLangCodePages_CodePagesToCodePage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMLangCodePages_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMLangFontLink interface
 */
#ifndef __IMLangFontLink_INTERFACE_DEFINED__
#define __IMLangFontLink_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMLangFontLink, 0x359f3441, 0xbd4a, 0x11d0, 0xb1,0x88, 0x00,0xaa,0x00,0x38,0xc9,0x69);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMLangFontLink : public IMLangCodePages
{
    virtual HRESULT STDMETHODCALLTYPE GetFontCodePages(
        HDC hDC,
        HFONT hFont,
        DWORD *pdwCodePages) = 0;

    virtual HRESULT STDMETHODCALLTYPE MapFont(
        HDC hDC,
        DWORD dwCodePages,
        HFONT hSrcFont,
        HFONT *phDestFont) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReleaseFont(
        HFONT hFont) = 0;

    virtual HRESULT STDMETHODCALLTYPE ResetFontMapping(
        ) = 0;

};
#else
typedef struct IMLangFontLinkVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMLangFontLink* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMLangFontLink* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMLangFontLink* This);

    /*** IMLangCodePages methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCharCodePages)(
        IMLangFontLink* This,
        WCHAR chSrc,
        DWORD *pdwCodePages);

    HRESULT (STDMETHODCALLTYPE *GetStrCodePages)(
        IMLangFontLink* This,
        const WCHAR *pszSrc,
        LONG cchSrc,
        DWORD dwPriorityCodePages,
        DWORD *pdwCodePages,
        LONG *pcchCodePages);

    HRESULT (STDMETHODCALLTYPE *CodePageToCodePages)(
        IMLangFontLink* This,
        UINT uCodePage,
        DWORD *pdwCodePages);

    HRESULT (STDMETHODCALLTYPE *CodePagesToCodePage)(
        IMLangFontLink* This,
        DWORD dwCodePages,
        UINT uDefaultCodePage,
        UINT *puCodePage);

    /*** IMLangFontLink methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFontCodePages)(
        IMLangFontLink* This,
        HDC hDC,
        HFONT hFont,
        DWORD *pdwCodePages);

    HRESULT (STDMETHODCALLTYPE *MapFont)(
        IMLangFontLink* This,
        HDC hDC,
        DWORD dwCodePages,
        HFONT hSrcFont,
        HFONT *phDestFont);

    HRESULT (STDMETHODCALLTYPE *ReleaseFont)(
        IMLangFontLink* This,
        HFONT hFont);

    HRESULT (STDMETHODCALLTYPE *ResetFontMapping)(
        IMLangFontLink* This);

    END_INTERFACE
} IMLangFontLinkVtbl;
interface IMLangFontLink {
    CONST_VTBL IMLangFontLinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMLangFontLink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMLangFontLink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMLangFontLink_Release(This) (This)->lpVtbl->Release(This)
/*** IMLangCodePages methods ***/
#define IMLangFontLink_GetCharCodePages(This,chSrc,pdwCodePages) (This)->lpVtbl->GetCharCodePages(This,chSrc,pdwCodePages)
#define IMLangFontLink_GetStrCodePages(This,pszSrc,cchSrc,dwPriorityCodePages,pdwCodePages,pcchCodePages) (This)->lpVtbl->GetStrCodePages(This,pszSrc,cchSrc,dwPriorityCodePages,pdwCodePages,pcchCodePages)
#define IMLangFontLink_CodePageToCodePages(This,uCodePage,pdwCodePages) (This)->lpVtbl->CodePageToCodePages(This,uCodePage,pdwCodePages)
#define IMLangFontLink_CodePagesToCodePage(This,dwCodePages,uDefaultCodePage,puCodePage) (This)->lpVtbl->CodePagesToCodePage(This,dwCodePages,uDefaultCodePage,puCodePage)
/*** IMLangFontLink methods ***/
#define IMLangFontLink_GetFontCodePages(This,hDC,hFont,pdwCodePages) (This)->lpVtbl->GetFontCodePages(This,hDC,hFont,pdwCodePages)
#define IMLangFontLink_MapFont(This,hDC,dwCodePages,hSrcFont,phDestFont) (This)->lpVtbl->MapFont(This,hDC,dwCodePages,hSrcFont,phDestFont)
#define IMLangFontLink_ReleaseFont(This,hFont) (This)->lpVtbl->ReleaseFont(This,hFont)
#define IMLangFontLink_ResetFontMapping(This) (This)->lpVtbl->ResetFontMapping(This)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMLangFontLink_GetFontCodePages_Proxy(
    IMLangFontLink* This,
    HDC hDC,
    HFONT hFont,
    DWORD *pdwCodePages);
void __RPC_STUB IMLangFontLink_GetFontCodePages_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangFontLink_MapFont_Proxy(
    IMLangFontLink* This,
    HDC hDC,
    DWORD dwCodePages,
    HFONT hSrcFont,
    HFONT *phDestFont);
void __RPC_STUB IMLangFontLink_MapFont_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangFontLink_ReleaseFont_Proxy(
    IMLangFontLink* This,
    HFONT hFont);
void __RPC_STUB IMLangFontLink_ReleaseFont_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangFontLink_ResetFontMapping_Proxy(
    IMLangFontLink* This);
void __RPC_STUB IMLangFontLink_ResetFontMapping_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMLangFontLink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IEnumScript interface
 */
#ifndef __IEnumScript_INTERFACE_DEFINED__
#define __IEnumScript_INTERFACE_DEFINED__

#define MAX_SCRIPT_NAME (48)

#define 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[32];
} SCRIPTFONTINFO;
typedef struct tagSCRIPFONTINFO *PSCRIPTFONTINFO;
typedef struct tagSCRIPTINFO {
    SCRIPT_ID ScriptId;
    UINT uiCodePage;
    WCHAR wszDescription[48];
    WCHAR wszFixedWidthFont[32];
    WCHAR wszProportionalFont[32];
} SCRIPTINFO;
typedef struct tagSCRIPTINFO *PSCRIPTINFO;
DEFINE_GUID(IID_IEnumScript, 0xae5f1430, 0x388b, 0x11d2, 0x83,0x80, 0x00,0xc0,0x4f,0x8f,0x5d,0xa1);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IEnumScript : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumScript **ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG celt,
        PSCRIPTINFO rgelt,
        ULONG *pceltFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG celt) = 0;

};
#else
typedef struct IEnumScriptVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumScript* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumScript* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumScript* This);

    /*** IEnumScript methods ***/
    HRESULT (STDMETHODCALLTYPE *Clone)(
        IEnumScript* This,
        IEnumScript **ppEnum);

    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumScript* This,
        ULONG celt,
        PSCRIPTINFO rgelt,
        ULONG *pceltFetched);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumScript* This);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IEnumScript* This,
        ULONG celt);

    END_INTERFACE
} IEnumScriptVtbl;
interface IEnumScript {
    CONST_VTBL IEnumScriptVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IEnumScript_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumScript_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumScript_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumScript methods ***/
#define IEnumScript_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
#define IEnumScript_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
#define IEnumScript_Reset(This) (This)->lpVtbl->Reset(This)
#define IEnumScript_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
#endif

#endif

HRESULT STDMETHODCALLTYPE IEnumScript_Clone_Proxy(
    IEnumScript* This,
    IEnumScript **ppEnum);
void __RPC_STUB IEnumScript_Clone_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IEnumScript_Next_Proxy(
    IEnumScript* This,
    ULONG celt,
    PSCRIPTINFO rgelt,
    ULONG *pceltFetched);
void __RPC_STUB IEnumScript_Next_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IEnumScript_Reset_Proxy(
    IEnumScript* This);
void __RPC_STUB IEnumScript_Reset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IEnumScript_Skip_Proxy(
    IEnumScript* This,
    ULONG celt);
void __RPC_STUB IEnumScript_Skip_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IEnumScript_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMLangFontLink2 interface
 */
#ifndef __IMLangFontLink2_INTERFACE_DEFINED__
#define __IMLangFontLink2_INTERFACE_DEFINED__

typedef struct tagUNICODERANGE {
    WCHAR wcFrom;
    WCHAR wcTo;
} UNICODERANGE;
typedef IMLangFontLink2 *PMLANGFONTLINK2;
DEFINE_GUID(IID_IMLangFontLink2, 0xdccfc162, 0x2b38, 0x11d2, 0xb7,0xec, 0x00,0xc0,0x4f,0x8f,0x5d,0x9a);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMLangFontLink2 : public IMLangCodePages
{
    virtual HRESULT STDMETHODCALLTYPE GetFontCodePages(
        HDC hDC,
        HFONT hFont,
        DWORD *pdwCodePages) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReleaseFont(
        HFONT hFont) = 0;

    virtual HRESULT STDMETHODCALLTYPE ResetFontMapping(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE MapFont(
        HDC hDC,
        DWORD dwCodePages,
        WCHAR chSrc,
        HFONT *pFont) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFontUnicodeRanges(
        HDC hDC,
        UINT *puiRanges,
        UNICODERANGE *pUranges) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetScriptFontInfo(
        SCRIPT_ID sid,
        DWORD dwFlags,
        UINT *puiFonts,
        SCRIPTFONTINFO *pScriptFont) = 0;

    virtual HRESULT STDMETHODCALLTYPE CodePageToScriptID(
        UINT uiCodePage,
        SCRIPT_ID *pSid) = 0;

};
#else
typedef struct IMLangFontLink2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMLangFontLink2* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMLangFontLink2* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMLangFontLink2* This);

    /*** IMLangCodePages methods ***/
    HRESULT (STDMETHODCALLTYPE *GetCharCodePages)(
        IMLangFontLink2* This,
        WCHAR chSrc,
        DWORD *pdwCodePages);

    HRESULT (STDMETHODCALLTYPE *GetStrCodePages)(
        IMLangFontLink2* This,
        const WCHAR *pszSrc,
        LONG cchSrc,
        DWORD dwPriorityCodePages,
        DWORD *pdwCodePages,
        LONG *pcchCodePages);

    HRESULT (STDMETHODCALLTYPE *CodePageToCodePages)(
        IMLangFontLink2* This,
        UINT uCodePage,
        DWORD *pdwCodePages);

    HRESULT (STDMETHODCALLTYPE *CodePagesToCodePage)(
        IMLangFontLink2* This,
        DWORD dwCodePages,
        UINT uDefaultCodePage,
        UINT *puCodePage);

    /*** IMLangFontLink2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFontCodePages)(
        IMLangFontLink2* This,
        HDC hDC,
        HFONT hFont,
        DWORD *pdwCodePages);

    HRESULT (STDMETHODCALLTYPE *ReleaseFont)(
        IMLangFontLink2* This,
        HFONT hFont);

    HRESULT (STDMETHODCALLTYPE *ResetFontMapping)(
        IMLangFontLink2* This);

    HRESULT (STDMETHODCALLTYPE *MapFont)(
        IMLangFontLink2* This,
        HDC hDC,
        DWORD dwCodePages,
        WCHAR chSrc,
        HFONT *pFont);

    HRESULT (STDMETHODCALLTYPE *GetFontUnicodeRanges)(
        IMLangFontLink2* This,
        HDC hDC,
        UINT *puiRanges,
        UNICODERANGE *pUranges);

    HRESULT (STDMETHODCALLTYPE *GetScriptFontInfo)(
        IMLangFontLink2* This,
        SCRIPT_ID sid,
        DWORD dwFlags,
        UINT *puiFonts,
        SCRIPTFONTINFO *pScriptFont);

    HRESULT (STDMETHODCALLTYPE *CodePageToScriptID)(
        IMLangFontLink2* This,
        UINT uiCodePage,
        SCRIPT_ID *pSid);

    END_INTERFACE
} IMLangFontLink2Vtbl;
interface IMLangFontLink2 {
    CONST_VTBL IMLangFontLink2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMLangFontLink2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMLangFontLink2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMLangFontLink2_Release(This) (This)->lpVtbl->Release(This)
/*** IMLangCodePages methods ***/
#define IMLangFontLink2_GetCharCodePages(This,chSrc,pdwCodePages) (This)->lpVtbl->GetCharCodePages(This,chSrc,pdwCodePages)
#define IMLangFontLink2_GetStrCodePages(This,pszSrc,cchSrc,dwPriorityCodePages,pdwCodePages,pcchCodePages) (This)->lpVtbl->GetStrCodePages(This,pszSrc,cchSrc,dwPriorityCodePages,pdwCodePages,pcchCodePages)
#define IMLangFontLink2_CodePageToCodePages(This,uCodePage,pdwCodePages) (This)->lpVtbl->CodePageToCodePages(This,uCodePage,pdwCodePages)
#define IMLangFontLink2_CodePagesToCodePage(This,dwCodePages,uDefaultCodePage,puCodePage) (This)->lpVtbl->CodePagesToCodePage(This,dwCodePages,uDefaultCodePage,puCodePage)
/*** IMLangFontLink2 methods ***/
#define IMLangFontLink2_GetFontCodePages(This,hDC,hFont,pdwCodePages) (This)->lpVtbl->GetFontCodePages(This,hDC,hFont,pdwCodePages)
#define IMLangFontLink2_ReleaseFont(This,hFont) (This)->lpVtbl->ReleaseFont(This,hFont)
#define IMLangFontLink2_ResetFontMapping(This) (This)->lpVtbl->ResetFontMapping(This)
#define IMLangFontLink2_MapFont(This,hDC,dwCodePages,chSrc,pFont) (This)->lpVtbl->MapFont(This,hDC,dwCodePages,chSrc,pFont)
#define IMLangFontLink2_GetFontUnicodeRanges(This,hDC,puiRanges,pUranges) (This)->lpVtbl->GetFontUnicodeRanges(This,hDC,puiRanges,pUranges)
#define IMLangFontLink2_GetScriptFontInfo(This,sid,dwFlags,puiFonts,pScriptFont) (This)->lpVtbl->GetScriptFontInfo(This,sid,dwFlags,puiFonts,pScriptFont)
#define IMLangFontLink2_CodePageToScriptID(This,uiCodePage,pSid) (This)->lpVtbl->CodePageToScriptID(This,uiCodePage,pSid)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMLangFontLink2_GetFontCodePages_Proxy(
    IMLangFontLink2* This,
    HDC hDC,
    HFONT hFont,
    DWORD *pdwCodePages);
void __RPC_STUB IMLangFontLink2_GetFontCodePages_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangFontLink2_ReleaseFont_Proxy(
    IMLangFontLink2* This,
    HFONT hFont);
void __RPC_STUB IMLangFontLink2_ReleaseFont_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangFontLink2_ResetFontMapping_Proxy(
    IMLangFontLink2* This);
void __RPC_STUB IMLangFontLink2_ResetFontMapping_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangFontLink2_MapFont_Proxy(
    IMLangFontLink2* This,
    HDC hDC,
    DWORD dwCodePages,
    WCHAR chSrc,
    HFONT *pFont);
void __RPC_STUB IMLangFontLink2_MapFont_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangFontLink2_GetFontUnicodeRanges_Proxy(
    IMLangFontLink2* This,
    HDC hDC,
    UINT *puiRanges,
    UNICODERANGE *pUranges);
void __RPC_STUB IMLangFontLink2_GetFontUnicodeRanges_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangFontLink2_GetScriptFontInfo_Proxy(
    IMLangFontLink2* This,
    SCRIPT_ID sid,
    DWORD dwFlags,
    UINT *puiFonts,
    SCRIPTFONTINFO *pScriptFont);
void __RPC_STUB IMLangFontLink2_GetScriptFontInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangFontLink2_CodePageToScriptID_Proxy(
    IMLangFontLink2* This,
    UINT uiCodePage,
    SCRIPT_ID *pSid);
void __RPC_STUB IMLangFontLink2_CodePageToScriptID_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMLangFontLink2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMLangString interface
 */
#ifndef __IMLangString_INTERFACE_DEFINED__
#define __IMLangString_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMLangString, 0xc04d65ce, 0xb70d, 0x11d0, 0xb1,0x88, 0x00,0xaa,0x00,0x38,0xc9,0x69);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMLangString : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Sync(
        BOOL fNoAccess) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLength(
        LONG *plLen) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMLStr(
        LONG lDestPos,
        LONG lDestLen,
        IUnknown *pSrcMLStr,
        LONG lSrcPos,
        LONG lSrcLen) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMLStr(
        LONG lSrcPos,
        LONG lSrcLen,
        IUnknown *pUnkOuter,
        DWORD dwClsContext,
        const IID *piid,
        IUnknown **ppDestMLStr,
        LONG *plDestPos,
        LONG *plDestLen) = 0;

};
#else
typedef struct IMLangStringVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMLangString* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMLangString* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMLangString* This);

    /*** IMLangString methods ***/
    HRESULT (STDMETHODCALLTYPE *Sync)(
        IMLangString* This,
        BOOL fNoAccess);

    HRESULT (STDMETHODCALLTYPE *GetLength)(
        IMLangString* This,
        LONG *plLen);

    HRESULT (STDMETHODCALLTYPE *SetMLStr)(
        IMLangString* This,
        LONG lDestPos,
        LONG lDestLen,
        IUnknown *pSrcMLStr,
        LONG lSrcPos,
        LONG lSrcLen);

    HRESULT (STDMETHODCALLTYPE *GetMLStr)(
        IMLangString* This,
        LONG lSrcPos,
        LONG lSrcLen,
        IUnknown *pUnkOuter,
        DWORD dwClsContext,
        const IID *piid,
        IUnknown **ppDestMLStr,
        LONG *plDestPos,
        LONG *plDestLen);

    END_INTERFACE
} IMLangStringVtbl;
interface IMLangString {
    CONST_VTBL IMLangStringVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMLangString_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMLangString_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMLangString_Release(This) (This)->lpVtbl->Release(This)
/*** IMLangString methods ***/
#define IMLangString_Sync(This,fNoAccess) (This)->lpVtbl->Sync(This,fNoAccess)
#define IMLangString_GetLength(This,plLen) (This)->lpVtbl->GetLength(This,plLen)
#define IMLangString_SetMLStr(This,lDestPos,lDestLen,pSrcMLStr,lSrcPos,lSrcLen) (This)->lpVtbl->SetMLStr(This,lDestPos,lDestLen,pSrcMLStr,lSrcPos,lSrcLen)
#define IMLangString_GetMLStr(This,lSrcPos,lSrcLen,pUnkOuter,dwClsContext,piid,ppDestMLStr,plDestPos,plDestLen) (This)->lpVtbl->GetMLStr(This,lSrcPos,lSrcLen,pUnkOuter,dwClsContext,piid,ppDestMLStr,plDestPos,plDestLen)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMLangString_Sync_Proxy(
    IMLangString* This,
    BOOL fNoAccess);
void __RPC_STUB IMLangString_Sync_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangString_GetLength_Proxy(
    IMLangString* This,
    LONG *plLen);
void __RPC_STUB IMLangString_GetLength_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangString_SetMLStr_Proxy(
    IMLangString* This,
    LONG lDestPos,
    LONG lDestLen,
    IUnknown *pSrcMLStr,
    LONG lSrcPos,
    LONG lSrcLen);
void __RPC_STUB IMLangString_SetMLStr_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangString_GetMLStr_Proxy(
    IMLangString* This,
    LONG lSrcPos,
    LONG lSrcLen,
    IUnknown *pUnkOuter,
    DWORD dwClsContext,
    const IID *piid,
    IUnknown **ppDestMLStr,
    LONG *plDestPos,
    LONG *plDestLen);
void __RPC_STUB IMLangString_GetMLStr_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMLangString_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMLangLineBreakConsole interface
 */
#ifndef __IMLangLineBreakConsole_INTERFACE_DEFINED__
#define __IMLangLineBreakConsole_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMLangLineBreakConsole, 0xf5be2ee1, 0xbfd7, 0x11d0, 0xb1,0x88, 0x00,0xaa,0x00,0x38,0xc9,0x69);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMLangLineBreakConsole : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE BreakLineML(
        IMLangString *pSrcMLStr,
        LONG lSrcPos,
        LONG lSrcLen,
        LONG cMinColumns,
        LONG cMaxColumns,
        LONG *plLineLen,
        LONG *plSkipLen) = 0;

    virtual HRESULT STDMETHODCALLTYPE BreakLineW(
        LCID locale,
        const WCHAR *pszSrc,
        LONG cchSrc,
        LONG cMaxColumns,
        LONG *pcchLine,
        LONG *pcchSkip) = 0;

    virtual HRESULT STDMETHODCALLTYPE BreakLineA(
        LCID locale,
        UINT uCodePage,
        const CHAR *pszSrc,
        LONG cchSrc,
        LONG cMaxColumns,
        LONG *pcchLine,
        LONG *pcchSkip) = 0;

};
#else
typedef struct IMLangLineBreakConsoleVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMLangLineBreakConsole* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMLangLineBreakConsole* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMLangLineBreakConsole* This);

    /*** IMLangLineBreakConsole methods ***/
    HRESULT (STDMETHODCALLTYPE *BreakLineML)(
        IMLangLineBreakConsole* This,
        IMLangString *pSrcMLStr,
        LONG lSrcPos,
        LONG lSrcLen,
        LONG cMinColumns,
        LONG cMaxColumns,
        LONG *plLineLen,
        LONG *plSkipLen);

    HRESULT (STDMETHODCALLTYPE *BreakLineW)(
        IMLangLineBreakConsole* This,
        LCID locale,
        const WCHAR *pszSrc,
        LONG cchSrc,
        LONG cMaxColumns,
        LONG *pcchLine,
        LONG *pcchSkip);

    HRESULT (STDMETHODCALLTYPE *BreakLineA)(
        IMLangLineBreakConsole* This,
        LCID locale,
        UINT uCodePage,
        const CHAR *pszSrc,
        LONG cchSrc,
        LONG cMaxColumns,
        LONG *pcchLine,
        LONG *pcchSkip);

    END_INTERFACE
} IMLangLineBreakConsoleVtbl;
interface IMLangLineBreakConsole {
    CONST_VTBL IMLangLineBreakConsoleVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMLangLineBreakConsole_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMLangLineBreakConsole_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMLangLineBreakConsole_Release(This) (This)->lpVtbl->Release(This)
/*** IMLangLineBreakConsole methods ***/
#define IMLangLineBreakConsole_BreakLineML(This,pSrcMLStr,lSrcPos,lSrcLen,cMinColumns,cMaxColumns,plLineLen,plSkipLen) (This)->lpVtbl->BreakLineML(This,pSrcMLStr,lSrcPos,lSrcLen,cMinColumns,cMaxColumns,plLineLen,plSkipLen)
#define IMLangLineBreakConsole_BreakLineW(This,locale,pszSrc,cchSrc,cMaxColumns,pcchLine,pcchSkip) (This)->lpVtbl->BreakLineW(This,locale,pszSrc,cchSrc,cMaxColumns,pcchLine,pcchSkip)
#define IMLangLineBreakConsole_BreakLineA(This,locale,uCodePage,pszSrc,cchSrc,cMaxColumns,pcchLine,pcchSkip) (This)->lpVtbl->BreakLineA(This,locale,uCodePage,pszSrc,cchSrc,cMaxColumns,pcchLine,pcchSkip)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMLangLineBreakConsole_BreakLineML_Proxy(
    IMLangLineBreakConsole* This,
    IMLangString *pSrcMLStr,
    LONG lSrcPos,
    LONG lSrcLen,
    LONG cMinColumns,
    LONG cMaxColumns,
    LONG *plLineLen,
    LONG *plSkipLen);
void __RPC_STUB IMLangLineBreakConsole_BreakLineML_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangLineBreakConsole_BreakLineW_Proxy(
    IMLangLineBreakConsole* This,
    LCID locale,
    const WCHAR *pszSrc,
    LONG cchSrc,
    LONG cMaxColumns,
    LONG *pcchLine,
    LONG *pcchSkip);
void __RPC_STUB IMLangLineBreakConsole_BreakLineW_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangLineBreakConsole_BreakLineA_Proxy(
    IMLangLineBreakConsole* This,
    LCID locale,
    UINT uCodePage,
    const CHAR *pszSrc,
    LONG cchSrc,
    LONG cMaxColumns,
    LONG *pcchLine,
    LONG *pcchSkip);
void __RPC_STUB IMLangLineBreakConsole_BreakLineA_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMLangLineBreakConsole_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IEnumCodePage interface
 */
#ifndef __IEnumCodePage_INTERFACE_DEFINED__
#define __IEnumCodePage_INTERFACE_DEFINED__

#define MAX_MIMECP_NAME (64)

#define MAX_MIMECSET_NAME (50)

typedef enum tagMIMECONTF {
    MIMECONTF_MAILNEWS = 0x1,
    MIMECONTF_BROWSER = 0x2,
    MIMECONTF_MINIMAL = 0x4,
    MIMECONTF_IMPORT = 0x8,
    MIMECONTF_SAVABLE_MAILNEWS = 0x100,
    MIMECONTF_SAVABLE_BROWSER = 0x200,
    MIMECONTF_EXPORT = 0x400,
    MIMECONTF_PRIVCONVERTER = 0x10000,
    MIMECONTF_VALID = 0x20000,
    MIMECONTF_VALID_NLS = 0x40000,
    MIMECONTF_MIME_IE4 = 0x10000000,
    MIMECONTF_MIME_LATEST = 0x20000000,
    MIMECONTF_MIME_REGISTRY = 0x40000000
} MIMECONTF;
typedef struct tagMIMECPINFO {
    DWORD dwFlags;
    UINT uiCodePage;
    UINT uiFamilyCodePage;
    WCHAR wszDescription[64];
    WCHAR wszWebCharset[50];
    WCHAR wszHeaderCharset[50];
    WCHAR wszBodyCharset[50];
    WCHAR wszFixedWidthFont[32];
    WCHAR wszProportionalFont[32];
    BYTE bGDICharset;
} MIMECPINFO;
typedef struct tagMIMECPINFO *PMIMECPINFO;
typedef struct tagMIMECSETINFO {
    UINT uiCodePage;
    UINT uiInternetEncoding;
    WCHAR wszCharset[50];
} MIMECSETINFO;
typedef struct tagMIMECSETINFO *PMIMECSETINFO;
DEFINE_GUID(IID_IEnumCodePage, 0x275c23e3, 0x3747, 0x11d0, 0x9f,0xea, 0x00,0xaa,0x00,0x3f,0x86,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IEnumCodePage : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumCodePage **ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG celt,
        PMIMECPINFO rgelt,
        ULONG *pceltFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG celt) = 0;

};
#else
typedef struct IEnumCodePageVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumCodePage* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumCodePage* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumCodePage* This);

    /*** IEnumCodePage methods ***/
    HRESULT (STDMETHODCALLTYPE *Clone)(
        IEnumCodePage* This,
        IEnumCodePage **ppEnum);

    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumCodePage* This,
        ULONG celt,
        PMIMECPINFO rgelt,
        ULONG *pceltFetched);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumCodePage* This);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IEnumCodePage* This,
        ULONG celt);

    END_INTERFACE
} IEnumCodePageVtbl;
interface IEnumCodePage {
    CONST_VTBL IEnumCodePageVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IEnumCodePage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumCodePage_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumCodePage_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumCodePage methods ***/
#define IEnumCodePage_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
#define IEnumCodePage_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
#define IEnumCodePage_Reset(This) (This)->lpVtbl->Reset(This)
#define IEnumCodePage_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
#endif

#endif

HRESULT STDMETHODCALLTYPE IEnumCodePage_Clone_Proxy(
    IEnumCodePage* This,
    IEnumCodePage **ppEnum);
void __RPC_STUB IEnumCodePage_Clone_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IEnumCodePage_Next_Proxy(
    IEnumCodePage* This,
    ULONG celt,
    PMIMECPINFO rgelt,
    ULONG *pceltFetched);
void __RPC_STUB IEnumCodePage_Next_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IEnumCodePage_Reset_Proxy(
    IEnumCodePage* This);
void __RPC_STUB IEnumCodePage_Reset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IEnumCodePage_Skip_Proxy(
    IEnumCodePage* This,
    ULONG celt);
void __RPC_STUB IEnumCodePage_Skip_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IEnumCodePage_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMLangConvertCharset interface
 */
#ifndef __IMLangConvertCharset_INTERFACE_DEFINED__
#define __IMLangConvertCharset_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMLangConvertCharset, 0xd66d6f98, 0xcdaa, 0x11d0, 0xb8,0x22, 0x00,0xc0,0x4f,0xc9,0xb3,0x1f);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMLangConvertCharset : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Initialize(
        UINT uiSrcCodePage,
        UINT uiDstCodePage,
        DWORD dwProperty) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSourceCodePage(
        UINT *puiSrcCodePage) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDestinationCodePage(
        UINT *puiDstCodePage) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProperty(
        DWORD *pdwProperty) = 0;

    virtual HRESULT STDMETHODCALLTYPE DoConversion(
        BYTE *pSrcStr,
        UINT *pcSrcSize,
        BYTE *pDstStr,
        UINT *pcDstSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE DoConversionToUnicode(
        CHAR *pSrcStr,
        UINT *pcSrcSize,
        WCHAR *pDstStr,
        UINT *pcDstSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE DoConversionFromUnicode(
        WCHAR *pSrcStr,
        UINT *pcSrcSize,
        CHAR *pDstStr,
        UINT *pcDstSize) = 0;

};
#else
typedef struct IMLangConvertCharsetVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMLangConvertCharset* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMLangConvertCharset* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMLangConvertCharset* This);

    /*** IMLangConvertCharset methods ***/
    HRESULT (STDMETHODCALLTYPE *Initialize)(
        IMLangConvertCharset* This,
        UINT uiSrcCodePage,
        UINT uiDstCodePage,
        DWORD dwProperty);

    HRESULT (STDMETHODCALLTYPE *GetSourceCodePage)(
        IMLangConvertCharset* This,
        UINT *puiSrcCodePage);

    HRESULT (STDMETHODCALLTYPE *GetDestinationCodePage)(
        IMLangConvertCharset* This,
        UINT *puiDstCodePage);

    HRESULT (STDMETHODCALLTYPE *GetProperty)(
        IMLangConvertCharset* This,
        DWORD *pdwProperty);

    HRESULT (STDMETHODCALLTYPE *DoConversion)(
        IMLangConvertCharset* This,
        BYTE *pSrcStr,
        UINT *pcSrcSize,
        BYTE *pDstStr,
        UINT *pcDstSize);

    HRESULT (STDMETHODCALLTYPE *DoConversionToUnicode)(
        IMLangConvertCharset* This,
        CHAR *pSrcStr,
        UINT *pcSrcSize,
        WCHAR *pDstStr,
        UINT *pcDstSize);

    HRESULT (STDMETHODCALLTYPE *DoConversionFromUnicode)(
        IMLangConvertCharset* This,
        WCHAR *pSrcStr,
        UINT *pcSrcSize,
        CHAR *pDstStr,
        UINT *pcDstSize);

    END_INTERFACE
} IMLangConvertCharsetVtbl;
interface IMLangConvertCharset {
    CONST_VTBL IMLangConvertCharsetVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMLangConvertCharset_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMLangConvertCharset_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMLangConvertCharset_Release(This) (This)->lpVtbl->Release(This)
/*** IMLangConvertCharset methods ***/
#define IMLangConvertCharset_Initialize(This,uiSrcCodePage,uiDstCodePage,dwProperty) (This)->lpVtbl->Initialize(This,uiSrcCodePage,uiDstCodePage,dwProperty)
#define IMLangConvertCharset_GetSourceCodePage(This,puiSrcCodePage) (This)->lpVtbl->GetSourceCodePage(This,puiSrcCodePage)
#define IMLangConvertCharset_GetDestinationCodePage(This,puiDstCodePage) (This)->lpVtbl->GetDestinationCodePage(This,puiDstCodePage)
#define IMLangConvertCharset_GetProperty(This,pdwProperty) (This)->lpVtbl->GetProperty(This,pdwProperty)
#define IMLangConvertCharset_DoConversion(This,pSrcStr,pcSrcSize,pDstStr,pcDstSize) (This)->lpVtbl->DoConversion(This,pSrcStr,pcSrcSize,pDstStr,pcDstSize)
#define IMLangConvertCharset_DoConversionToUnicode(This,pSrcStr,pcSrcSize,pDstStr,pcDstSize) (This)->lpVtbl->DoConversionToUnicode(This,pSrcStr,pcSrcSize,pDstStr,pcDstSize)
#define IMLangConvertCharset_DoConversionFromUnicode(This,pSrcStr,pcSrcSize,pDstStr,pcDstSize) (This)->lpVtbl->DoConversionFromUnicode(This,pSrcStr,pcSrcSize,pDstStr,pcDstSize)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMLangConvertCharset_Initialize_Proxy(
    IMLangConvertCharset* This,
    UINT uiSrcCodePage,
    UINT uiDstCodePage,
    DWORD dwProperty);
void __RPC_STUB IMLangConvertCharset_Initialize_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangConvertCharset_GetSourceCodePage_Proxy(
    IMLangConvertCharset* This,
    UINT *puiSrcCodePage);
void __RPC_STUB IMLangConvertCharset_GetSourceCodePage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangConvertCharset_GetDestinationCodePage_Proxy(
    IMLangConvertCharset* This,
    UINT *puiDstCodePage);
void __RPC_STUB IMLangConvertCharset_GetDestinationCodePage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangConvertCharset_GetProperty_Proxy(
    IMLangConvertCharset* This,
    DWORD *pdwProperty);
void __RPC_STUB IMLangConvertCharset_GetProperty_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangConvertCharset_DoConversion_Proxy(
    IMLangConvertCharset* This,
    BYTE *pSrcStr,
    UINT *pcSrcSize,
    BYTE *pDstStr,
    UINT *pcDstSize);
void __RPC_STUB IMLangConvertCharset_DoConversion_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangConvertCharset_DoConversionToUnicode_Proxy(
    IMLangConvertCharset* This,
    CHAR *pSrcStr,
    UINT *pcSrcSize,
    WCHAR *pDstStr,
    UINT *pcDstSize);
void __RPC_STUB IMLangConvertCharset_DoConversionToUnicode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMLangConvertCharset_DoConversionFromUnicode_Proxy(
    IMLangConvertCharset* This,
    WCHAR *pSrcStr,
    UINT *pcSrcSize,
    CHAR *pDstStr,
    UINT *pcDstSize);
void __RPC_STUB IMLangConvertCharset_DoConversionFromUnicode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMLangConvertCharset_INTERFACE_DEFINED__ */

/*****************************************************************************
 * CMLangConvertCharset coclass
 */

DEFINE_GUID(CLSID_CMLangConvertCharset, 0xd66d6f99, 0xcdaa, 0x11d0, 0xb8,0x22, 0x00,0xc0,0x4f,0xc9,0xb3,0x1f);

/*****************************************************************************
 * IEnumRfc1766 interface
 */
#ifndef __IEnumRfc1766_INTERFACE_DEFINED__
#define __IEnumRfc1766_INTERFACE_DEFINED__

#define MAX_RFC1766_NAME (6)

#define MAX_LOCALE_NAME (32)

typedef struct tagRFC1766INFO {
    LCID lcid;
    WCHAR wszRfc1766[6];
    WCHAR wszLocaleName[32];
} RFC1766INFO;
typedef struct tagRFC1766INFO *PRFC1766INFO;
DEFINE_GUID(IID_IEnumRfc1766, 0x3dc39d1d, 0xc030, 0x11d0, 0xb8,0x1b, 0x00,0xc0,0x4f,0xc9,0xb3,0x1f);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IEnumRfc1766 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumRfc1766 **ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG celt,
        PRFC1766INFO rgelt,
        ULONG *pceltFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG celt) = 0;

};
#else
typedef struct IEnumRfc1766Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IEnumRfc1766* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IEnumRfc1766* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IEnumRfc1766* This);

    /*** IEnumRfc1766 methods ***/
    HRESULT (STDMETHODCALLTYPE *Clone)(
        IEnumRfc1766* This,
        IEnumRfc1766 **ppEnum);

    HRESULT (STDMETHODCALLTYPE *Next)(
        IEnumRfc1766* This,
        ULONG celt,
        PRFC1766INFO rgelt,
        ULONG *pceltFetched);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IEnumRfc1766* This);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IEnumRfc1766* This,
        ULONG celt);

    END_INTERFACE
} IEnumRfc1766Vtbl;
interface IEnumRfc1766 {
    CONST_VTBL IEnumRfc1766Vtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IEnumRfc1766_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumRfc1766_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumRfc1766_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumRfc1766 methods ***/
#define IEnumRfc1766_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
#define IEnumRfc1766_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
#define IEnumRfc1766_Reset(This) (This)->lpVtbl->Reset(This)
#define IEnumRfc1766_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
#endif

#endif

HRESULT STDMETHODCALLTYPE IEnumRfc1766_Clone_Proxy(
    IEnumRfc1766* This,
    IEnumRfc1766 **ppEnum);
void __RPC_STUB IEnumRfc1766_Clone_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IEnumRfc1766_Next_Proxy(
    IEnumRfc1766* This,
    ULONG celt,
    PRFC1766INFO rgelt,
    ULONG *pceltFetched);
void __RPC_STUB IEnumRfc1766_Next_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IEnumRfc1766_Reset_Proxy(
    IEnumRfc1766* This);
void __RPC_STUB IEnumRfc1766_Reset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IEnumRfc1766_Skip_Proxy(
    IEnumRfc1766* This,
    ULONG celt);
void __RPC_STUB IEnumRfc1766_Skip_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IEnumRfc1766_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMultiLanguage interface
 */
#ifndef __IMultiLanguage_INTERFACE_DEFINED__
#define __IMultiLanguage_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMultiLanguage, 0x275c23e1, 0x3747, 0x11d0, 0x9f,0xea, 0x00,0xaa,0x00,0x3f,0x86,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMultiLanguage : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetNumberOfCodePageInfo(
        UINT *pcCodePage) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCodePageInfo(
        UINT uiCodePage,
        PMIMECPINFO pCodePageInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFamilyCodePage(
        UINT uiCodePage,
        UINT *puiFamilyCodePage) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumCodePages(
        DWORD grfFlags,
        IEnumCodePage **ppEnumCodePage) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCharsetInfo(
        BSTR Charset,
        PMIMECSETINFO pCharsetInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsConvertible(
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertString(
        DWORD *pdwMode,
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding,
        BYTE *pSrcStr,
        UINT *pcSrcSize,
        BYTE *pDstStr,
        UINT *pcDstSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertStringToUnicode(
        DWORD *pdwMode,
        DWORD dwEncoding,
        CHAR *pSrcStr,
        UINT *pcSrcSize,
        WCHAR *pDstStr,
        UINT *pcDstSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertStringFromUnicode(
        DWORD *pdwMode,
        DWORD dwEncoding,
        WCHAR *pSrcStr,
        UINT *pcSrcSize,
        CHAR *pDstStr,
        UINT *pcDstSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertStringReset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRfc1766FromLcid(
        LCID Locale,
        BSTR *pbstrRfc1766) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLcidFromRfc1766(
        LCID *pLocale,
        BSTR bstrRfc1766) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumRfc1766(
        IEnumRfc1766 **ppEnumRfc1766) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRfc1766Info(
        LCID Locale,
        PRFC1766INFO pRfc1766Info) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateConvertCharset(
        UINT uiSrcCodePage,
        UINT uiDstCodePage,
        DWORD dwProperty,
        IMLangConvertCharset **ppMLangConvertCharset) = 0;

};
#else
typedef struct IMultiLanguageVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMultiLanguage* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMultiLanguage* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMultiLanguage* This);

    /*** IMultiLanguage methods ***/
    HRESULT (STDMETHODCALLTYPE *GetNumberOfCodePageInfo)(
        IMultiLanguage* This,
        UINT *pcCodePage);

    HRESULT (STDMETHODCALLTYPE *GetCodePageInfo)(
        IMultiLanguage* This,
        UINT uiCodePage,
        PMIMECPINFO pCodePageInfo);

    HRESULT (STDMETHODCALLTYPE *GetFamilyCodePage)(
        IMultiLanguage* This,
        UINT uiCodePage,
        UINT *puiFamilyCodePage);

    HRESULT (STDMETHODCALLTYPE *EnumCodePages)(
        IMultiLanguage* This,
        DWORD grfFlags,
        IEnumCodePage **ppEnumCodePage);

    HRESULT (STDMETHODCALLTYPE *GetCharsetInfo)(
        IMultiLanguage* This,
        BSTR Charset,
        PMIMECSETINFO pCharsetInfo);

    HRESULT (STDMETHODCALLTYPE *IsConvertible)(
        IMultiLanguage* This,
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding);

    HRESULT (STDMETHODCALLTYPE *ConvertString)(
        IMultiLanguage* This,
        DWORD *pdwMode,
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding,
        BYTE *pSrcStr,
        UINT *pcSrcSize,
        BYTE *pDstStr,
        UINT *pcDstSize);

    HRESULT (STDMETHODCALLTYPE *ConvertStringToUnicode)(
        IMultiLanguage* This,
        DWORD *pdwMode,
        DWORD dwEncoding,
        CHAR *pSrcStr,
        UINT *pcSrcSize,
        WCHAR *pDstStr,
        UINT *pcDstSize);

    HRESULT (STDMETHODCALLTYPE *ConvertStringFromUnicode)(
        IMultiLanguage* This,
        DWORD *pdwMode,
        DWORD dwEncoding,
        WCHAR *pSrcStr,
        UINT *pcSrcSize,
        CHAR *pDstStr,
        UINT *pcDstSize);

    HRESULT (STDMETHODCALLTYPE *ConvertStringReset)(
        IMultiLanguage* This);

    HRESULT (STDMETHODCALLTYPE *GetRfc1766FromLcid)(
        IMultiLanguage* This,
        LCID Locale,
        BSTR *pbstrRfc1766);

    HRESULT (STDMETHODCALLTYPE *GetLcidFromRfc1766)(
        IMultiLanguage* This,
        LCID *pLocale,
        BSTR bstrRfc1766);

    HRESULT (STDMETHODCALLTYPE *EnumRfc1766)(
        IMultiLanguage* This,
        IEnumRfc1766 **ppEnumRfc1766);

    HRESULT (STDMETHODCALLTYPE *GetRfc1766Info)(
        IMultiLanguage* This,
        LCID Locale,
        PRFC1766INFO pRfc1766Info);

    HRESULT (STDMETHODCALLTYPE *CreateConvertCharset)(
        IMultiLanguage* This,
        UINT uiSrcCodePage,
        UINT uiDstCodePage,
        DWORD dwProperty,
        IMLangConvertCharset **ppMLangConvertCharset);

    END_INTERFACE
} IMultiLanguageVtbl;
interface IMultiLanguage {
    CONST_VTBL IMultiLanguageVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMultiLanguage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMultiLanguage_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMultiLanguage_Release(This) (This)->lpVtbl->Release(This)
/*** IMultiLanguage methods ***/
#define IMultiLanguage_GetNumberOfCodePageInfo(This,pcCodePage) (This)->lpVtbl->GetNumberOfCodePageInfo(This,pcCodePage)
#define IMultiLanguage_GetCodePageInfo(This,uiCodePage,pCodePageInfo) (This)->lpVtbl->GetCodePageInfo(This,uiCodePage,pCodePageInfo)
#define IMultiLanguage_GetFamilyCodePage(This,uiCodePage,puiFamilyCodePage) (This)->lpVtbl->GetFamilyCodePage(This,uiCodePage,puiFamilyCodePage)
#define IMultiLanguage_EnumCodePages(This,grfFlags,ppEnumCodePage) (This)->lpVtbl->EnumCodePages(This,grfFlags,ppEnumCodePage)
#define IMultiLanguage_GetCharsetInfo(This,Charset,pCharsetInfo) (This)->lpVtbl->GetCharsetInfo(This,Charset,pCharsetInfo)
#define IMultiLanguage_IsConvertible(This,dwSrcEncoding,dwDstEncoding) (This)->lpVtbl->IsConvertible(This,dwSrcEncoding,dwDstEncoding)
#define IMultiLanguage_ConvertString(This,pdwMode,dwSrcEncoding,dwDstEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize) (This)->lpVtbl->ConvertString(This,pdwMode,dwSrcEncoding,dwDstEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize)
#define IMultiLanguage_ConvertStringToUnicode(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize) (This)->lpVtbl->ConvertStringToUnicode(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize)
#define IMultiLanguage_ConvertStringFromUnicode(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize) (This)->lpVtbl->ConvertStringFromUnicode(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize)
#define IMultiLanguage_ConvertStringReset(This) (This)->lpVtbl->ConvertStringReset(This)
#define IMultiLanguage_GetRfc1766FromLcid(This,Locale,pbstrRfc1766) (This)->lpVtbl->GetRfc1766FromLcid(This,Locale,pbstrRfc1766)
#define IMultiLanguage_GetLcidFromRfc1766(This,pLocale,bstrRfc1766) (This)->lpVtbl->GetLcidFromRfc1766(This,pLocale,bstrRfc1766)
#define IMultiLanguage_EnumRfc1766(This,ppEnumRfc1766) (This)->lpVtbl->EnumRfc1766(This,ppEnumRfc1766)
#define IMultiLanguage_GetRfc1766Info(This,Locale,pRfc1766Info) (This)->lpVtbl->GetRfc1766Info(This,Locale,pRfc1766Info)
#define IMultiLanguage_CreateConvertCharset(This,uiSrcCodePage,uiDstCodePage,dwProperty,ppMLangConvertCharset) (This)->lpVtbl->CreateConvertCharset(This,uiSrcCodePage,uiDstCodePage,dwProperty,ppMLangConvertCharset)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMultiLanguage_GetNumberOfCodePageInfo_Proxy(
    IMultiLanguage* This,
    UINT *pcCodePage);
void __RPC_STUB IMultiLanguage_GetNumberOfCodePageInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_GetCodePageInfo_Proxy(
    IMultiLanguage* This,
    UINT uiCodePage,
    PMIMECPINFO pCodePageInfo);
void __RPC_STUB IMultiLanguage_GetCodePageInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_GetFamilyCodePage_Proxy(
    IMultiLanguage* This,
    UINT uiCodePage,
    UINT *puiFamilyCodePage);
void __RPC_STUB IMultiLanguage_GetFamilyCodePage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_EnumCodePages_Proxy(
    IMultiLanguage* This,
    DWORD grfFlags,
    IEnumCodePage **ppEnumCodePage);
void __RPC_STUB IMultiLanguage_EnumCodePages_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_GetCharsetInfo_Proxy(
    IMultiLanguage* This,
    BSTR Charset,
    PMIMECSETINFO pCharsetInfo);
void __RPC_STUB IMultiLanguage_GetCharsetInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_IsConvertible_Proxy(
    IMultiLanguage* This,
    DWORD dwSrcEncoding,
    DWORD dwDstEncoding);
void __RPC_STUB IMultiLanguage_IsConvertible_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_ConvertString_Proxy(
    IMultiLanguage* This,
    DWORD *pdwMode,
    DWORD dwSrcEncoding,
    DWORD dwDstEncoding,
    BYTE *pSrcStr,
    UINT *pcSrcSize,
    BYTE *pDstStr,
    UINT *pcDstSize);
void __RPC_STUB IMultiLanguage_ConvertString_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_ConvertStringToUnicode_Proxy(
    IMultiLanguage* This,
    DWORD *pdwMode,
    DWORD dwEncoding,
    CHAR *pSrcStr,
    UINT *pcSrcSize,
    WCHAR *pDstStr,
    UINT *pcDstSize);
void __RPC_STUB IMultiLanguage_ConvertStringToUnicode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_ConvertStringFromUnicode_Proxy(
    IMultiLanguage* This,
    DWORD *pdwMode,
    DWORD dwEncoding,
    WCHAR *pSrcStr,
    UINT *pcSrcSize,
    CHAR *pDstStr,
    UINT *pcDstSize);
void __RPC_STUB IMultiLanguage_ConvertStringFromUnicode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_ConvertStringReset_Proxy(
    IMultiLanguage* This);
void __RPC_STUB IMultiLanguage_ConvertStringReset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_GetRfc1766FromLcid_Proxy(
    IMultiLanguage* This,
    LCID Locale,
    BSTR *pbstrRfc1766);
void __RPC_STUB IMultiLanguage_GetRfc1766FromLcid_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_GetLcidFromRfc1766_Proxy(
    IMultiLanguage* This,
    LCID *pLocale,
    BSTR bstrRfc1766);
void __RPC_STUB IMultiLanguage_GetLcidFromRfc1766_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_EnumRfc1766_Proxy(
    IMultiLanguage* This,
    IEnumRfc1766 **ppEnumRfc1766);
void __RPC_STUB IMultiLanguage_EnumRfc1766_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_GetRfc1766Info_Proxy(
    IMultiLanguage* This,
    LCID Locale,
    PRFC1766INFO pRfc1766Info);
void __RPC_STUB IMultiLanguage_GetRfc1766Info_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage_CreateConvertCharset_Proxy(
    IMultiLanguage* This,
    UINT uiSrcCodePage,
    UINT uiDstCodePage,
    DWORD dwProperty,
    IMLangConvertCharset **ppMLangConvertCharset);
void __RPC_STUB IMultiLanguage_CreateConvertCharset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMultiLanguage_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMultiLanguage2 interface
 */
#ifndef __IMultiLanguage2_INTERFACE_DEFINED__
#define __IMultiLanguage2_INTERFACE_DEFINED__

typedef struct tagDetectEncodingInfo {
    UINT nLangID;
    UINT nCodePage;
    INT nDocPercent;
    INT nConfidence;
} DetectEncodingInfo;
typedef struct tagDetectEncodingInfo *pDetectEncodingInfo;
DEFINE_GUID(IID_IMultiLanguage2, 0xdccfc164, 0x2b38, 0x11d2, 0xb7,0xec, 0x00,0xc0,0x4f,0x8f,0x5d,0x9a);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMultiLanguage2 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetNumberOfCodePageInfo(
        UINT *pcCodePage) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCodePageInfo(
        UINT uiCodePage,
        LANGID LangId,
        PMIMECPINFO pCodePageInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFamilyCodePage(
        UINT uiCodePage,
        UINT *puiFamilyCodePage) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumCodePages(
        DWORD grfFlags,
        LANGID LangId,
        IEnumCodePage **ppEnumCodePage) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCharsetInfo(
        BSTR Charset,
        PMIMECSETINFO pCharsetInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsConvertible(
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertString(
        DWORD *pdwMode,
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding,
        BYTE *pSrcStr,
        UINT *pcSrcSize,
        BYTE *pDstStr,
        UINT *pcDstSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertStringToUnicode(
        DWORD *pdwMode,
        DWORD dwEncoding,
        CHAR *pSrcStr,
        UINT *pcSrcSize,
        WCHAR *pDstStr,
        UINT *pcDstSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertStringFromUnicode(
        DWORD *pdwMode,
        DWORD dwEncoding,
        WCHAR *pSrcStr,
        UINT *pcSrcSize,
        CHAR *pDstStr,
        UINT *pcDstSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertStringReset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRfc1766FromLcid(
        LCID Locale,
        BSTR *pbstrRfc1766) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLcidFromRfc1766(
        LCID *pLocale,
        BSTR bstrRfc1766) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumRfc1766(
        LANGID LangId,
        IEnumRfc1766 **ppEnumRfc1766) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRfc1766Info(
        LCID Locale,
        LANGID LangId,
        PRFC1766INFO pRfc1766Info) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateConvertCharset(
        UINT uiSrcCodePage,
        UINT uiDstCodePage,
        DWORD dwProperty,
        IMLangConvertCharset **ppMLangConvertCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertStringInIStream(
        DWORD *pdwMode,
        DWORD dwFlag,
        WCHAR *lpFallBack,
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding,
        IStream *pstmIn,
        IStream *pstmOut) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertStringToUnicodeEx(
        DWORD *pdwMode,
        DWORD dwEncoding,
        CHAR *pSrcStr,
        UINT *pcSrcSize,
        WCHAR *pDstStr,
        UINT *pcDstSize,
        DWORD dwFlag,
        WCHAR *lpFallBack) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertStringFromUnicodeEx(
        DWORD *pdwMode,
        DWORD dwEncoding,
        WCHAR *pSrcStr,
        UINT *pcSrcSize,
        CHAR *pDstStr,
        UINT *pcDstSize,
        DWORD dwFlag,
        WCHAR *lpFallBack) = 0;

    virtual HRESULT STDMETHODCALLTYPE DetectCodepageInIStream(
        DWORD dwFlag,
        DWORD dwPrefWinCodePage,
        IStream *pstmIn,
        DetectEncodingInfo *lpEncoding,
        INT *pnScores) = 0;

    virtual HRESULT STDMETHODCALLTYPE DetectInputCodepage(
        DWORD dwFlag,
        DWORD dwPrefWinCodePage,
        CHAR *pSrcStr,
        INT *pcSrcSize,
        DetectEncodingInfo *lpEncoding,
        INT *pnScores) = 0;

    virtual HRESULT STDMETHODCALLTYPE ValidateCodePage(
        UINT uiCodePage,
        HWND hwnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCodePageDescription(
        UINT uiCodePage,
        LCID lcid,
        LPWSTR lpWideCharStr,
        int cchWideChar) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsCodePageInstallable(
        UINT uiCodePage) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMimeDBSource(
        MIMECONTF dwSource) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetNumberOfScripts(
        UINT *pnScripts) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumScripts(
        DWORD dwFlags,
        LANGID LangId,
        IEnumScript **ppEnumScript) = 0;

    virtual HRESULT STDMETHODCALLTYPE ValidateCodePageEx(
        UINT uiCodePage,
        HWND hwnd,
        DWORD dwfIODControl) = 0;

};
#else
typedef struct IMultiLanguage2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMultiLanguage2* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMultiLanguage2* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMultiLanguage2* This);

    /*** IMultiLanguage2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetNumberOfCodePageInfo)(
        IMultiLanguage2* This,
        UINT *pcCodePage);

    HRESULT (STDMETHODCALLTYPE *GetCodePageInfo)(
        IMultiLanguage2* This,
        UINT uiCodePage,
        LANGID LangId,
        PMIMECPINFO pCodePageInfo);

    HRESULT (STDMETHODCALLTYPE *GetFamilyCodePage)(
        IMultiLanguage2* This,
        UINT uiCodePage,
        UINT *puiFamilyCodePage);

    HRESULT (STDMETHODCALLTYPE *EnumCodePages)(
        IMultiLanguage2* This,
        DWORD grfFlags,
        LANGID LangId,
        IEnumCodePage **ppEnumCodePage);

    HRESULT (STDMETHODCALLTYPE *GetCharsetInfo)(
        IMultiLanguage2* This,
        BSTR Charset,
        PMIMECSETINFO pCharsetInfo);

    HRESULT (STDMETHODCALLTYPE *IsConvertible)(
        IMultiLanguage2* This,
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding);

    HRESULT (STDMETHODCALLTYPE *ConvertString)(
        IMultiLanguage2* This,
        DWORD *pdwMode,
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding,
        BYTE *pSrcStr,
        UINT *pcSrcSize,
        BYTE *pDstStr,
        UINT *pcDstSize);

    HRESULT (STDMETHODCALLTYPE *ConvertStringToUnicode)(
        IMultiLanguage2* This,
        DWORD *pdwMode,
        DWORD dwEncoding,
        CHAR *pSrcStr,
        UINT *pcSrcSize,
        WCHAR *pDstStr,
        UINT *pcDstSize);

    HRESULT (STDMETHODCALLTYPE *ConvertStringFromUnicode)(
        IMultiLanguage2* This,
        DWORD *pdwMode,
        DWORD dwEncoding,
        WCHAR *pSrcStr,
        UINT *pcSrcSize,
        CHAR *pDstStr,
        UINT *pcDstSize);

    HRESULT (STDMETHODCALLTYPE *ConvertStringReset)(
        IMultiLanguage2* This);

    HRESULT (STDMETHODCALLTYPE *GetRfc1766FromLcid)(
        IMultiLanguage2* This,
        LCID Locale,
        BSTR *pbstrRfc1766);

    HRESULT (STDMETHODCALLTYPE *GetLcidFromRfc1766)(
        IMultiLanguage2* This,
        LCID *pLocale,
        BSTR bstrRfc1766);

    HRESULT (STDMETHODCALLTYPE *EnumRfc1766)(
        IMultiLanguage2* This,
        LANGID LangId,
        IEnumRfc1766 **ppEnumRfc1766);

    HRESULT (STDMETHODCALLTYPE *GetRfc1766Info)(
        IMultiLanguage2* This,
        LCID Locale,
        LANGID LangId,
        PRFC1766INFO pRfc1766Info);

    HRESULT (STDMETHODCALLTYPE *CreateConvertCharset)(
        IMultiLanguage2* This,
        UINT uiSrcCodePage,
        UINT uiDstCodePage,
        DWORD dwProperty,
        IMLangConvertCharset **ppMLangConvertCharset);

    HRESULT (STDMETHODCALLTYPE *ConvertStringInIStream)(
        IMultiLanguage2* This,
        DWORD *pdwMode,
        DWORD dwFlag,
        WCHAR *lpFallBack,
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding,
        IStream *pstmIn,
        IStream *pstmOut);

    HRESULT (STDMETHODCALLTYPE *ConvertStringToUnicodeEx)(
        IMultiLanguage2* This,
        DWORD *pdwMode,
        DWORD dwEncoding,
        CHAR *pSrcStr,
        UINT *pcSrcSize,
        WCHAR *pDstStr,
        UINT *pcDstSize,
        DWORD dwFlag,
        WCHAR *lpFallBack);

    HRESULT (STDMETHODCALLTYPE *ConvertStringFromUnicodeEx)(
        IMultiLanguage2* This,
        DWORD *pdwMode,
        DWORD dwEncoding,
        WCHAR *pSrcStr,
        UINT *pcSrcSize,
        CHAR *pDstStr,
        UINT *pcDstSize,
        DWORD dwFlag,
        WCHAR *lpFallBack);

    HRESULT (STDMETHODCALLTYPE *DetectCodepageInIStream)(
        IMultiLanguage2* This,
        DWORD dwFlag,
        DWORD dwPrefWinCodePage,
        IStream *pstmIn,
        DetectEncodingInfo *lpEncoding,
        INT *pnScores);

    HRESULT (STDMETHODCALLTYPE *DetectInputCodepage)(
        IMultiLanguage2* This,
        DWORD dwFlag,
        DWORD dwPrefWinCodePage,
        CHAR *pSrcStr,
        INT *pcSrcSize,
        DetectEncodingInfo *lpEncoding,
        INT *pnScores);

    HRESULT (STDMETHODCALLTYPE *ValidateCodePage)(
        IMultiLanguage2* This,
        UINT uiCodePage,
        HWND hwnd);

    HRESULT (STDMETHODCALLTYPE *GetCodePageDescription)(
        IMultiLanguage2* This,
        UINT uiCodePage,
        LCID lcid,
        LPWSTR lpWideCharStr,
        int cchWideChar);

    HRESULT (STDMETHODCALLTYPE *IsCodePageInstallable)(
        IMultiLanguage2* This,
        UINT uiCodePage);

    HRESULT (STDMETHODCALLTYPE *SetMimeDBSource)(
        IMultiLanguage2* This,
        MIMECONTF dwSource);

    HRESULT (STDMETHODCALLTYPE *GetNumberOfScripts)(
        IMultiLanguage2* This,
        UINT *pnScripts);

    HRESULT (STDMETHODCALLTYPE *EnumScripts)(
        IMultiLanguage2* This,
        DWORD dwFlags,
        LANGID LangId,
        IEnumScript **ppEnumScript);

    HRESULT (STDMETHODCALLTYPE *ValidateCodePageEx)(
        IMultiLanguage2* This,
        UINT uiCodePage,
        HWND hwnd,
        DWORD dwfIODControl);

    END_INTERFACE
} IMultiLanguage2Vtbl;
interface IMultiLanguage2 {
    CONST_VTBL IMultiLanguage2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMultiLanguage2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMultiLanguage2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMultiLanguage2_Release(This) (This)->lpVtbl->Release(This)
/*** IMultiLanguage2 methods ***/
#define IMultiLanguage2_GetNumberOfCodePageInfo(This,pcCodePage) (This)->lpVtbl->GetNumberOfCodePageInfo(This,pcCodePage)
#define IMultiLanguage2_GetCodePageInfo(This,uiCodePage,LangId,pCodePageInfo) (This)->lpVtbl->GetCodePageInfo(This,uiCodePage,LangId,pCodePageInfo)
#define IMultiLanguage2_GetFamilyCodePage(This,uiCodePage,puiFamilyCodePage) (This)->lpVtbl->GetFamilyCodePage(This,uiCodePage,puiFamilyCodePage)
#define IMultiLanguage2_EnumCodePages(This,grfFlags,LangId,ppEnumCodePage) (This)->lpVtbl->EnumCodePages(This,grfFlags,LangId,ppEnumCodePage)
#define IMultiLanguage2_GetCharsetInfo(This,Charset,pCharsetInfo) (This)->lpVtbl->GetCharsetInfo(This,Charset,pCharsetInfo)
#define IMultiLanguage2_IsConvertible(This,dwSrcEncoding,dwDstEncoding) (This)->lpVtbl->IsConvertible(This,dwSrcEncoding,dwDstEncoding)
#define IMultiLanguage2_ConvertString(This,pdwMode,dwSrcEncoding,dwDstEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize) (This)->lpVtbl->ConvertString(This,pdwMode,dwSrcEncoding,dwDstEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize)
#define IMultiLanguage2_ConvertStringToUnicode(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize) (This)->lpVtbl->ConvertStringToUnicode(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize)
#define IMultiLanguage2_ConvertStringFromUnicode(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize) (This)->lpVtbl->ConvertStringFromUnicode(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize)
#define IMultiLanguage2_ConvertStringReset(This) (This)->lpVtbl->ConvertStringReset(This)
#define IMultiLanguage2_GetRfc1766FromLcid(This,Locale,pbstrRfc1766) (This)->lpVtbl->GetRfc1766FromLcid(This,Locale,pbstrRfc1766)
#define IMultiLanguage2_GetLcidFromRfc1766(This,pLocale,bstrRfc1766) (This)->lpVtbl->GetLcidFromRfc1766(This,pLocale,bstrRfc1766)
#define IMultiLanguage2_EnumRfc1766(This,LangId,ppEnumRfc1766) (This)->lpVtbl->EnumRfc1766(This,LangId,ppEnumRfc1766)
#define IMultiLanguage2_GetRfc1766Info(This,Locale,LangId,pRfc1766Info) (This)->lpVtbl->GetRfc1766Info(This,Locale,LangId,pRfc1766Info)
#define IMultiLanguage2_CreateConvertCharset(This,uiSrcCodePage,uiDstCodePage,dwProperty,ppMLangConvertCharset) (This)->lpVtbl->CreateConvertCharset(This,uiSrcCodePage,uiDstCodePage,dwProperty,ppMLangConvertCharset)
#define IMultiLanguage2_ConvertStringInIStream(This,pdwMode,dwFlag,lpFallBack,dwSrcEncoding,dwDstEncoding,pstmIn,pstmOut) (This)->lpVtbl->ConvertStringInIStream(This,pdwMode,dwFlag,lpFallBack,dwSrcEncoding,dwDstEncoding,pstmIn,pstmOut)
#define IMultiLanguage2_ConvertStringToUnicodeEx(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize,dwFlag,lpFallBack) (This)->lpVtbl->ConvertStringToUnicodeEx(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize,dwFlag,lpFallBack)
#define IMultiLanguage2_ConvertStringFromUnicodeEx(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize,dwFlag,lpFallBack) (This)->lpVtbl->ConvertStringFromUnicodeEx(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize,dwFlag,lpFallBack)
#define IMultiLanguage2_DetectCodepageInIStream(This,dwFlag,dwPrefWinCodePage,pstmIn,lpEncoding,pnScores) (This)->lpVtbl->DetectCodepageInIStream(This,dwFlag,dwPrefWinCodePage,pstmIn,lpEncoding,pnScores)
#define IMultiLanguage2_DetectInputCodepage(This,dwFlag,dwPrefWinCodePage,pSrcStr,pcSrcSize,lpEncoding,pnScores) (This)->lpVtbl->DetectInputCodepage(This,dwFlag,dwPrefWinCodePage,pSrcStr,pcSrcSize,lpEncoding,pnScores)
#define IMultiLanguage2_ValidateCodePage(This,uiCodePage,hwnd) (This)->lpVtbl->ValidateCodePage(This,uiCodePage,hwnd)
#define IMultiLanguage2_GetCodePageDescription(This,uiCodePage,lcid,lpWideCharStr,cchWideChar) (This)->lpVtbl->GetCodePageDescription(This,uiCodePage,lcid,lpWideCharStr,cchWideChar)
#define IMultiLanguage2_IsCodePageInstallable(This,uiCodePage) (This)->lpVtbl->IsCodePageInstallable(This,uiCodePage)
#define IMultiLanguage2_SetMimeDBSource(This,dwSource) (This)->lpVtbl->SetMimeDBSource(This,dwSource)
#define IMultiLanguage2_GetNumberOfScripts(This,pnScripts) (This)->lpVtbl->GetNumberOfScripts(This,pnScripts)
#define IMultiLanguage2_EnumScripts(This,dwFlags,LangId,ppEnumScript) (This)->lpVtbl->EnumScripts(This,dwFlags,LangId,ppEnumScript)
#define IMultiLanguage2_ValidateCodePageEx(This,uiCodePage,hwnd,dwfIODControl) (This)->lpVtbl->ValidateCodePageEx(This,uiCodePage,hwnd,dwfIODControl)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMultiLanguage2_GetNumberOfCodePageInfo_Proxy(
    IMultiLanguage2* This,
    UINT *pcCodePage);
void __RPC_STUB IMultiLanguage2_GetNumberOfCodePageInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_GetCodePageInfo_Proxy(
    IMultiLanguage2* This,
    UINT uiCodePage,
    LANGID LangId,
    PMIMECPINFO pCodePageInfo);
void __RPC_STUB IMultiLanguage2_GetCodePageInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_GetFamilyCodePage_Proxy(
    IMultiLanguage2* This,
    UINT uiCodePage,
    UINT *puiFamilyCodePage);
void __RPC_STUB IMultiLanguage2_GetFamilyCodePage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_EnumCodePages_Proxy(
    IMultiLanguage2* This,
    DWORD grfFlags,
    LANGID LangId,
    IEnumCodePage **ppEnumCodePage);
void __RPC_STUB IMultiLanguage2_EnumCodePages_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_GetCharsetInfo_Proxy(
    IMultiLanguage2* This,
    BSTR Charset,
    PMIMECSETINFO pCharsetInfo);
void __RPC_STUB IMultiLanguage2_GetCharsetInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_IsConvertible_Proxy(
    IMultiLanguage2* This,
    DWORD dwSrcEncoding,
    DWORD dwDstEncoding);
void __RPC_STUB IMultiLanguage2_IsConvertible_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_ConvertString_Proxy(
    IMultiLanguage2* This,
    DWORD *pdwMode,
    DWORD dwSrcEncoding,
    DWORD dwDstEncoding,
    BYTE *pSrcStr,
    UINT *pcSrcSize,
    BYTE *pDstStr,
    UINT *pcDstSize);
void __RPC_STUB IMultiLanguage2_ConvertString_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_ConvertStringToUnicode_Proxy(
    IMultiLanguage2* This,
    DWORD *pdwMode,
    DWORD dwEncoding,
    CHAR *pSrcStr,
    UINT *pcSrcSize,
    WCHAR *pDstStr,
    UINT *pcDstSize);
void __RPC_STUB IMultiLanguage2_ConvertStringToUnicode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_ConvertStringFromUnicode_Proxy(
    IMultiLanguage2* This,
    DWORD *pdwMode,
    DWORD dwEncoding,
    WCHAR *pSrcStr,
    UINT *pcSrcSize,
    CHAR *pDstStr,
    UINT *pcDstSize);
void __RPC_STUB IMultiLanguage2_ConvertStringFromUnicode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_ConvertStringReset_Proxy(
    IMultiLanguage2* This);
void __RPC_STUB IMultiLanguage2_ConvertStringReset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_GetRfc1766FromLcid_Proxy(
    IMultiLanguage2* This,
    LCID Locale,
    BSTR *pbstrRfc1766);
void __RPC_STUB IMultiLanguage2_GetRfc1766FromLcid_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_GetLcidFromRfc1766_Proxy(
    IMultiLanguage2* This,
    LCID *pLocale,
    BSTR bstrRfc1766);
void __RPC_STUB IMultiLanguage2_GetLcidFromRfc1766_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_EnumRfc1766_Proxy(
    IMultiLanguage2* This,
    LANGID LangId,
    IEnumRfc1766 **ppEnumRfc1766);
void __RPC_STUB IMultiLanguage2_EnumRfc1766_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_GetRfc1766Info_Proxy(
    IMultiLanguage2* This,
    LCID Locale,
    LANGID LangId,
    PRFC1766INFO pRfc1766Info);
void __RPC_STUB IMultiLanguage2_GetRfc1766Info_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_CreateConvertCharset_Proxy(
    IMultiLanguage2* This,
    UINT uiSrcCodePage,
    UINT uiDstCodePage,
    DWORD dwProperty,
    IMLangConvertCharset **ppMLangConvertCharset);
void __RPC_STUB IMultiLanguage2_CreateConvertCharset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_ConvertStringInIStream_Proxy(
    IMultiLanguage2* This,
    DWORD *pdwMode,
    DWORD dwFlag,
    WCHAR *lpFallBack,
    DWORD dwSrcEncoding,
    DWORD dwDstEncoding,
    IStream *pstmIn,
    IStream *pstmOut);
void __RPC_STUB IMultiLanguage2_ConvertStringInIStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_ConvertStringToUnicodeEx_Proxy(
    IMultiLanguage2* This,
    DWORD *pdwMode,
    DWORD dwEncoding,
    CHAR *pSrcStr,
    UINT *pcSrcSize,
    WCHAR *pDstStr,
    UINT *pcDstSize,
    DWORD dwFlag,
    WCHAR *lpFallBack);
void __RPC_STUB IMultiLanguage2_ConvertStringToUnicodeEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_ConvertStringFromUnicodeEx_Proxy(
    IMultiLanguage2* This,
    DWORD *pdwMode,
    DWORD dwEncoding,
    WCHAR *pSrcStr,
    UINT *pcSrcSize,
    CHAR *pDstStr,
    UINT *pcDstSize,
    DWORD dwFlag,
    WCHAR *lpFallBack);
void __RPC_STUB IMultiLanguage2_ConvertStringFromUnicodeEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_DetectCodepageInIStream_Proxy(
    IMultiLanguage2* This,
    DWORD dwFlag,
    DWORD dwPrefWinCodePage,
    IStream *pstmIn,
    DetectEncodingInfo *lpEncoding,
    INT *pnScores);
void __RPC_STUB IMultiLanguage2_DetectCodepageInIStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_DetectInputCodepage_Proxy(
    IMultiLanguage2* This,
    DWORD dwFlag,
    DWORD dwPrefWinCodePage,
    CHAR *pSrcStr,
    INT *pcSrcSize,
    DetectEncodingInfo *lpEncoding,
    INT *pnScores);
void __RPC_STUB IMultiLanguage2_DetectInputCodepage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_ValidateCodePage_Proxy(
    IMultiLanguage2* This,
    UINT uiCodePage,
    HWND hwnd);
void __RPC_STUB IMultiLanguage2_ValidateCodePage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_GetCodePageDescription_Proxy(
    IMultiLanguage2* This,
    UINT uiCodePage,
    LCID lcid,
    LPWSTR lpWideCharStr,
    int cchWideChar);
void __RPC_STUB IMultiLanguage2_GetCodePageDescription_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_IsCodePageInstallable_Proxy(
    IMultiLanguage2* This,
    UINT uiCodePage);
void __RPC_STUB IMultiLanguage2_IsCodePageInstallable_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_SetMimeDBSource_Proxy(
    IMultiLanguage2* This,
    MIMECONTF dwSource);
void __RPC_STUB IMultiLanguage2_SetMimeDBSource_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_GetNumberOfScripts_Proxy(
    IMultiLanguage2* This,
    UINT *pnScripts);
void __RPC_STUB IMultiLanguage2_GetNumberOfScripts_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_EnumScripts_Proxy(
    IMultiLanguage2* This,
    DWORD dwFlags,
    LANGID LangId,
    IEnumScript **ppEnumScript);
void __RPC_STUB IMultiLanguage2_EnumScripts_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage2_ValidateCodePageEx_Proxy(
    IMultiLanguage2* This,
    UINT uiCodePage,
    HWND hwnd,
    DWORD dwfIODControl);
void __RPC_STUB IMultiLanguage2_ValidateCodePageEx_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMultiLanguage2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMultiLanguage3 interface
 */
#ifndef __IMultiLanguage3_INTERFACE_DEFINED__
#define __IMultiLanguage3_INTERFACE_DEFINED__

typedef IMultiLanguage3 *LPMULTILANGUAGE3;
DEFINE_GUID(IID_IMultiLanguage3, 0x4e5868ab, 0xb157, 0x4623, 0x9a,0xcc, 0x6a,0x1d,0x9c,0xae,0xbe,0x04);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMultiLanguage3 : public IMultiLanguage2
{
    virtual HRESULT STDMETHODCALLTYPE DetectOutboundCodePage(
        DWORD dwFlags,
        LPCWSTR lpWideCharStr,
        UINT cchWideChar,
        UINT *puiPreferredCodePages,
        UINT nPreferredCodePages,
        UINT *puiDetectedCodePages,
        UINT *pnDetectedCodePages,
        WCHAR *lpSpecialChar) = 0;

    virtual HRESULT STDMETHODCALLTYPE DetectOutboundCodePageInIStream(
        DWORD dwFlags,
        IStream *pStrIn,
        UINT *puiPreferredCodePages,
        UINT nPreferredCodePages,
        UINT *puiDetectedCodePages,
        UINT *pnDetectedCodePages,
        WCHAR *lpSpecialChar) = 0;

};
#else
typedef struct IMultiLanguage3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMultiLanguage3* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMultiLanguage3* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMultiLanguage3* This);

    /*** IMultiLanguage2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetNumberOfCodePageInfo)(
        IMultiLanguage3* This,
        UINT *pcCodePage);

    HRESULT (STDMETHODCALLTYPE *GetCodePageInfo)(
        IMultiLanguage3* This,
        UINT uiCodePage,
        LANGID LangId,
        PMIMECPINFO pCodePageInfo);

    HRESULT (STDMETHODCALLTYPE *GetFamilyCodePage)(
        IMultiLanguage3* This,
        UINT uiCodePage,
        UINT *puiFamilyCodePage);

    HRESULT (STDMETHODCALLTYPE *EnumCodePages)(
        IMultiLanguage3* This,
        DWORD grfFlags,
        LANGID LangId,
        IEnumCodePage **ppEnumCodePage);

    HRESULT (STDMETHODCALLTYPE *GetCharsetInfo)(
        IMultiLanguage3* This,
        BSTR Charset,
        PMIMECSETINFO pCharsetInfo);

    HRESULT (STDMETHODCALLTYPE *IsConvertible)(
        IMultiLanguage3* This,
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding);

    HRESULT (STDMETHODCALLTYPE *ConvertString)(
        IMultiLanguage3* This,
        DWORD *pdwMode,
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding,
        BYTE *pSrcStr,
        UINT *pcSrcSize,
        BYTE *pDstStr,
        UINT *pcDstSize);

    HRESULT (STDMETHODCALLTYPE *ConvertStringToUnicode)(
        IMultiLanguage3* This,
        DWORD *pdwMode,
        DWORD dwEncoding,
        CHAR *pSrcStr,
        UINT *pcSrcSize,
        WCHAR *pDstStr,
        UINT *pcDstSize);

    HRESULT (STDMETHODCALLTYPE *ConvertStringFromUnicode)(
        IMultiLanguage3* This,
        DWORD *pdwMode,
        DWORD dwEncoding,
        WCHAR *pSrcStr,
        UINT *pcSrcSize,
        CHAR *pDstStr,
        UINT *pcDstSize);

    HRESULT (STDMETHODCALLTYPE *ConvertStringReset)(
        IMultiLanguage3* This);

    HRESULT (STDMETHODCALLTYPE *GetRfc1766FromLcid)(
        IMultiLanguage3* This,
        LCID Locale,
        BSTR *pbstrRfc1766);

    HRESULT (STDMETHODCALLTYPE *GetLcidFromRfc1766)(
        IMultiLanguage3* This,
        LCID *pLocale,
        BSTR bstrRfc1766);

    HRESULT (STDMETHODCALLTYPE *EnumRfc1766)(
        IMultiLanguage3* This,
        LANGID LangId,
        IEnumRfc1766 **ppEnumRfc1766);

    HRESULT (STDMETHODCALLTYPE *GetRfc1766Info)(
        IMultiLanguage3* This,
        LCID Locale,
        LANGID LangId,
        PRFC1766INFO pRfc1766Info);

    HRESULT (STDMETHODCALLTYPE *CreateConvertCharset)(
        IMultiLanguage3* This,
        UINT uiSrcCodePage,
        UINT uiDstCodePage,
        DWORD dwProperty,
        IMLangConvertCharset **ppMLangConvertCharset);

    HRESULT (STDMETHODCALLTYPE *ConvertStringInIStream)(
        IMultiLanguage3* This,
        DWORD *pdwMode,
        DWORD dwFlag,
        WCHAR *lpFallBack,
        DWORD dwSrcEncoding,
        DWORD dwDstEncoding,
        IStream *pstmIn,
        IStream *pstmOut);

    HRESULT (STDMETHODCALLTYPE *ConvertStringToUnicodeEx)(
        IMultiLanguage3* This,
        DWORD *pdwMode,
        DWORD dwEncoding,
        CHAR *pSrcStr,
        UINT *pcSrcSize,
        WCHAR *pDstStr,
        UINT *pcDstSize,
        DWORD dwFlag,
        WCHAR *lpFallBack);

    HRESULT (STDMETHODCALLTYPE *ConvertStringFromUnicodeEx)(
        IMultiLanguage3* This,
        DWORD *pdwMode,
        DWORD dwEncoding,
        WCHAR *pSrcStr,
        UINT *pcSrcSize,
        CHAR *pDstStr,
        UINT *pcDstSize,
        DWORD dwFlag,
        WCHAR *lpFallBack);

    HRESULT (STDMETHODCALLTYPE *DetectCodepageInIStream)(
        IMultiLanguage3* This,
        DWORD dwFlag,
        DWORD dwPrefWinCodePage,
        IStream *pstmIn,
        DetectEncodingInfo *lpEncoding,
        INT *pnScores);

    HRESULT (STDMETHODCALLTYPE *DetectInputCodepage)(
        IMultiLanguage3* This,
        DWORD dwFlag,
        DWORD dwPrefWinCodePage,
        CHAR *pSrcStr,
        INT *pcSrcSize,
        DetectEncodingInfo *lpEncoding,
        INT *pnScores);

    HRESULT (STDMETHODCALLTYPE *ValidateCodePage)(
        IMultiLanguage3* This,
        UINT uiCodePage,
        HWND hwnd);

    HRESULT (STDMETHODCALLTYPE *GetCodePageDescription)(
        IMultiLanguage3* This,
        UINT uiCodePage,
        LCID lcid,
        LPWSTR lpWideCharStr,
        int cchWideChar);

    HRESULT (STDMETHODCALLTYPE *IsCodePageInstallable)(
        IMultiLanguage3* This,
        UINT uiCodePage);

    HRESULT (STDMETHODCALLTYPE *SetMimeDBSource)(
        IMultiLanguage3* This,
        MIMECONTF dwSource);

    HRESULT (STDMETHODCALLTYPE *GetNumberOfScripts)(
        IMultiLanguage3* This,
        UINT *pnScripts);

    HRESULT (STDMETHODCALLTYPE *EnumScripts)(
        IMultiLanguage3* This,
        DWORD dwFlags,
        LANGID LangId,
        IEnumScript **ppEnumScript);

    HRESULT (STDMETHODCALLTYPE *ValidateCodePageEx)(
        IMultiLanguage3* This,
        UINT uiCodePage,
        HWND hwnd,
        DWORD dwfIODControl);

    /*** IMultiLanguage3 methods ***/
    HRESULT (STDMETHODCALLTYPE *DetectOutboundCodePage)(
        IMultiLanguage3* This,
        DWORD dwFlags,
        LPCWSTR lpWideCharStr,
        UINT cchWideChar,
        UINT *puiPreferredCodePages,
        UINT nPreferredCodePages,
        UINT *puiDetectedCodePages,
        UINT *pnDetectedCodePages,
        WCHAR *lpSpecialChar);

    HRESULT (STDMETHODCALLTYPE *DetectOutboundCodePageInIStream)(
        IMultiLanguage3* This,
        DWORD dwFlags,
        IStream *pStrIn,
        UINT *puiPreferredCodePages,
        UINT nPreferredCodePages,
        UINT *puiDetectedCodePages,
        UINT *pnDetectedCodePages,
        WCHAR *lpSpecialChar);

    END_INTERFACE
} IMultiLanguage3Vtbl;
interface IMultiLanguage3 {
    CONST_VTBL IMultiLanguage3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMultiLanguage3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMultiLanguage3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMultiLanguage3_Release(This) (This)->lpVtbl->Release(This)
/*** IMultiLanguage2 methods ***/
#define IMultiLanguage3_GetNumberOfCodePageInfo(This,pcCodePage) (This)->lpVtbl->GetNumberOfCodePageInfo(This,pcCodePage)
#define IMultiLanguage3_GetCodePageInfo(This,uiCodePage,LangId,pCodePageInfo) (This)->lpVtbl->GetCodePageInfo(This,uiCodePage,LangId,pCodePageInfo)
#define IMultiLanguage3_GetFamilyCodePage(This,uiCodePage,puiFamilyCodePage) (This)->lpVtbl->GetFamilyCodePage(This,uiCodePage,puiFamilyCodePage)
#define IMultiLanguage3_EnumCodePages(This,grfFlags,LangId,ppEnumCodePage) (This)->lpVtbl->EnumCodePages(This,grfFlags,LangId,ppEnumCodePage)
#define IMultiLanguage3_GetCharsetInfo(This,Charset,pCharsetInfo) (This)->lpVtbl->GetCharsetInfo(This,Charset,pCharsetInfo)
#define IMultiLanguage3_IsConvertible(This,dwSrcEncoding,dwDstEncoding) (This)->lpVtbl->IsConvertible(This,dwSrcEncoding,dwDstEncoding)
#define IMultiLanguage3_ConvertString(This,pdwMode,dwSrcEncoding,dwDstEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize) (This)->lpVtbl->ConvertString(This,pdwMode,dwSrcEncoding,dwDstEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize)
#define IMultiLanguage3_ConvertStringToUnicode(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize) (This)->lpVtbl->ConvertStringToUnicode(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize)
#define IMultiLanguage3_ConvertStringFromUnicode(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize) (This)->lpVtbl->ConvertStringFromUnicode(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize)
#define IMultiLanguage3_ConvertStringReset(This) (This)->lpVtbl->ConvertStringReset(This)
#define IMultiLanguage3_GetRfc1766FromLcid(This,Locale,pbstrRfc1766) (This)->lpVtbl->GetRfc1766FromLcid(This,Locale,pbstrRfc1766)
#define IMultiLanguage3_GetLcidFromRfc1766(This,pLocale,bstrRfc1766) (This)->lpVtbl->GetLcidFromRfc1766(This,pLocale,bstrRfc1766)
#define IMultiLanguage3_EnumRfc1766(This,LangId,ppEnumRfc1766) (This)->lpVtbl->EnumRfc1766(This,LangId,ppEnumRfc1766)
#define IMultiLanguage3_GetRfc1766Info(This,Locale,LangId,pRfc1766Info) (This)->lpVtbl->GetRfc1766Info(This,Locale,LangId,pRfc1766Info)
#define IMultiLanguage3_CreateConvertCharset(This,uiSrcCodePage,uiDstCodePage,dwProperty,ppMLangConvertCharset) (This)->lpVtbl->CreateConvertCharset(This,uiSrcCodePage,uiDstCodePage,dwProperty,ppMLangConvertCharset)
#define IMultiLanguage3_ConvertStringInIStream(This,pdwMode,dwFlag,lpFallBack,dwSrcEncoding,dwDstEncoding,pstmIn,pstmOut) (This)->lpVtbl->ConvertStringInIStream(This,pdwMode,dwFlag,lpFallBack,dwSrcEncoding,dwDstEncoding,pstmIn,pstmOut)
#define IMultiLanguage3_ConvertStringToUnicodeEx(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize,dwFlag,lpFallBack) (This)->lpVtbl->ConvertStringToUnicodeEx(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize,dwFlag,lpFallBack)
#define IMultiLanguage3_ConvertStringFromUnicodeEx(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize,dwFlag,lpFallBack) (This)->lpVtbl->ConvertStringFromUnicodeEx(This,pdwMode,dwEncoding,pSrcStr,pcSrcSize,pDstStr,pcDstSize,dwFlag,lpFallBack)
#define IMultiLanguage3_DetectCodepageInIStream(This,dwFlag,dwPrefWinCodePage,pstmIn,lpEncoding,pnScores) (This)->lpVtbl->DetectCodepageInIStream(This,dwFlag,dwPrefWinCodePage,pstmIn,lpEncoding,pnScores)
#define IMultiLanguage3_DetectInputCodepage(This,dwFlag,dwPrefWinCodePage,pSrcStr,pcSrcSize,lpEncoding,pnScores) (This)->lpVtbl->DetectInputCodepage(This,dwFlag,dwPrefWinCodePage,pSrcStr,pcSrcSize,lpEncoding,pnScores)
#define IMultiLanguage3_ValidateCodePage(This,uiCodePage,hwnd) (This)->lpVtbl->ValidateCodePage(This,uiCodePage,hwnd)
#define IMultiLanguage3_GetCodePageDescription(This,uiCodePage,lcid,lpWideCharStr,cchWideChar) (This)->lpVtbl->GetCodePageDescription(This,uiCodePage,lcid,lpWideCharStr,cchWideChar)
#define IMultiLanguage3_IsCodePageInstallable(This,uiCodePage) (This)->lpVtbl->IsCodePageInstallable(This,uiCodePage)
#define IMultiLanguage3_SetMimeDBSource(This,dwSource) (This)->lpVtbl->SetMimeDBSource(This,dwSource)
#define IMultiLanguage3_GetNumberOfScripts(This,pnScripts) (This)->lpVtbl->GetNumberOfScripts(This,pnScripts)
#define IMultiLanguage3_EnumScripts(This,dwFlags,LangId,ppEnumScript) (This)->lpVtbl->EnumScripts(This,dwFlags,LangId,ppEnumScript)
#define IMultiLanguage3_ValidateCodePageEx(This,uiCodePage,hwnd,dwfIODControl) (This)->lpVtbl->ValidateCodePageEx(This,uiCodePage,hwnd,dwfIODControl)
/*** IMultiLanguage3 methods ***/
#define IMultiLanguage3_DetectOutboundCodePage(This,dwFlags,lpWideCharStr,cchWideChar,puiPreferredCodePages,nPreferredCodePages,puiDetectedCodePages,pnDetectedCodePages,lpSpecialChar) (This)->lpVtbl->DetectOutboundCodePage(This,dwFlags,lpWideCharStr,cchWideChar,puiPreferredCodePages,nPreferredCodePages,puiDetectedCodePages,pnDetectedCodePages,lpSpecialChar)
#define IMultiLanguage3_DetectOutboundCodePageInIStream(This,dwFlags,pStrIn,puiPreferredCodePages,nPreferredCodePages,puiDetectedCodePages,pnDetectedCodePages,lpSpecialChar) (This)->lpVtbl->DetectOutboundCodePageInIStream(This,dwFlags,pStrIn,puiPreferredCodePages,nPreferredCodePages,puiDetectedCodePages,pnDetectedCodePages,lpSpecialChar)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMultiLanguage3_DetectOutboundCodePage_Proxy(
    IMultiLanguage3* This,
    DWORD dwFlags,
    LPCWSTR lpWideCharStr,
    UINT cchWideChar,
    UINT *puiPreferredCodePages,
    UINT nPreferredCodePages,
    UINT *puiDetectedCodePages,
    UINT *pnDetectedCodePages,
    WCHAR *lpSpecialChar);
void __RPC_STUB IMultiLanguage3_DetectOutboundCodePage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMultiLanguage3_DetectOutboundCodePageInIStream_Proxy(
    IMultiLanguage3* This,
    DWORD dwFlags,
    IStream *pStrIn,
    UINT *puiPreferredCodePages,
    UINT nPreferredCodePages,
    UINT *puiDetectedCodePages,
    UINT *pnDetectedCodePages,
    WCHAR *lpSpecialChar);
void __RPC_STUB IMultiLanguage3_DetectOutboundCodePageInIStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMultiLanguage3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * CMultiLanguage coclass
 */

DEFINE_GUID(CLSID_CMultiLanguage, 0x275c23e2, 0x3747, 0x11d0, 0x9f,0xea, 0x00,0xaa,0x00,0x3f,0x86,0x46);

STDAPI LcidToRfc1766A(LCID, LPSTR, INT);
STDAPI LcidToRfc1766W(LCID, LPWSTR, INT);
#define LcidToRfc1766 WINELIB_NAME_AW(LcidToRfc1766)
STDAPI Rfc1766ToLcidA(LCID *, LPCSTR);
STDAPI Rfc1766ToLcidW(LCID *, LPCWSTR);
#define Rfc1766ToLcid WINELIB_NAME_AW(Rfc1766ToLcid)
STDAPI GetGlobalFontLinkObject(void **unknown);
STDAPI IsConvertINetStringAvailable(DWORD, DWORD);
STDAPI ConvertINetString(LPDWORD, DWORD, DWORD, LPCSTR, LPINT, LPSTR, LPINT);
STDAPI ConvertINetMultiByteToUnicode(LPDWORD, DWORD, LPCSTR, LPINT, LPWSTR, LPINT);
STDAPI ConvertINetUnicodeToMultiByte(LPDWORD, DWORD, LPCWSTR, LPINT, LPSTR, LPINT);
/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER HDC_UserSize     (ULONG *, ULONG, HDC *);
unsigned char * __RPC_USER HDC_UserMarshal  (ULONG *, unsigned char *, HDC *);
unsigned char * __RPC_USER HDC_UserUnmarshal(ULONG *, unsigned char *, HDC *);
void            __RPC_USER HDC_UserFree     (ULONG *, HDC *);
ULONG           __RPC_USER HFONT_UserSize     (ULONG *, ULONG, HFONT *);
unsigned char * __RPC_USER HFONT_UserMarshal  (ULONG *, unsigned char *, HFONT *);
unsigned char * __RPC_USER HFONT_UserUnmarshal(ULONG *, unsigned char *, HFONT *);
void            __RPC_USER HFONT_UserFree     (ULONG *, HFONT *);
ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
ULONG           __RPC_USER HWND_UserSize     (ULONG *, ULONG, HWND *);
unsigned char * __RPC_USER HWND_UserMarshal  (ULONG *, unsigned char *, HWND *);
unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *);
void            __RPC_USER HWND_UserFree     (ULONG *, HWND *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __WIDL_MLANG_H */
