/*** Autogenerated by WIDL 9.0 from include/sapiddk.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __sapiddk_h__
#define __sapiddk_h__

#ifndef __WIDL_INLINE
#if defined(__cplusplus) || defined(_MSC_VER)
#define __WIDL_INLINE inline
#elif defined(__GNUC__)
#define __WIDL_INLINE __inline__
#endif
#endif

/* Forward declarations */

#ifndef __ISpObjectTokenEnumBuilder_FWD_DEFINED__
#define __ISpObjectTokenEnumBuilder_FWD_DEFINED__
typedef interface ISpObjectTokenEnumBuilder ISpObjectTokenEnumBuilder;
#ifdef __cplusplus
interface ISpObjectTokenEnumBuilder;
#endif /* __cplusplus */
#endif

#ifndef __ISpTTSEngineSite_FWD_DEFINED__
#define __ISpTTSEngineSite_FWD_DEFINED__
typedef interface ISpTTSEngineSite ISpTTSEngineSite;
#ifdef __cplusplus
interface ISpTTSEngineSite;
#endif /* __cplusplus */
#endif

#ifndef __ISpTTSEngine_FWD_DEFINED__
#define __ISpTTSEngine_FWD_DEFINED__
typedef interface ISpTTSEngine ISpTTSEngine;
#ifdef __cplusplus
interface ISpTTSEngine;
#endif /* __cplusplus */
#endif

#ifndef __SpDataKey_FWD_DEFINED__
#define __SpDataKey_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpDataKey SpDataKey;
#else
typedef struct SpDataKey SpDataKey;
#endif /* defined __cplusplus */
#endif /* defined __SpDataKey_FWD_DEFINED__ */

#ifndef __SpObjectTokenEnum_FWD_DEFINED__
#define __SpObjectTokenEnum_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpObjectTokenEnum SpObjectTokenEnum;
#else
typedef struct SpObjectTokenEnum SpObjectTokenEnum;
#endif /* defined __cplusplus */
#endif /* defined __SpObjectTokenEnum_FWD_DEFINED__ */

/* Headers for imported files */

#include <oaidl.h>
#include <ocidl.h>
#include <sapi.h>

#ifdef __cplusplus
extern "C" {
#endif

/*****************************************************************************
 * ISpObjectTokenEnumBuilder interface
 */
#ifndef __ISpObjectTokenEnumBuilder_INTERFACE_DEFINED__
#define __ISpObjectTokenEnumBuilder_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpObjectTokenEnumBuilder, 0x06b64f9f, 0x7fda, 0x11d2, 0xb4,0xf2, 0x00,0xc0,0x4f,0x79,0x73,0x96);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("06b64f9f-7fda-11d2-b4f2-00c04f797396")
ISpObjectTokenEnumBuilder : public IEnumSpObjectTokens
{
    virtual HRESULT STDMETHODCALLTYPE SetAttribs(
        LPCWSTR pszReqAttribs,
        LPCWSTR pszOptAttribs) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddTokens(
        ULONG cTokens,
        ISpObjectToken **pToken) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddTokensFromDataKey(
        ISpDataKey *pDataKey,
        LPCWSTR pszSubKey,
        LPCWSTR pszCategoryId) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddTokensFromTokenEnum(
        IEnumSpObjectTokens *pTokenEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE Sort(
        LPCWSTR pszTokenIdToListFirst) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpObjectTokenEnumBuilder, 0x06b64f9f, 0x7fda, 0x11d2, 0xb4,0xf2, 0x00,0xc0,0x4f,0x79,0x73,0x96)
#endif
#else
typedef struct ISpObjectTokenEnumBuilderVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IEnumSpObjectTokens methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        ISpObjectTokenEnumBuilder *This,
        ULONG celt,
        ISpObjectToken **pelt,
        ULONG *pceltFetched);

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

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

    HRESULT (STDMETHODCALLTYPE *Clone)(
        ISpObjectTokenEnumBuilder *This,
        IEnumSpObjectTokens **ppEnum);

    HRESULT (STDMETHODCALLTYPE *Item)(
        ISpObjectTokenEnumBuilder *This,
        ULONG Index,
        ISpObjectToken **ppToken);

    HRESULT (STDMETHODCALLTYPE *GetCount)(
        ISpObjectTokenEnumBuilder *This,
        ULONG *pCount);

    /*** ISpObjectTokenEnumBuilder methods ***/
    HRESULT (STDMETHODCALLTYPE *SetAttribs)(
        ISpObjectTokenEnumBuilder *This,
        LPCWSTR pszReqAttribs,
        LPCWSTR pszOptAttribs);

    HRESULT (STDMETHODCALLTYPE *AddTokens)(
        ISpObjectTokenEnumBuilder *This,
        ULONG cTokens,
        ISpObjectToken **pToken);

    HRESULT (STDMETHODCALLTYPE *AddTokensFromDataKey)(
        ISpObjectTokenEnumBuilder *This,
        ISpDataKey *pDataKey,
        LPCWSTR pszSubKey,
        LPCWSTR pszCategoryId);

    HRESULT (STDMETHODCALLTYPE *AddTokensFromTokenEnum)(
        ISpObjectTokenEnumBuilder *This,
        IEnumSpObjectTokens *pTokenEnum);

    HRESULT (STDMETHODCALLTYPE *Sort)(
        ISpObjectTokenEnumBuilder *This,
        LPCWSTR pszTokenIdToListFirst);

    END_INTERFACE
} ISpObjectTokenEnumBuilderVtbl;

