MLang.Idl
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:43k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //+-------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright (c) Microsoft Corporation. All rights reserved.
  5. //
  6. //  File: mlang.idl
  7. //
  8. //  Contents: IMultiLanguage interface definition
  9. //
  10. //
  11. //--------------------------------------------------------------------------
  12. cpp_quote("//=--------------------------------------------------------------------------=")
  13. cpp_quote("// MLang.h                                                                    ")
  14. cpp_quote("//=--------------------------------------------------------------------------=")
  15. cpp_quote("// Copyright (c) Microsoft Corporation. All rights reserved.")
  16. cpp_quote("//                                                                            ")
  17. cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF        ")
  18. cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO        ")
  19. cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A             ")
  20. cpp_quote("// PARTICULAR PURPOSE.                                                        ")
  21. cpp_quote("//=--------------------------------------------------------------------------=")
  22. cpp_quote("                                                                              ")
  23. cpp_quote("#pragma comment(lib,"uuid.lib")                                             ")
  24. cpp_quote("                                                                              ")
  25. cpp_quote("//----------------------------------------------------------------------------")
  26. cpp_quote("// IMultiLanguage Interfaces.                                                 ")
  27. cpp_quote("                                                                              ")
  28. #ifndef DO_NO_IMPORTS
  29. import "unknwn.idl";
  30. #endif
  31. [
  32.     uuid(275c23e0-3747-11d0-9fea-00aa003f8646),
  33.     helpstring("MultiLanguage Object Model"),
  34.     lcid(0x0000),
  35.     version(0.2)
  36. ]
  37. library MultiLanguage
  38. {
  39.     importlib("stdole2.tlb");
  40. typedef WORD LANGID;
  41.     typedef enum tagMLSTR_FLAGS
  42.     {
  43. #ifdef NEWMLSTR
  44.         MLSTR_READ                  = 0x0001,
  45.         MLSTR_WRITE                 = 0x000A,
  46.         MLSTR_SHARE_DENYREAD        = 0x0004,
  47.         MLSTR_SHARE_DENYWRITE       = 0x0008,
  48.         MLSTR_MOVE                  = 0x0010,
  49.         MLSTR_NOWAIT                = 0x0020
  50. #else
  51.         MLSTR_READ                  = 1,
  52.         MLSTR_WRITE                 = 2
  53. #endif
  54.     } MLSTR_FLAGS;
  55.     [
  56.         uuid(D24ACD21-BA72-11D0-B188-00AA0038C969),
  57.         helpstring("IMLangStringBufW Interface"),
  58.         pointer_default(unique)
  59.     ]
  60.     interface IMLangStringBufW : IUnknown
  61.     {
  62.         [helpstring("method GetStatus")] HRESULT GetStatus([out] long* plFlags, [out] long* pcchBuf);
  63.         [helpstring("method LockBuf")] HRESULT LockBuf([in] long cchOffset, [in] long cchMaxLock, [out, size_is(,*pcchBuf)] WCHAR** ppszBuf, [out] long* pcchBuf);
  64.         [helpstring("method UnlockBuf")] HRESULT UnlockBuf([in, size_is(cchWrite - cchOffset)] const WCHAR* pszBuf, [in] long cchOffset, [in] long cchWrite);
  65.         [helpstring("method Insert")] HRESULT Insert([in] long cchOffset, [in] long cchMaxInsert, [out] long* pcchActual);
  66.         [helpstring("method Delete")] HRESULT Delete([in] long cchOffset, [in] long cchDelete);
  67.     };
  68.     [
  69.         uuid(D24ACD23-BA72-11D0-B188-00AA0038C969),
  70.         helpstring("IMLangStringBufA Interface"),
  71.         pointer_default(unique)
  72.     ]
  73.     interface IMLangStringBufA : IUnknown
  74.     {
  75.         [helpstring("method GetStatus")] HRESULT GetStatus([out] long* plFlags, [out] long* pcchBuf);
  76.         [helpstring("method LockBuf")] HRESULT LockBuf([in] long cchOffset, [in] long cchMaxLock, [out, size_is(,*pcchBuf)] CHAR** ppszBuf, [out] long* pcchBuf);
  77.         [helpstring("method UnlockBuf")] HRESULT UnlockBuf([in, size_is(cchWrite - cchOffset)] const CHAR* pszBuf, [in] long cchOffset, [in] long cchWrite);
  78.         [helpstring("method Insert")] HRESULT Insert([in] long cchOffset, [in] long cchMaxInsert, [out] long* pcchActual);
  79.         [helpstring("method Delete")] HRESULT Delete([in] long cchOffset, [in] long cchDelete);
  80.     };
  81. #ifdef NEWMLSTR
  82.     [
  83.         uuid(9c0782c0-5087-11d1-998c-00aa00601ea8),
  84.         helpstring("IMLStrAttr Interface"),
  85.         pointer_default(unique)
  86.     ]
  87.     interface IMLStrAttr : IUnknown
  88.     {
  89.         [helpstring("method SetClient")] HRESULT SetClient([in] IUnknown* pUnk);
  90.         [helpstring("method GetClient")] HRESULT GetClient([out] IUnknown** ppUnk);
  91.         [helpstring("method QueryAttr")] HRESULT QueryAttr([in] REFIID riid, [in] LPARAM lParam, [out] IUnknown** ppUnk, [out] long* lConf);
  92.         [helpstring("method GetAttrInterface")] HRESULT GetAttrInterface([out] IID* pIID, [out] LPARAM* plParam);
  93.         [helpstring("method SetMLStr")] HRESULT SetMLStr([in] long lDestPos, [in] long lDestLen, [in] IUnknown* pSrcMLStr, [in] long lSrcPos, [in] long lSrcLen);
  94.     };
  95.     [
  96.         uuid(39a623c0-5109-11d1-998c-00aa00601ea8),
  97.         helpstring("IMLStrAttrWStr Interface"),
  98.         pointer_default(unique)
  99.     ]
  100.     interface IMLStrAttrWStr : IMLStrAttr
  101.     {
  102.         [helpstring("method SetWStr")] HRESULT SetWStr([in] long lDestPos, [in] long lDestLen, [in, size_is(cchSrc)] const WCHAR* pszSrc, [in] long cchSrc, [out] long* pcchActual, [out] long* plActualLen);
  103.         [helpstring("method SetStrBufW")] HRESULT SetStrBufW([in] long lDestPos, [in] long lDestLen, [in] IMLangStringBufW* pSrcBuf, [out] long* pcchActual, [out] long* plActualLen);
  104.         [helpstring("method GetWStr")] HRESULT GetWStr([in] long lSrcPos, [in] long lSrcLen, [out, size_is(cchDest)] WCHAR* pszDest, [in] long cchDest, [out] long* pcchActual, [out] long* plActualLen);
  105.         [helpstring("method GetStrBufW")] HRESULT GetStrBufW([in] long lSrcPos, [in] long lSrcMaxLen, [out] IMLangStringBufW** ppDestBuf, [out] long* plDestLen);
  106.         [helpstring("method LockWStr")] HRESULT LockWStr([in] long lSrcPos, [in] long lSrcLen, [in] long lFlags, [in] long cchRequest, [out, size_is(,*pcchDest)] WCHAR** ppszDest, [out] long* pcchDest, [out] long* plDestLen);
  107.         [helpstring("method UnlockWStr")] HRESULT UnlockWStr([in, size_is(cchSrc)] const WCHAR* pszSrc, [in] long cchSrc, [out] long* pcchActual, [out] long* plActualLen);
  108.     };
  109.     [
  110.         uuid(39a623c1-5109-11d1-998c-00aa00601ea8),
  111.         helpstring("IMLStrAttrAStr Interface"),
  112.         pointer_default(unique)
  113.     ]
  114.     interface IMLStrAttrAStr : IMLStrAttr
  115.     {
  116.         [helpstring("method SetAStr")] HRESULT SetAStr([in] long lDestPos, [in] long lDestLen, [in] UINT uCodePage, [in, size_is(cchSrc)] const CHAR* pszSrc, [in] long cchSrc, [out] long* pcchActual, [out] long* plActualLen);
  117.         [helpstring("method SetStrBufA")] HRESULT SetStrBufA([in] long lDestPos, [in] long lDestLen, [in] UINT uCodePage, [in] IMLangStringBufA* pSrcBuf, [out] long* pcchActual, [out] long* plActualLen);
  118.         [helpstring("method GetAStr")] HRESULT GetAStr([in] long lSrcPos, [in] long lSrcLen, [in] UINT uCodePageIn, [out] UINT* puCodePageOut, [out, size_is(cchDest)] CHAR* pszDest, [in] long cchDest, [out] long* pcchActual, [out] long* plActualLen);
  119.         [helpstring("method GetStrBufA")] HRESULT GetStrBufA([in] long lSrcPos, [in] long lSrcMaxLen, [out] UINT* puDestCodePage, [out] IMLangStringBufA** ppDestBuf, [out] long* plDestLen);
  120.         [helpstring("method LockAStr")] HRESULT LockAStr([in] long lSrcPos, [in] long lSrcLen, [in] long lFlags, [in] UINT uCodePageIn, [in] long cchRequest, [out] UINT* puCodePageOut, [out, size_is(,*pcchDest)] CHAR** ppszDest, [out] long* pcchDest, [out] long* plDestLen);
  121.         [helpstring("method UnlockAStr")] HRESULT UnlockAStr([in, size_is(cchSrc)] const CHAR* pszSrc, [in] long cchSrc, [out] long* pcchActual, [out] long* plActualLen);
  122.     };
  123.     [
  124.         uuid(39a623c2-5109-11d1-998c-00aa00601ea8),
  125.         helpstring("IMLStrAttrLong Interface"),
  126.         pointer_default(unique)
  127.     ]
  128.     interface IMLStrAttrLong : IMLStrAttr
  129.     {
  130.         [helpstring("method SetLong")] HRESULT SetLong([in] long lDestPos, [in] long lDestLen, [in] long lValue);
  131.         [helpstring("method GetLong")] HRESULT GetLong([in] long lSrcPos, [in] long lSrcLen, [out] long* plValue, [out] long* plActualPos, [out] long* plActualLen);
  132.     };
  133.     [
  134.         uuid(39a623c3-5109-11d1-998c-00aa00601ea8),
  135.         helpstring("IMLStrAttrLocale Interface"),
  136.         pointer_default(unique)
  137.     ]
  138.     interface IMLStrAttrLocale : IMLStrAttrLong
  139.     {
  140.     };
  141.     [
  142.         uuid(8d0dcf40-520d-11d1-998c-00aa00601ea8),
  143.         helpstring("IMLStrAttrNotifySink Interface"),
  144.         pointer_default(unique)
  145.     ]
  146.     interface IMLStrAttrNotifySink : IUnknown
  147.     {
  148.         [helpstring("method OnRequestEdit")] HRESULT OnRequestEdit([in] long lDestPos, [in] long lDestLen, [in] long lNewLen, [in] REFIID riid, [in] LPARAM lParam, [in] IUnknown* pUnk);
  149.         [helpstring("method OnCanceledEdit")] HRESULT OnCanceledEdit([in] long lDestPos, [in] long lDestLen, [in] long lNewLen, [in] REFIID riid, [in] LPARAM lParam, [in] IUnknown* pUnk);
  150.         [helpstring("method OnChanged")] HRESULT OnChanged([in] long lDestPos, [in] long lDestLen, [in] long lNewLen, [in] REFIID riid, [in] LPARAM lParam, [in] IUnknown* pUnk);
  151.     };
  152.     [
  153.         uuid(c454b4e0-510f-11d1-998c-00aa00601ea8),
  154.         helpstring("CMLStrAttrWStr Class")
  155.     ]
  156.     coclass CMLStrAttrWStr
  157.     {
  158.         [default] interface IMLStrAttrWStr;
  159.         [source] interface IMLStrAttrNotifySink;
  160.     };
  161.     [
  162.         uuid(c454b4e1-510f-11d1-998c-00aa00601ea8),
  163.         helpstring("CMLStrAttrAStr Class")
  164.     ]
  165.     coclass CMLStrAttrAStr
  166.     {
  167.         [default] interface IMLStrAttrAStr;
  168.         [source] interface IMLStrAttrNotifySink;
  169.     };
  170.     [
  171.         uuid(c454b4e2-510f-11d1-998c-00aa00601ea8),
  172.         helpstring("CMLStrAttrLocale Class")
  173.     ]
  174.     coclass CMLStrAttrLocale
  175.     {
  176.         [default] interface IMLStrAttrLocale;
  177.         [source] interface IMLStrAttrNotifySink;
  178.     };
  179. #endif // NEWMLSTR
  180.     [
  181.         uuid(C04D65CE-B70D-11D0-B188-00AA0038C969),
  182.         helpstring("IMLangString Interface"),
  183.         pointer_default(unique)
  184.     ]
  185.     interface IMLangString : IUnknown
  186.     {
  187. #ifdef NEWMLSTR
  188.         [helpstring("method LockMLStr")] HRESULT LockMLStr([in] long lPos, [in] long lLen, [in] DWORD dwFlags, [out] DWORD* pdwCookie, [out] long* plActualPos, [out] long* plActualLen);
  189.         [helpstring("method UnlockMLStr")] HRESULT UnlockMLStr([in] DWORD dwCookie);
  190. #else
  191.         [helpstring("method Sync")] HRESULT Sync([in] BOOL fNoAccess);
  192. #endif
  193.         [helpstring("method GetLength")] HRESULT GetLength([out, retval] long* plLen);
  194.         [helpstring("method SetMLStr")] HRESULT SetMLStr([in] long lDestPos, [in] long lDestLen, [in] IUnknown* pSrcMLStr, [in] long lSrcPos, [in] long lSrcLen);
  195. #ifdef NEWMLSTR
  196.         [helpstring("method RegisterAttr")] HRESULT RegisterAttr([in] IUnknown* pUnk, [out] DWORD* pdwCookie);
  197.         [helpstring("method UnregisterAttr")] HRESULT UnregisterAttr([in] DWORD dwCookie);
  198.         [helpstring("method EnumAttr")] HRESULT EnumAttr([out] IEnumUnknown** ppEnumUnk);
  199.         [helpstring("method FindAttr")] HRESULT FindAttr([in] REFIID riid, [in] LPARAM lParam, [out] IUnknown** ppUnk);
  200. #else
  201.         [helpstring("method GetMLStr")] HRESULT GetMLStr([in] long lSrcPos, [in] long lSrcLen, [in] IUnknown* pUnkOuter, [in] DWORD dwClsContext, [in] const IID* piid, [out] IUnknown** ppDestMLStr, [out] long* plDestPos, [out] long* plDestLen);
  202. #endif
  203.     };
  204.     [
  205.         uuid(C04D65D0-B70D-11D0-B188-00AA0038C969),
  206.         helpstring("IMLangStringWStr Interface"),
  207.         pointer_default(unique)
  208.     ]
  209.     interface IMLangStringWStr : IMLangString
  210.     {
  211.         [helpstring("method SetWStr")] HRESULT SetWStr([in] long lDestPos, [in] long lDestLen, [in, size_is(cchSrc)] const WCHAR* pszSrc, [in] long cchSrc, [out] long* pcchActual, [out] long* plActualLen);
  212.         [helpstring("method SetStrBufW")] HRESULT SetStrBufW([in] long lDestPos, [in] long lDestLen, [in] IMLangStringBufW* pSrcBuf, [out] long* pcchActual, [out] long* plActualLen);
  213.         [helpstring("method GetWStr")] HRESULT GetWStr([in] long lSrcPos, [in] long lSrcLen, [out, size_is(cchDest)] WCHAR* pszDest, [in] long cchDest, [out] long* pcchActual, [out] long* plActualLen);
  214.         [helpstring("method GetStrBufW")] HRESULT GetStrBufW([in] long lSrcPos, [in] long lSrcMaxLen, [out] IMLangStringBufW** ppDestBuf, [out] long* plDestLen);
  215.         [helpstring("method LockWStr")] HRESULT LockWStr([in] long lSrcPos, [in] long lSrcLen, [in] long lFlags, [in] long cchRequest, [out, size_is(,*pcchDest)] WCHAR** ppszDest, [out] long* pcchDest, [out] long* plDestLen);
  216.         [helpstring("method UnlockWStr")] HRESULT UnlockWStr([in, size_is(cchSrc)] const WCHAR* pszSrc, [in] long cchSrc, [out] long* pcchActual, [out] long* plActualLen);
  217.         [helpstring("method SetLocale")] HRESULT SetLocale([in] long lDestPos, [in] long lDestLen, [in] LCID locale);
  218.         [helpstring("method GetLocale")] HRESULT GetLocale([in] long lSrcPos, [in] long lSrcMaxLen, [out] LCID* plocale, [out] long* plLocalePos, [out] long* plLocaleLen);
  219.     };
  220.     [
  221.         uuid(C04D65D2-B70D-11D0-B188-00AA0038C969),
  222.         helpstring("IMLangStringAStr Interface"),
  223.         pointer_default(unique)
  224.     ]
  225.     interface IMLangStringAStr : IMLangString
  226.     {
  227.         [helpstring("method SetAStr")] HRESULT SetAStr([in] long lDestPos, [in] long lDestLen, [in] UINT uCodePage, [in, size_is(cchSrc)] const CHAR* pszSrc, [in] long cchSrc, [out] long* pcchActual, [out] long* plActualLen);
  228.         [helpstring("method SetStrBufA")] HRESULT SetStrBufA([in] long lDestPos, [in] long lDestLen, [in] UINT uCodePage, [in] IMLangStringBufA* pSrcBuf, [out] long* pcchActual, [out] long* plActualLen);
  229.         [helpstring("method GetAStr")] HRESULT GetAStr([in] long lSrcPos, [in] long lSrcLen, [in] UINT uCodePageIn, [out] UINT* puCodePageOut, [out, size_is(cchDest)] CHAR* pszDest, [in] long cchDest, [out] long* pcchActual, [out] long* plActualLen);
  230.         [helpstring("method GetStrBufA")] HRESULT GetStrBufA([in] long lSrcPos, [in] long lSrcMaxLen, [out] UINT* puDestCodePage, [out] IMLangStringBufA** ppDestBuf, [out] long* plDestLen);
  231.         [helpstring("method LockAStr")] HRESULT LockAStr([in] long lSrcPos, [in] long lSrcLen, [in] long lFlags, [in] UINT uCodePageIn, [in] long cchRequest, [out] UINT* puCodePageOut, [out, size_is(,*pcchDest)] CHAR** ppszDest, [out] long* pcchDest, [out] long* plDestLen);
  232.         [helpstring("method UnlockAStr")] HRESULT UnlockAStr([in, size_is(cchSrc)] const CHAR* pszSrc, [in] long cchSrc, [out] long* pcchActual, [out] long* plActualLen);
  233.         [helpstring("method SetLocale")] HRESULT SetLocale([in] long lDestPos, [in] long lDestLen, [in] LCID locale);
  234.         [helpstring("method GetLocale")] HRESULT GetLocale([in] long lSrcPos, [in] long lSrcMaxLen, [out] LCID* plocale, [out] long* plLocalePos, [out] long* plLocaleLen);
  235.     };
  236. #ifdef NEWMLSTR
  237.     [
  238.         uuid(4d94b420-5382-11d1-998c-00aa00601ea8),
  239.         helpstring("IMLangStringNotifySink Interface"),
  240.         pointer_default(unique)
  241.     ]
  242.     interface IMLangStringNotifySink : IUnknown
  243.     {
  244.         [helpstring("method OnRegisterAttr")] HRESULT OnRegisterAttr([in] IUnknown* pUnk);
  245.         [helpstring("method OnUnregisterAttr")] HRESULT OnUnregisterAttr([in] IUnknown* pUnk);
  246.         [helpstring("method OnRequestEdit")] HRESULT OnRequestEdit([in] long lDestPos, [in] long lDestLen, [in] long lNewLen, [in] REFIID riid, [in] LPARAM lParam, [in] IUnknown* pUnk);
  247.         [helpstring("method OnCanceledEdit")] HRESULT OnCanceledEdit([in] long lDestPos, [in] long lDestLen, [in] long lNewLen, [in] REFIID riid, [in] LPARAM lParam, [in] IUnknown* pUnk);
  248.         [helpstring("method OnChanged")] HRESULT OnChanged([in] long lDestPos, [in] long lDestLen, [in] long lNewLen, [in] REFIID riid, [in] LPARAM lParam, [in] IUnknown* pUnk);
  249.     };
  250. #endif
  251.     [
  252.         uuid(C04D65CF-B70D-11D0-B188-00AA0038C969),
  253.         helpstring("MLangString Class")
  254.     ]
  255.     coclass CMLangString
  256.     {
  257.         [default] interface IMLangString;
  258.         interface IMLangStringWStr;
  259.         interface IMLangStringAStr;
  260. #ifdef NEWMLSTR
  261.         [source] interface IMLangStringNotifySink;
  262. #endif
  263.     };
  264.     [
  265.         uuid(F5BE2EE1-BFD7-11D0-B188-00AA0038C969),
  266.         helpstring("IMLangLineBreakConsole Interface"),
  267.         pointer_default(unique)
  268.     ]
  269.     interface IMLangLineBreakConsole : IUnknown
  270.     {
  271.         [helpstring("method BreakLineML")] HRESULT BreakLineML([in] IMLangString* pSrcMLStr, [in] long lSrcPos, [in] long lSrcLen, [in] long cMinColumns, [in] long cMaxColumns, [out] long* plLineLen, [out] long* plSkipLen);
  272.         [helpstring("method BreakLineW")] HRESULT BreakLineW([in] LCID locale, [in, size_is(cchSrc)] const WCHAR* pszSrc, [in] long cchSrc, [in] long cMaxColumns, [out] long* pcchLine, [out] long* pcchSkip);
  273.         [helpstring("method BreakLineA")] HRESULT BreakLineA([in] LCID locale, [in] UINT uCodePage, [in, size_is(cchSrc)] const CHAR* pszSrc, [in] long cchSrc, [in] long cMaxColumns, [out] long* pcchLine, [out] long* pcchSkip);
  274.     };
  275.     [
  276.       object,
  277.       uuid(275c23e3-3747-11d0-9fea-00aa003f8646),
  278.       pointer_default(unique)
  279.     ]
  280.     interface IEnumCodePage : IUnknown
  281.     {
  282.         const USHORT MAX_MIMECP_NAME    = 64;
  283.         const USHORT MAX_MIMECSET_NAME  = 50;
  284.         const USHORT MAX_MIMEFACE_NAME  = 32;
  285.         typedef enum tagMIMECONTF
  286.         {
  287.             MIMECONTF_MAILNEWS          = 0x00000001,
  288.             MIMECONTF_BROWSER           = 0x00000002,
  289.             MIMECONTF_MINIMAL           = 0x00000004,
  290.             MIMECONTF_IMPORT            = 0x00000008,
  291.             MIMECONTF_SAVABLE_MAILNEWS  = 0x00000100,
  292.             MIMECONTF_SAVABLE_BROWSER   = 0x00000200,
  293.             MIMECONTF_EXPORT            = 0x00000400,
  294.             MIMECONTF_PRIVCONVERTER     = 0x00010000,
  295.             MIMECONTF_VALID             = 0x00020000,
  296.             MIMECONTF_VALID_NLS         = 0x00040000,
  297.             MIMECONTF_MIME_IE4          = 0x10000000,
  298.             MIMECONTF_MIME_LATEST       = 0x20000000,
  299.             MIMECONTF_MIME_REGISTRY     = 0x40000000
  300.         } MIMECONTF;
  301.         typedef struct tagMIMECPINFO
  302.         {
  303.             DWORD   dwFlags;
  304.             UINT    uiCodePage;
  305.             UINT    uiFamilyCodePage;
  306.             WCHAR   wszDescription[MAX_MIMECP_NAME];
  307.             WCHAR   wszWebCharset[MAX_MIMECSET_NAME];
  308.             WCHAR   wszHeaderCharset[MAX_MIMECSET_NAME];
  309.             WCHAR   wszBodyCharset[MAX_MIMECSET_NAME];
  310.             WCHAR   wszFixedWidthFont[MAX_MIMEFACE_NAME];
  311.             WCHAR   wszProportionalFont[MAX_MIMEFACE_NAME];
  312.             BYTE    bGDICharset;
  313.         } MIMECPINFO, *PMIMECPINFO;
  314.         typedef struct tagMIMECSETINFO
  315.         {
  316.             UINT    uiCodePage;
  317.             UINT    uiInternetEncoding;
  318.             WCHAR   wszCharset[MAX_MIMECSET_NAME];
  319.         } MIMECSETINFO, *PMIMECSETINFO;
  320.         typedef [unique] IEnumCodePage *LPENUMCODEPAGE;
  321.         HRESULT Clone
  322.         (
  323.             [out] IEnumCodePage **ppEnum
  324.         );
  325.         HRESULT Next
  326.         (
  327.             [in]  ULONG         celt,
  328.             [out] PMIMECPINFO   rgelt,
  329.             [out] ULONG         *pceltFetched
  330.         );
  331.         HRESULT Reset();
  332.         HRESULT Skip
  333.         (
  334.             [in]  ULONG         celt
  335.         );
  336.     };
  337.     [
  338.       object,
  339.       uuid(3dc39d1d-c030-11d0-b81b-00c04fc9b31f),
  340.       pointer_default(unique)
  341.     ]
  342.     interface IEnumRfc1766 : IUnknown
  343.     {
  344.         const USHORT MAX_RFC1766_NAME   = 6;
  345.         const USHORT MAX_LOCALE_NAME    = 32;
  346.         typedef struct tagRFC1766INFO
  347.         {
  348.             LCID    lcid;
  349.             WCHAR   wszRfc1766[MAX_RFC1766_NAME];
  350.             WCHAR   wszLocaleName[MAX_LOCALE_NAME];
  351.         } RFC1766INFO, *PRFC1766INFO;
  352.         typedef [unique] IEnumRfc1766 *LPENUMRFC1766;
  353.         HRESULT Clone
  354.         (
  355.             [out] IEnumRfc1766 **ppEnum
  356.         );
  357.         HRESULT Next
  358.         (
  359.             [in]  ULONG         celt,
  360.             [out] PRFC1766INFO  rgelt,
  361.             [out] ULONG         *pceltFetched
  362.         );
  363.         HRESULT Reset();
  364.         HRESULT Skip
  365.         (
  366.             [in]  ULONG         celt
  367.         );
  368.     };
  369.     [
  370.       object,
  371.       uuid(AE5F1430-388B-11d2-8380-00C04F8F5DA1),
  372.       pointer_default(unique)
  373.     ]
  374.     interface IEnumScript : IUnknown
  375.     {
  376.         const USHORT MAX_SCRIPT_NAME    = 48;
  377.         typedef BYTE    SCRIPT_ID;
  378.         typedef __int64 SCRIPT_IDS;
  379.         typedef enum tagSCRIPTCONTF
  380.         {
  381.             sidDefault,          // 0
  382.             sidMerge,            // 1
  383.             sidAsciiSym,         // 2
  384.             sidAsciiLatin,       // 3
  385.             sidLatin,            // 4
  386.             sidGreek,            // 5
  387.             sidCyrillic,         // 6
  388.             sidArmenian,         // 7
  389.             sidHebrew,           // 8
  390.             sidArabic,           // 9
  391.             sidDevanagari,       // 10
  392.             sidBengali,          // 11
  393.             sidGurmukhi,         // 12
  394.             sidGujarati,         // 13
  395.             sidOriya,            // 14
  396.             sidTamil,            // 15
  397.             sidTelugu,           // 16
  398.             sidKannada,          // 17
  399.             sidMalayalam,        // 18
  400.             sidThai,             // 19
  401.             sidLao,              // 20
  402.             sidTibetan,          // 21
  403.             sidGeorgian,         // 22
  404.             sidHangul,           // 23
  405.             sidKana,             // 24
  406.             sidBopomofo,         // 25
  407.             sidHan,              // 26
  408.             sidEthiopic,         // 27
  409.             sidCanSyllabic,      // 28
  410.             sidCherokee,         // 29
  411.             sidYi,               // 30
  412.             sidBraille,          // 31
  413.             sidRunic,            // 32
  414.             sidOgham,            // 33
  415.             sidSinhala,          // 34
  416.             sidSyriac,           // 35
  417.             sidBurmese,          // 36
  418.             sidKhmer,            // 37
  419.             sidThaana,           // 38
  420.             sidMongolian,        // 39
  421.             sidUserDefined,      // 40
  422.             sidLim,              // 41
  423.             sidFEFirst = sidHangul,
  424.             sidFELast = sidHan
  425.         } SCRIPTCONTF;
  426.         typedef struct tagSCRIPTINFO
  427.         {
  428.             SCRIPT_ID   ScriptId;
  429.             UINT        uiCodePage;                         
  430.             WCHAR       wszDescription[MAX_SCRIPT_NAME];    
  431.             WCHAR       wszFixedWidthFont[MAX_MIMEFACE_NAME];
  432.             WCHAR       wszProportionalFont[MAX_MIMEFACE_NAME];
  433.         } SCRIPTINFO, *PSCRIPTINFO;
  434.         typedef [unique] IEnumScript *LPENUMScript;
  435.         HRESULT Clone
  436.         (
  437.             [out] IEnumScript **ppEnum
  438.         );
  439.         HRESULT Next
  440.         (
  441.             [in]  ULONG         celt,
  442.             [out] PSCRIPTINFO   rgelt,
  443.             [out] ULONG         *pceltFetched
  444.         );
  445.         HRESULT Reset();
  446.         HRESULT Skip
  447.         (
  448.             [in]  ULONG         celt
  449.         );
  450.     };
  451.     [
  452.       object,
  453.       uuid(d66d6f98-cdaa-11d0-b822-00c04fc9b31f),
  454.       pointer_default(unique)
  455.     ]
  456.     interface IMLangConvertCharset : IUnknown
  457.     {
  458.         typedef enum tagMLCONVCHARF
  459.         {
  460.             MLCONVCHARF_AUTODETECT      = 1,
  461.             MLCONVCHARF_ENTITIZE        = 2,
  462.             MLCONVCHARF_NCR_ENTITIZE    = 2,
  463.             MLCONVCHARF_NAME_ENTITIZE   = 4,
  464.             MLCONVCHARF_USEDEFCHAR      = 8,
  465.             MLCONVCHARF_NOBESTFITCHARS  = 16,
  466.             MLCONVCHARF_DETECTJPN       = 32
  467.         } MLCONVCHAR;
  468.         typedef enum tagMLCPF
  469.         {
  470.             MLDETECTF_MAILNEWS          = 0x0001, // Outgoing encoding for mail client
  471.             MLDETECTF_BROWSER           = 0x0002, // Outgoing encoding for browser client
  472.             MLDETECTF_VALID             = 0x0004, // Detection result must be valid for conversion and text rendering
  473.             MLDETECTF_VALID_NLS         = 0x0008, // Detection result must be valid for conversion
  474.             MLDETECTF_PRESERVE_ORDER    = 0x0010, // Perserve perferred code page order
  475.             MLDETECTF_PREFERRED_ONLY    = 0x0020, // Only return one of preferred code pages as detection result
  476.             MLDETECTF_FILTER_SPECIALCHAR= 0x0040, // Filter out graphical symbols and punctuations
  477.         } MLCP;
  478.         typedef [unique] IMLangConvertCharset *LPMLANGCONVERTCHARSET;
  479.         HRESULT Initialize
  480.         (
  481.             [in]  UINT  uiSrcCodePage,
  482.             [in]  UINT  uiDstCodePage,
  483.             [in]  DWORD dwProperty
  484.         );
  485.         HRESULT GetSourceCodePage
  486.         (
  487.             [out] UINT  *puiSrcCodePage
  488.         );
  489.         HRESULT GetDestinationCodePage
  490.         (
  491.             [out] UINT  *puiDstCodePage
  492.         );
  493.         HRESULT GetProperty
  494.         (
  495.             [out] DWORD *pdwProperty
  496.         );
  497.         HRESULT DoConversion
  498.         (
  499.             [in]  BYTE          *pSrcStr,
  500.             [in,out]  UINT      *pcSrcSize,
  501.             [in]  BYTE          *pDstStr,
  502.             [in,out]  UINT      *pcDstSize
  503.         );
  504.         HRESULT DoConversionToUnicode
  505.         (
  506.             [in]  CHAR          *pSrcStr,
  507.             [in,out]  UINT      *pcSrcSize,
  508.             [in]  WCHAR         *pDstStr,
  509.             [in,out]  UINT      *pcDstSize
  510.         );
  511.         HRESULT DoConversionFromUnicode
  512.         (
  513.             [in]  WCHAR         *pSrcStr,
  514.             [in,out]  UINT      *pcSrcSize,
  515.             [in]  CHAR          *pDstStr,
  516.             [in,out]  UINT      *pcDstSize
  517.         );
  518.     };
  519.     [
  520.       uuid(d66d6f99-cdaa-11d0-b822-00c04fc9b31f),
  521.     ]
  522.     coclass CMLangConvertCharset
  523.     {
  524.         [default] interface IMLangConvertCharset;
  525.     };
  526.     [
  527.       object,
  528.       uuid(275c23e1-3747-11d0-9fea-00aa003f8646),
  529.       pointer_default(unique)
  530.     ]
  531.     interface IMultiLanguage : IUnknown
  532.     {
  533.         typedef [unique] IMultiLanguage *LPMULTILANGUAGE;
  534.         HRESULT GetNumberOfCodePageInfo
  535.         (
  536.             [out] UINT          *pcCodePage
  537.         );
  538.         HRESULT GetCodePageInfo
  539.         (
  540.             [in]  UINT          uiCodePage,
  541.             [out] PMIMECPINFO   pCodePageInfo
  542.         );
  543.         HRESULT GetFamilyCodePage
  544.         (
  545.             [in]  UINT          uiCodePage,
  546.             [out] UINT          *puiFamilyCodePage
  547.         );
  548.         HRESULT EnumCodePages
  549.         (
  550.             [in]  DWORD         grfFlags,
  551.             [out] IEnumCodePage **ppEnumCodePage
  552.         );
  553.         HRESULT GetCharsetInfo
  554.         (
  555.             [in]  BSTR          Charset,
  556.             [out] PMIMECSETINFO pCharsetInfo
  557.         );
  558.         HRESULT IsConvertible
  559.         (
  560.             [in]  DWORD         dwSrcEncoding,
  561.             [in]  DWORD         dwDstEncoding
  562.         );
  563.         HRESULT ConvertString
  564.         (
  565.             [in,out]  DWORD     *pdwMode,
  566.             [in]  DWORD         dwSrcEncoding,
  567.             [in]  DWORD         dwDstEncoding,
  568.             [in]  BYTE          *pSrcStr,
  569.             [in,out]  UINT      *pcSrcSize,
  570.             [in]  BYTE          *pDstStr,
  571.             [in,out]  UINT      *pcDstSize
  572.         );
  573.         HRESULT ConvertStringToUnicode
  574.         (
  575.             [in,out]  DWORD     *pdwMode,
  576.             [in]  DWORD         dwEncoding,
  577.             [in]  CHAR          *pSrcStr,
  578.             [in,out]  UINT      *pcSrcSize,
  579.             [in]  WCHAR         *pDstStr,
  580.             [in,out]  UINT      *pcDstSize
  581.         );
  582.         HRESULT ConvertStringFromUnicode
  583.         (
  584.             [in,out]  DWORD     *pdwMode,
  585.             [in]  DWORD         dwEncoding,
  586.             [in]  WCHAR         *pSrcStr,
  587.             [in,out]  UINT      *pcSrcSize,
  588.             [in]  CHAR          *pDstStr,
  589.             [in,out]  UINT      *pcDstSize
  590.         );
  591.         HRESULT ConvertStringReset();
  592.         HRESULT GetRfc1766FromLcid
  593.         (
  594.             [in]  LCID          Locale,
  595.             [out] BSTR          *pbstrRfc1766
  596.         );
  597.         HRESULT GetLcidFromRfc1766
  598.         (
  599.             [out] LCID          *pLocale,
  600.             [in]  BSTR          bstrRfc1766
  601.         );
  602.         HRESULT EnumRfc1766
  603.         (
  604.             [out] IEnumRfc1766 **ppEnumRfc1766
  605.         );
  606.         HRESULT GetRfc1766Info
  607.         (
  608.             [in]  LCID          Locale,
  609.             [out] PRFC1766INFO  pRfc1766Info
  610.         );
  611.         HRESULT CreateConvertCharset
  612.         (
  613.             [in]  UINT          uiSrcCodePage,
  614.             [in]  UINT          uiDstCodePage,
  615.             [in]  DWORD         dwProperty,
  616.             [out] IMLangConvertCharset **ppMLangConvertCharset
  617.         );
  618.     };
  619. cpp_quote("// dwfIODControl definitions for ValidateCodePageEx()")
  620. cpp_quote("#define CPIOD_PEEK          0x40000000L")
  621. cpp_quote("#define CPIOD_FORCE_PROMPT  0x80000000L")
  622.     [
  623.       object,
  624.       uuid(DCCFC164-2B38-11d2-B7EC-00C04F8F5D9A),
  625.       pointer_default(unique)
  626.     ]
  627.     interface IMultiLanguage2 : IUnknown
  628.     {
  629.         typedef [unique] IMultiLanguage2 *LPMULTILANGUAGE2;
  630.         typedef enum tagMLDETECTCP
  631.         {
  632.             MLDETECTCP_NONE     = 0,
  633.             MLDETECTCP_7BIT     = 1,
  634.             MLDETECTCP_8BIT     = 2,
  635.             MLDETECTCP_DBCS     = 4,
  636.             MLDETECTCP_HTML     = 8,
  637.             MLDETECTCP_NUMBER   = 16
  638.         } MLDETECTCP ;
  639.         typedef struct tagDetectEncodingInfo
  640.         {
  641.             UINT     nLangID;            // Win32 primary language ID
  642.             UINT     nCodePage;          // Win32 code page (valid for SBCS and DBCS input only!)
  643.             INT     nDocPercent;        // % of doc in this language, 0-100
  644.             INT     nConfidence;        // Relative confidence measure, approx 0-100
  645.         } DetectEncodingInfo, *pDetectEncodingInfo;
  646.         typedef enum tagSCRIPTFONTCONTF
  647.         {
  648.             SCRIPTCONTF_FIXED_FONT          = 0x00000001,
  649.             SCRIPTCONTF_PROPORTIONAL_FONT   = 0x00000002,
  650.             SCRIPTCONTF_SCRIPT_USER     = 0x00010000,
  651.             SCRIPTCONTF_SCRIPT_HIDE         = 0x00020000,
  652.             SCRIPTCONTF_SCRIPT_SYSTEM       = 0x00040000
  653.         } SCRIPTFONTCONTF;
  654.         typedef struct tagSCRIPFONTINFO
  655.         {
  656.             SCRIPT_IDS  scripts;
  657.             WCHAR       wszFont[MAX_MIMEFACE_NAME];
  658.         } SCRIPTFONTINFO, *PSCRIPTFONTINFO;
  659.         HRESULT GetNumberOfCodePageInfo
  660.         (
  661.             [out] UINT          *pcCodePage
  662.         );
  663.         HRESULT GetCodePageInfo
  664.         (
  665.             [in]  UINT          uiCodePage,
  666.             [in]  LANGID        LangId,
  667.             [out] PMIMECPINFO   pCodePageInfo
  668.         );
  669.         HRESULT GetFamilyCodePage
  670.         (
  671.             [in]  UINT          uiCodePage,
  672.             [out] UINT          *puiFamilyCodePage
  673.         );
  674.         HRESULT EnumCodePages
  675.         (
  676.             [in]  DWORD         grfFlags,
  677.             [in]  LANGID        LangId,
  678.             [out] IEnumCodePage **ppEnumCodePage
  679.         );
  680.         HRESULT GetCharsetInfo
  681.         (
  682.             [in]  BSTR          Charset,
  683.             [out] PMIMECSETINFO pCharsetInfo
  684.         );
  685.         HRESULT IsConvertible
  686.         (
  687.             [in]  DWORD         dwSrcEncoding,
  688.             [in]  DWORD         dwDstEncoding
  689.         );
  690.         HRESULT ConvertString
  691.         (
  692.             [in,out]  DWORD     *pdwMode,
  693.             [in]  DWORD         dwSrcEncoding,
  694.             [in]  DWORD         dwDstEncoding,
  695.             [in]  BYTE          *pSrcStr,
  696.             [in,out]  UINT      *pcSrcSize,
  697.             [in]  BYTE          *pDstStr,
  698.             [in,out]  UINT      *pcDstSize
  699.         );
  700.         HRESULT ConvertStringToUnicode
  701.         (
  702.             [in,out]  DWORD     *pdwMode,
  703.             [in]  DWORD         dwEncoding,
  704.             [in]  CHAR          *pSrcStr,
  705.             [in,out]  UINT      *pcSrcSize,
  706.             [in]  WCHAR         *pDstStr,
  707.             [in,out]  UINT      *pcDstSize
  708.         );
  709.         HRESULT ConvertStringFromUnicode
  710.         (
  711.             [in,out]  DWORD     *pdwMode,
  712.             [in]  DWORD         dwEncoding,
  713.             [in]  WCHAR         *pSrcStr,
  714.             [in,out]  UINT      *pcSrcSize,
  715.             [in]  CHAR          *pDstStr,
  716.             [in,out]  UINT      *pcDstSize
  717.         );
  718.         HRESULT ConvertStringReset();
  719.         HRESULT GetRfc1766FromLcid
  720.         (
  721.             [in]  LCID          Locale,
  722.             [out] BSTR          *pbstrRfc1766
  723.         );
  724.         HRESULT GetLcidFromRfc1766
  725.         (
  726.             [out] LCID          *pLocale,
  727.             [in]  BSTR          bstrRfc1766
  728.         );
  729.         HRESULT EnumRfc1766
  730.         (
  731.             [in]  LANGID       LangId,
  732.             [out] IEnumRfc1766 **ppEnumRfc1766
  733.         );
  734.         HRESULT GetRfc1766Info
  735.         (
  736.             [in]  LCID          Locale,
  737.             [in]  LANGID        LangId,
  738.             [out] PRFC1766INFO  pRfc1766Info
  739.         );
  740.         HRESULT CreateConvertCharset
  741.         (
  742.             [in]  UINT          uiSrcCodePage,
  743.             [in]  UINT          uiDstCodePage,
  744.             [in]  DWORD         dwProperty,
  745.             [out] IMLangConvertCharset **ppMLangConvertCharset
  746.         );
  747.         HRESULT ConvertStringInIStream
  748.         (
  749.             [in,out]  DWORD     *pdwMode,
  750.             [in]  DWORD         dwFlag,
  751.             [in]  WCHAR         *lpFallBack,
  752.             [in]  DWORD         dwSrcEncoding,
  753.             [in]  DWORD         dwDstEncoding,
  754.             [in]  IStream       *pstmIn,
  755.             [in]  IStream       *pstmOut
  756.         );
  757.         HRESULT ConvertStringToUnicodeEx
  758.         (
  759.             [in,out]  DWORD     *pdwMode,
  760.             [in]  DWORD         dwEncoding,
  761.             [in]  CHAR          *pSrcStr,
  762.             [in,out]  UINT      *pcSrcSize,
  763.             [in]  WCHAR         *pDstStr,
  764.             [in,out]  UINT      *pcDstSize,
  765.             [in]  DWORD         dwFlag,
  766.             [in]  WCHAR         *lpFallBack
  767.         );
  768.         HRESULT ConvertStringFromUnicodeEx
  769.         (
  770.             [in,out]  DWORD     *pdwMode,
  771.             [in]  DWORD         dwEncoding,
  772.             [in]  WCHAR         *pSrcStr,
  773.             [in,out]  UINT      *pcSrcSize,
  774.             [in]  CHAR          *pDstStr,
  775.             [in,out]  UINT      *pcDstSize,
  776.             [in]  DWORD         dwFlag,
  777.             [in]  WCHAR         *lpFallBack
  778.         );
  779.         HRESULT DetectCodepageInIStream
  780.         (
  781.             [in]  DWORD     dwFlag,
  782.             [in]  DWORD     dwPrefWinCodePage,
  783.             [in]  IStream   *pstmIn,
  784.             [in,out] DetectEncodingInfo *lpEncoding,
  785.             [in,out] INT    *pnScores
  786.         );
  787.         HRESULT DetectInputCodepage
  788.         (
  789.             [in]  DWORD     dwFlag,
  790.             [in]  DWORD     dwPrefWinCodePage,
  791.             [in]  CHAR      *pSrcStr,
  792.             [in,out] INT    *pcSrcSize,
  793.             [in,out] DetectEncodingInfo *lpEncoding,
  794.             [in,out] INT    *pnScores
  795.         );
  796.         HRESULT ValidateCodePage
  797.         (
  798.             [in] UINT      uiCodePage,
  799.             [in] HWND      hwnd
  800.         );
  801.         HRESULT GetCodePageDescription
  802.         (
  803.             [in] UINT uiCodePage,
  804.             [in] LCID lcid, 
  805.             [in,out]LPWSTR lpWideCharStr,
  806.             [in]  int cchWideChar
  807.         );
  808.         HRESULT IsCodePageInstallable
  809.         (
  810.             [in] UINT      uiCodePage
  811.         );
  812.         HRESULT SetMimeDBSource
  813.         (
  814.             [in] MIMECONTF dwSource
  815.         );
  816.         HRESULT GetNumberOfScripts
  817.         (
  818.             [out] UINT          *pnScripts
  819.         );
  820.         HRESULT EnumScripts
  821.         (
  822.             [in]  DWORD         dwFlags,
  823.             [in]  LANGID        LangId,
  824.             [out] IEnumScript   **ppEnumScript
  825.         );
  826.         HRESULT ValidateCodePageEx
  827.         (
  828.             [in] UINT      uiCodePage,
  829.             [in] HWND      hwnd,
  830.             [in] DWORD     dwfIODControl
  831.         );
  832.     };
  833.     [
  834.         uuid(359F3443-BD4A-11D0-B188-00AA0038C969),
  835.         helpstring("IMLangCodePages Interface"),
  836.         pointer_default(unique)
  837.     ]
  838.     interface IMLangCodePages : IUnknown
  839.     {
  840.         typedef [unique] IMLangCodePages* PMLANGCODEPAGES;
  841.         [helpstring("method GetCharCodePages")] HRESULT GetCharCodePages([in] WCHAR chSrc, [out] DWORD* pdwCodePages);
  842.         [helpstring("method GetStrCodePages")] HRESULT GetStrCodePages([in, size_is(cchSrc)] const WCHAR* pszSrc, [in] long cchSrc, [in] DWORD dwPriorityCodePages, [out] DWORD* pdwCodePages, [out] long* pcchCodePages);
  843.         [helpstring("method CodePageToCodePages")] HRESULT CodePageToCodePages([in] UINT uCodePage, [out] DWORD* pdwCodePages);
  844.         [helpstring("method CodePagesToCodePage")] HRESULT CodePagesToCodePage([in] DWORD dwCodePages, [in] UINT uDefaultCodePage, [out] UINT* puCodePage);
  845.     };
  846.     [
  847.         uuid(359F3441-BD4A-11D0-B188-00AA0038C969),
  848.         helpstring("IMLangFontLink Interface"),
  849.         pointer_default(unique)
  850.     ]
  851.     interface IMLangFontLink : IMLangCodePages
  852.     {
  853.         typedef [unique] IMLangFontLink* PMLANGFONTLINK;
  854.         [helpstring("method GetFontCodePages")] HRESULT GetFontCodePages([in] HDC hDC, [in] HFONT hFont, [out] DWORD* pdwCodePages);
  855.         [helpstring("method MapFont")] HRESULT MapFont([in] HDC hDC, [in] DWORD dwCodePages, [in] HFONT hSrcFont, [out] HFONT* phDestFont);
  856.         [helpstring("method ReleaseFont")] HRESULT ReleaseFont([in] HFONT hFont);
  857.         [helpstring("method ResetFontMapping")] HRESULT ResetFontMapping();
  858.     };
  859.     [
  860.         uuid(DCCFC162-2B38-11d2-B7EC-00C04F8F5D9A),
  861.         helpstring("IMLangFontLink2 Interface"),
  862.         pointer_default(unique)
  863.     ]
  864.     interface IMLangFontLink2 : IMLangCodePages
  865.     {
  866.         typedef struct tagUNICODERANGE
  867.         {
  868.             WCHAR wcFrom;
  869.             WCHAR wcTo;
  870.         } UNICODERANGE;
  871.         typedef [unique] IMLangFontLink2* PMLANGFONTLINK2;
  872.         [helpstring("method GetFontCodePages")] HRESULT GetFontCodePages([in] HDC hDC, [in] HFONT hFont, [out] DWORD* pdwCodePages);
  873.         [helpstring("method ReleaseFont")] HRESULT ReleaseFont([in] HFONT hFont);
  874.         [helpstring("method ResetFontMapping")] HRESULT ResetFontMapping();
  875.         [helpstring("method MapFont")] HRESULT MapFont([in] HDC hDC, [in] DWORD dwCodePages,  [in] WCHAR chSrc, [out] HFONT* pFont );
  876.         [helpstring("method GetFontUnicodeRanges")] HRESULT GetFontUnicodeRanges([in] HDC hDC, [in,out] UINT *puiRanges, [out] UNICODERANGE* pUranges);
  877.         [helpstring("method GetScriptFontInfo")]HRESULT GetScriptFontInfo([in] SCRIPT_ID sid, [in] DWORD dwFlags, [in, out] UINT *puiFonts, [out] SCRIPTFONTINFO* pScriptFont);
  878.         [helpstring("method CodePageToScriptID")] HRESULT CodePageToScriptID([in] UINT uiCodePage, [out] SCRIPT_ID *pSid);
  879.     };
  880.     [
  881.       object,
  882.       uuid(4e5868ab-b157-4623-9acc-6a1d9caebe04),
  883.       pointer_default(unique)
  884.     ]
  885.     interface IMultiLanguage3 : IMultiLanguage2
  886.     {
  887.        typedef [unique] IMultiLanguage3 *LPMULTILANGUAGE3;
  888.        HRESULT DetectOutboundCodePage(
  889.             [in] DWORD           dwFlags,                
  890.             [in] LPCWSTR         lpWideCharStr,          
  891.             [in] UINT            cchWideChar,            
  892.             [in] UINT*           puiPreferredCodePages,  
  893.             [in] UINT            nPreferredCodePages,    
  894.             [in] UINT*           puiDetectedCodePages,   
  895.             [in, out] UINT*      pnDetectedCodePages,    
  896.             [in] WCHAR *         lpSpecialChar
  897.             );
  898.        HRESULT DetectOutboundCodePageInIStream(
  899.             [in] DWORD          dwFlags,                
  900.             [in] IStream*       pStrIn,                 
  901.             [in] UINT*          puiPreferredCodePages,
  902.             [in] UINT           nPreferredCodePages,    
  903.             [in] UINT*          puiDetectedCodePages,   
  904.             [in, out] UINT*     pnDetectedCodePages,                                                        
  905.             [in] WCHAR *        lpSpecialChar           
  906.             );
  907.     };
  908.     [
  909.       uuid(275c23e2-3747-11d0-9fea-00aa003f8646),
  910.     ]
  911.     coclass CMultiLanguage
  912.     {
  913.         [default] interface IMultiLanguage;
  914.         interface IMLangCodePages;
  915.         interface IMLangFontLink;
  916.         interface IMLangLineBreakConsole;
  917.         interface IMultiLanguage2;
  918.         interface IMLangFontLink2;
  919.         interface IMultiLanguage3;
  920.     };
  921. }
  922. cpp_quote("#ifndef _MLANG_H_API_DEF_                                                     ")
  923. cpp_quote("#define _MLANG_H_API_DEF_                                                     ")
  924. cpp_quote("                                                                              ")
  925. cpp_quote("// APIs prototypes                                                            ")
  926. cpp_quote("STDAPI LcidToRfc1766A(LCID Locale, LPSTR pszRfc1766, int iMaxLength);         ")
  927. cpp_quote("STDAPI LcidToRfc1766W(LCID Locale, LPWSTR pszRfc1766, int nChar);             ")
  928. cpp_quote("#ifdef UNICODE                                                                ")
  929. cpp_quote("#define LcidToRfc1766        LcidToRfc1766W                                   ")
  930. cpp_quote("#else                                                                         ")
  931. cpp_quote("#define LcidToRfc1766        LcidToRfc1766A                                   ")
  932. cpp_quote("#endif                                                                        ")
  933. cpp_quote("STDAPI Rfc1766ToLcidA(LCID *pLocale, LPCSTR pszRfc1766);                      ")
  934. cpp_quote("STDAPI Rfc1766ToLcidW(LCID *pLocale, LPCWSTR pszRfc1766);                     ")
  935. cpp_quote("#ifdef UNICODE                                                                ")
  936. cpp_quote("#define Rfc1766ToLcid        Rfc1766ToLcidW                                   ")
  937. cpp_quote("#else                                                                         ")
  938. cpp_quote("#define Rfc1766ToLcid        Rfc1766ToLcidA                                   ")
  939. cpp_quote("#endif                                                                        ")
  940. cpp_quote("                                                                              ")
  941. cpp_quote("STDAPI IsConvertINetStringAvailable(DWORD dwSrcEncoding, DWORD dwDstEncoding);")
  942. cpp_quote("STDAPI ConvertINetString(LPDWORD lpdwMode, DWORD dwSrcEncoding, DWORD dwDstEncoding, LPCSTR lpSrcStr, LPINT lpnSrcSize, LPSTR lpDstStr, LPINT lpnDstSize);   ")
  943. cpp_quote("STDAPI ConvertINetMultiByteToUnicode(LPDWORD lpdwMode, DWORD dwEncoding, LPCSTR lpSrcStr, LPINT lpnMultiCharCount, LPWSTR lpDstStr, LPINT lpnWideCharCount); ")
  944. cpp_quote("STDAPI ConvertINetUnicodeToMultiByte(LPDWORD lpdwMode, DWORD dwEncoding, LPCWSTR lpSrcStr, LPINT lpnWideCharCount, LPSTR lpDstStr, LPINT lpnMultiCharCount); ")
  945. cpp_quote("                                                                              ")
  946. cpp_quote("#endif // _MLANG_H_API_DEF_                                                   ")