interface ISpObjectTokenEnumBuilder {
    CONST_VTBL ISpObjectTokenEnumBuilderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpObjectTokenEnumBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpObjectTokenEnumBuilder_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpObjectTokenEnumBuilder_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumSpObjectTokens methods ***/
#define ISpObjectTokenEnumBuilder_Next(This,celt,pelt,pceltFetched) (This)->lpVtbl->Next(This,celt,pelt,pceltFetched)
#define ISpObjectTokenEnumBuilder_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
#define ISpObjectTokenEnumBuilder_Reset(This) (This)->lpVtbl->Reset(This)
#define ISpObjectTokenEnumBuilder_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
#define ISpObjectTokenEnumBuilder_Item(This,Index,ppToken) (This)->lpVtbl->Item(This,Index,ppToken)
#define ISpObjectTokenEnumBuilder_GetCount(This,pCount) (This)->lpVtbl->GetCount(This,pCount)
/*** ISpObjectTokenEnumBuilder methods ***/
#define ISpObjectTokenEnumBuilder_SetAttribs(This,pszReqAttribs,pszOptAttribs) (This)->lpVtbl->SetAttribs(This,pszReqAttribs,pszOptAttribs)
#define ISpObjectTokenEnumBuilder_AddTokens(This,cTokens,pToken) (This)->lpVtbl->AddTokens(This,cTokens,pToken)
#define ISpObjectTokenEnumBuilder_AddTokensFromDataKey(This,pDataKey,pszSubKey,pszCategoryId) (This)->lpVtbl->AddTokensFromDataKey(This,pDataKey,pszSubKey,pszCategoryId)
#define ISpObjectTokenEnumBuilder_AddTokensFromTokenEnum(This,pTokenEnum) (This)->lpVtbl->AddTokensFromTokenEnum(This,pTokenEnum)
#define ISpObjectTokenEnumBuilder_Sort(This,pszTokenIdToListFirst) (This)->lpVtbl->Sort(This,pszTokenIdToListFirst)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ISpObjectTokenEnumBuilder_QueryInterface(ISpObjectTokenEnumBuilder* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ISpObjectTokenEnumBuilder_AddRef(ISpObjectTokenEnumBuilder* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ISpObjectTokenEnumBuilder_Release(ISpObjectTokenEnumBuilder* This) {
    return This->lpVtbl->Release(This);
}
/*** IEnumSpObjectTokens methods ***/
static __WIDL_INLINE HRESULT ISpObjectTokenEnumBuilder_Next(ISpObjectTokenEnumBuilder* This,ULONG celt,ISpObjectToken **pelt,ULONG *pceltFetched) {
    return This->lpVtbl->Next(This,celt,pelt,pceltFetched);
}
static __WIDL_INLINE HRESULT ISpObjectTokenEnumBuilder_Skip(ISpObjectTokenEnumBuilder* This,ULONG celt) {
    return This->lpVtbl->Skip(This,celt);
}
static __WIDL_INLINE HRESULT ISpObjectTokenEnumBuilder_Reset(ISpObjectTokenEnumBuilder* This) {
    return This->lpVtbl->Reset(This);
}
static __WIDL_INLINE HRESULT ISpObjectTokenEnumBuilder_Clone(ISpObjectTokenEnumBuilder* This,IEnumSpObjectTokens **ppEnum) {
    return This->lpVtbl->Clone(This,ppEnum);
}
static __WIDL_INLINE HRESULT ISpObjectTokenEnumBuilder_Item(ISpObjectTokenEnumBuilder* This,ULONG Index,ISpObjectToken **ppToken) {
    return This->lpVtbl->Item(This,Index,ppToken);
}
static __WIDL_INLINE HRESULT ISpObjectTokenEnumBuilder_GetCount(ISpObjectTokenEnumBuilder* This,ULONG *pCount) {
    return This->lpVtbl->GetCount(This,pCount);
}
/*** ISpObjectTokenEnumBuilder methods ***/
static __WIDL_INLINE HRESULT ISpObjectTokenEnumBuilder_SetAttribs(ISpObjectTokenEnumBuilder* This,LPCWSTR pszReqAttribs,LPCWSTR pszOptAttribs) {
    return This->lpVtbl->SetAttribs(This,pszReqAttribs,pszOptAttribs);
}
static __WIDL_INLINE HRESULT ISpObjectTokenEnumBuilder_AddTokens(ISpObjectTokenEnumBuilder* This,ULONG cTokens,ISpObjectToken **pToken) {
    return This->lpVtbl->AddTokens(This,cTokens,pToken);
}
static __WIDL_INLINE HRESULT ISpObjectTokenEnumBuilder_AddTokensFromDataKey(ISpObjectTokenEnumBuilder* This,ISpDataKey *pDataKey,LPCWSTR pszSubKey,LPCWSTR pszCategoryId) {
    return This->lpVtbl->AddTokensFromDataKey(This,pDataKey,pszSubKey,pszCategoryId);
}
static __WIDL_INLINE HRESULT ISpObjectTokenEnumBuilder_AddTokensFromTokenEnum(ISpObjectTokenEnumBuilder* This,IEnumSpObjectTokens *pTokenEnum) {
    return This->lpVtbl->AddTokensFromTokenEnum(This,pTokenEnum);
}
static __WIDL_INLINE HRESULT ISpObjectTokenEnumBuilder_Sort(ISpObjectTokenEnumBuilder* This,LPCWSTR pszTokenIdToListFirst) {
    return This->lpVtbl->Sort(This,pszTokenIdToListFirst);
}
#endif
#endif

#endif


#endif  /* __ISpObjectTokenEnumBuilder_INTERFACE_DEFINED__ */

typedef enum SPVSKIPTYPE {
    SPVST_SENTENCE = 1 << 0
} SPVSKIPTYPE;
typedef enum SPVESACTIONS {
    SPVES_CONTINUE = 0,
    SPVES_ABORT = 1 << 0,
    SPVES_SKIP = 1 << 1,
    SPVES_RATE = 1 << 2,
    SPVES_VOLUME = 1 << 3
} SPVESACTIONS;
/*****************************************************************************
 * ISpTTSEngineSite interface
 */
#ifndef __ISpTTSEngineSite_INTERFACE_DEFINED__
#define __ISpTTSEngineSite_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpTTSEngineSite, 0x9880499b, 0xcce9, 0x11d2, 0xb5,0x03, 0x00,0xc0,0x4f,0x79,0x73,0x96);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9880499b-cce9-11d2-b503-00c04f797396")
ISpTTSEngineSite : public ISpEventSink
{
    virtual DWORD STDMETHODCALLTYPE GetActions(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Write(
        const void *pBuff,
        ULONG cb,
        ULONG *pcbWritten) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRate(
        LONG *pRateAdjust) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVolume(
        USHORT *pusVolume) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSkipInfo(
        SPVSKIPTYPE *peType,
        LONG *plNumItems) = 0;

    virtual HRESULT STDMETHODCALLTYPE CompleteSkip(
        LONG lNumSkipped) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpTTSEngineSite, 0x9880499b, 0xcce9, 0x11d2, 0xb5,0x03, 0x00,0xc0,0x4f,0x79,0x73,0x96)
#endif
#else
typedef struct ISpTTSEngineSiteVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpEventSink methods ***/
    HRESULT (STDMETHODCALLTYPE *AddEvents)(
        ISpTTSEngineSite *This,
        const SPEVENT *events,
        ULONG count);

    HRESULT (STDMETHODCALLTYPE *GetEventInterest)(
        ISpTTSEngineSite *This,
        ULONGLONG *interest);

    /*** ISpTTSEngineSite methods ***/
    DWORD (STDMETHODCALLTYPE *GetActions)(
        ISpTTSEngineSite *This);

    HRESULT (STDMETHODCALLTYPE *Write)(
        ISpTTSEngineSite *This,
        const void *pBuff,
        ULONG cb,
        ULONG *pcbWritten);

    HRESULT (STDMETHODCALLTYPE *GetRate)(
        ISpTTSEngineSite *This,
        LONG *pRateAdjust);

    HRESULT (STDMETHODCALLTYPE *GetVolume)(
        ISpTTSEngineSite *This,
        USHORT *pusVolume);

    HRESULT (STDMETHODCALLTYPE *GetSkipInfo)(
        ISpTTSEngineSite *This,
        SPVSKIPTYPE *peType,
        LONG *plNumItems);

    HRESULT (STDMETHODCALLTYPE *CompleteSkip)(
        ISpTTSEngineSite *This,
        LONG lNumSkipped);

    END_INTERFACE
} ISpTTSEngineSiteVtbl;

interface ISpTTSEngineSite {
    CONST_VTBL ISpTTSEngineSiteVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpTTSEngineSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpTTSEngineSite_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpTTSEngineSite_Release(This) (This)->lpVtbl->Release(This)
/*** ISpEventSink methods ***/
#define ISpTTSEngineSite_AddEvents(This,events,count) (This)->lpVtbl->AddEvents(This,events,count)
#define ISpTTSEngineSite_GetEventInterest(This,interest) (This)->lpVtbl->GetEventInterest(This,interest)
/*** ISpTTSEngineSite methods ***/
#define ISpTTSEngineSite_GetActions(This) (This)->lpVtbl->GetActions(This)
#define ISpTTSEngineSite_Write(This,pBuff,cb,pcbWritten) (This)->lpVtbl->Write(This,pBuff,cb,pcbWritten)
#define ISpTTSEngineSite_GetRate(This,pRateAdjust) (This)->lpVtbl->GetRate(This,pRateAdjust)
#define ISpTTSEngineSite_GetVolume(This,pusVolume) (This)->lpVtbl->GetVolume(This,pusVolume)
#define ISpTTSEngineSite_GetSkipInfo(This,peType,plNumItems) (This)->lpVtbl->GetSkipInfo(This,peType,plNumItems)
#define ISpTTSEngineSite_CompleteSkip(This,lNumSkipped) (This)->lpVtbl->CompleteSkip(This,lNumSkipped)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ISpTTSEngineSite_QueryInterface(ISpTTSEngineSite* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ISpTTSEngineSite_AddRef(ISpTTSEngineSite* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ISpTTSEngineSite_Release(ISpTTSEngineSite* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpEventSink methods ***/
static __WIDL_INLINE HRESULT ISpTTSEngineSite_AddEvents(ISpTTSEngineSite* This,const SPEVENT *events,ULONG count) {
    return This->lpVtbl->AddEvents(This,events,count);
}
static __WIDL_INLINE HRESULT ISpTTSEngineSite_GetEventInterest(ISpTTSEngineSite* This,ULONGLONG *interest) {
    return This->lpVtbl->GetEventInterest(This,interest);
}
/*** ISpTTSEngineSite methods ***/
static __WIDL_INLINE DWORD ISpTTSEngineSite_GetActions(ISpTTSEngineSite* This) {
    return This->lpVtbl->GetActions(This);
}
static __WIDL_INLINE HRESULT ISpTTSEngineSite_Write(ISpTTSEngineSite* This,const void *pBuff,ULONG cb,ULONG *pcbWritten) {
    return This->lpVtbl->Write(This,pBuff,cb,pcbWritten);
}
static __WIDL_INLINE HRESULT ISpTTSEngineSite_GetRate(ISpTTSEngineSite* This,LONG *pRateAdjust) {
    return This->lpVtbl->GetRate(This,pRateAdjust);
}
static __WIDL_INLINE HRESULT ISpTTSEngineSite_GetVolume(ISpTTSEngineSite* This,USHORT *pusVolume) {
    return This->lpVtbl->GetVolume(This,pusVolume);
}
static __WIDL_INLINE HRESULT ISpTTSEngineSite_GetSkipInfo(ISpTTSEngineSite* This,SPVSKIPTYPE *peType,LONG *plNumItems) {
    return This->lpVtbl->GetSkipInfo(This,peType,plNumItems);
}
static __WIDL_INLINE HRESULT ISpTTSEngineSite_CompleteSkip(ISpTTSEngineSite* This,LONG lNumSkipped) {
    return This->lpVtbl->CompleteSkip(This,lNumSkipped);
}
#endif
#endif

#endif


#endif  /* __ISpTTSEngineSite_INTERFACE_DEFINED__ */

typedef struct SPVTEXTFRAG {
    struct SPVTEXTFRAG *pNext;
    SPVSTATE State;
    LPCWSTR pTextStart;
    ULONG ulTextLen;
    ULONG ulTextSrcOffset;
} SPVTEXTFRAG;
/*****************************************************************************
 * ISpTTSEngine interface
 */
#ifndef __ISpTTSEngine_INTERFACE_DEFINED__
#define __ISpTTSEngine_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpTTSEngine, 0xa74d7c8e, 0x4cc5, 0x4f2f, 0xa6,0xeb, 0x80,0x4d,0xee,0x18,0x50,0x0e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a74d7c8e-4cc5-4f2f-a6eb-804dee18500e")
ISpTTSEngine : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Speak(
        DWORD dwSpeakFlags,
        REFGUID rguidFormatId,
        const WAVEFORMATEX *pWaveFormatEx,
        const SPVTEXTFRAG *pTextFragList,
        ISpTTSEngineSite *pOutputSite) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputFormat(
        const GUID *pTargetFmtId,
        const WAVEFORMATEX *pTargetWaveFormatEx,
        GUID *pOutputFormatId,
        WAVEFORMATEX **ppCoMemOutputWaveFormatEx) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpTTSEngine, 0xa74d7c8e, 0x4cc5, 0x4f2f, 0xa6,0xeb, 0x80,0x4d,0xee,0x18,0x50,0x0e)
#endif
#else
typedef struct ISpTTSEngineVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpTTSEngine methods ***/
    HRESULT (STDMETHODCALLTYPE *Speak)(
        ISpTTSEngine *This,
        DWORD dwSpeakFlags,
        REFGUID rguidFormatId,
        const WAVEFORMATEX *pWaveFormatEx,
        const SPVTEXTFRAG *pTextFragList,
        ISpTTSEngineSite *pOutputSite);

    HRESULT (STDMETHODCALLTYPE *GetOutputFormat)(
        ISpTTSEngine *This,
        const GUID *pTargetFmtId,
        const WAVEFORMATEX *pTargetWaveFormatEx,
        GUID *pOutputFormatId,
        WAVEFORMATEX **ppCoMemOutputWaveFormatEx);

    END_INTERFACE
} ISpTTSEngineVtbl;

interface ISpTTSEngine {
    CONST_VTBL ISpTTSEngineVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpTTSEngine_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpTTSEngine_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpTTSEngine_Release(This) (This)->lpVtbl->Release(This)
/*** ISpTTSEngine methods ***/
#define ISpTTSEngine_Speak(This,dwSpeakFlags,rguidFormatId,pWaveFormatEx,pTextFragList,pOutputSite) (This)->lpVtbl->Speak(This,dwSpeakFlags,rguidFormatId,pWaveFormatEx,pTextFragList,pOutputSite)
#define ISpTTSEngine_GetOutputFormat(This,pTargetFmtId,pTargetWaveFormatEx,pOutputFormatId,ppCoMemOutputWaveFormatEx) (This)->lpVtbl->GetOutputFormat(This,pTargetFmtId,pTargetWaveFormatEx,pOutputFormatId,ppCoMemOutputWaveFormatEx)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ISpTTSEngine_QueryInterface(ISpTTSEngine* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ISpTTSEngine_AddRef(ISpTTSEngine* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ISpTTSEngine_Release(ISpTTSEngine* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpTTSEngine methods ***/
static __WIDL_INLINE HRESULT ISpTTSEngine_Speak(ISpTTSEngine* This,DWORD dwSpeakFlags,REFGUID rguidFormatId,const WAVEFORMATEX *pWaveFormatEx,const SPVTEXTFRAG *pTextFragList,ISpTTSEngineSite *pOutputSite) {
    return This->lpVtbl->Speak(This,dwSpeakFlags,rguidFormatId,pWaveFormatEx,pTextFragList,pOutputSite);
}
static __WIDL_INLINE HRESULT ISpTTSEngine_GetOutputFormat(ISpTTSEngine* This,const GUID *pTargetFmtId,const WAVEFORMATEX *pTargetWaveFormatEx,GUID *pOutputFormatId,WAVEFORMATEX **ppCoMemOutputWaveFormatEx) {
    return This->lpVtbl->GetOutputFormat(This,pTargetFmtId,pTargetWaveFormatEx,pOutputFormatId,ppCoMemOutputWaveFormatEx);
}
#endif
#endif

#endif


#endif  /* __ISpTTSEngine_INTERFACE_DEFINED__ */

#ifndef __SpeechDDKLib_LIBRARY_DEFINED__
#define __SpeechDDKLib_LIBRARY_DEFINED__

DEFINE_GUID(LIBID_SpeechDDKLib, 0x9903f14c, 0x12ce, 0x4c99, 0x99,0x86, 0x2e,0xe3,0xd7,0xd5,0x88,0xa8);

/*****************************************************************************
 * SpDataKey coclass
 */

DEFINE_GUID(CLSID_SpDataKey, 0xd9f6ee60, 0x58c9, 0x458b, 0x88,0xe1, 0x2f,0x90,0x8f,0xd7,0xf8,0x7c);

#ifdef __cplusplus
class DECLSPEC_UUID("d9f6ee60-58c9-458b-88e1-2f908fd7f87c") SpDataKey;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpDataKey, 0xd9f6ee60, 0x58c9, 0x458b, 0x88,0xe1, 0x2f,0x90,0x8f,0xd7,0xf8,0x7c)
#endif
#endif

/*****************************************************************************
 * SpObjectTokenEnum coclass
 */

DEFINE_GUID(CLSID_SpObjectTokenEnum, 0x3918d75f, 0x0acb, 0x41f2, 0xb7,0x33, 0x92,0xaa,0x15,0xbc,0xec,0xf6);

#ifdef __cplusplus
class DECLSPEC_UUID("3918d75f-0acb-41f2-b733-92aa15bcecf6") SpObjectTokenEnum;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpObjectTokenEnum, 0x3918d75f, 0x0acb, 0x41f2, 0xb7,0x33, 0x92,0xaa,0x15,0xbc,0xec,0xf6)
#endif
#endif

#endif /* __SpeechDDKLib_LIBRARY_DEFINED__ */
/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __sapiddk_h__ */
