/*** Autogenerated by WIDL 5.0 from sapi.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 __sapi_h__
#define __sapi_h__

/* Forward declarations */

#ifndef __ISpDataKey_FWD_DEFINED__
#define __ISpDataKey_FWD_DEFINED__
typedef interface ISpDataKey ISpDataKey;
#ifdef __cplusplus
interface ISpDataKey;
#endif /* __cplusplus */
#endif

#ifndef __ISpRegDataKey_FWD_DEFINED__
#define __ISpRegDataKey_FWD_DEFINED__
typedef interface ISpRegDataKey ISpRegDataKey;
#ifdef __cplusplus
interface ISpRegDataKey;
#endif /* __cplusplus */
#endif

#ifndef __ISpObjectTokenCategory_FWD_DEFINED__
#define __ISpObjectTokenCategory_FWD_DEFINED__
typedef interface ISpObjectTokenCategory ISpObjectTokenCategory;
#ifdef __cplusplus
interface ISpObjectTokenCategory;
#endif /* __cplusplus */
#endif

#ifndef __ISpObjectToken_FWD_DEFINED__
#define __ISpObjectToken_FWD_DEFINED__
typedef interface ISpObjectToken ISpObjectToken;
#ifdef __cplusplus
interface ISpObjectToken;
#endif /* __cplusplus */
#endif

#ifndef __IEnumSpObjectTokens_FWD_DEFINED__
#define __IEnumSpObjectTokens_FWD_DEFINED__
typedef interface IEnumSpObjectTokens IEnumSpObjectTokens;
#ifdef __cplusplus
interface IEnumSpObjectTokens;
#endif /* __cplusplus */
#endif

#ifndef __ISpPhrase_FWD_DEFINED__
#define __ISpPhrase_FWD_DEFINED__
typedef interface ISpPhrase ISpPhrase;
#ifdef __cplusplus
interface ISpPhrase;
#endif /* __cplusplus */
#endif

#ifndef __ISpPhraseAlt_FWD_DEFINED__
#define __ISpPhraseAlt_FWD_DEFINED__
typedef interface ISpPhraseAlt ISpPhraseAlt;
#ifdef __cplusplus
interface ISpPhraseAlt;
#endif /* __cplusplus */
#endif

#ifndef __ISpRecoResult_FWD_DEFINED__
#define __ISpRecoResult_FWD_DEFINED__
typedef interface ISpRecoResult ISpRecoResult;
#ifdef __cplusplus
interface ISpRecoResult;
#endif /* __cplusplus */
#endif

#ifndef __ISpGrammarBuilder_FWD_DEFINED__
#define __ISpGrammarBuilder_FWD_DEFINED__
typedef interface ISpGrammarBuilder ISpGrammarBuilder;
#ifdef __cplusplus
interface ISpGrammarBuilder;
#endif /* __cplusplus */
#endif

#ifndef __ISpRecoGrammar_FWD_DEFINED__
#define __ISpRecoGrammar_FWD_DEFINED__
typedef interface ISpRecoGrammar ISpRecoGrammar;
#ifdef __cplusplus
interface ISpRecoGrammar;
#endif /* __cplusplus */
#endif

#ifndef __ISpNotifySink_FWD_DEFINED__
#define __ISpNotifySink_FWD_DEFINED__
typedef interface ISpNotifySink ISpNotifySink;
#ifdef __cplusplus
interface ISpNotifySink;
#endif /* __cplusplus */
#endif

#ifndef __ISpVoice_FWD_DEFINED__
#define __ISpVoice_FWD_DEFINED__
typedef interface ISpVoice ISpVoice;
#ifdef __cplusplus
interface ISpVoice;
#endif /* __cplusplus */
#endif

#ifndef __ISpNotifySource_FWD_DEFINED__
#define __ISpNotifySource_FWD_DEFINED__
typedef interface ISpNotifySource ISpNotifySource;
#ifdef __cplusplus
interface ISpNotifySource;
#endif /* __cplusplus */
#endif

#ifndef __ISpEventSource_FWD_DEFINED__
#define __ISpEventSource_FWD_DEFINED__
typedef interface ISpEventSource ISpEventSource;
#ifdef __cplusplus
interface ISpEventSource;
#endif /* __cplusplus */
#endif

#ifndef __ISpRecoContext_FWD_DEFINED__
#define __ISpRecoContext_FWD_DEFINED__
typedef interface ISpRecoContext ISpRecoContext;
#ifdef __cplusplus
interface ISpRecoContext;
#endif /* __cplusplus */
#endif

#ifndef __ISpStreamFormat_FWD_DEFINED__
#define __ISpStreamFormat_FWD_DEFINED__
typedef interface ISpStreamFormat ISpStreamFormat;
#ifdef __cplusplus
interface ISpStreamFormat;
#endif /* __cplusplus */
#endif

#ifndef __ISpProperties_FWD_DEFINED__
#define __ISpProperties_FWD_DEFINED__
typedef interface ISpProperties ISpProperties;
#ifdef __cplusplus
interface ISpProperties;
#endif /* __cplusplus */
#endif

#ifndef __ISpRecognizer_FWD_DEFINED__
#define __ISpRecognizer_FWD_DEFINED__
typedef interface ISpRecognizer ISpRecognizer;
#ifdef __cplusplus
interface ISpRecognizer;
#endif /* __cplusplus */
#endif

#ifndef __ISpStream_FWD_DEFINED__
#define __ISpStream_FWD_DEFINED__
typedef interface ISpStream ISpStream;
#ifdef __cplusplus
interface ISpStream;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechDataKey_FWD_DEFINED__
#define __ISpeechDataKey_FWD_DEFINED__
typedef interface ISpeechDataKey ISpeechDataKey;
#ifdef __cplusplus
interface ISpeechDataKey;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechObjectTokenCategory_FWD_DEFINED__
#define __ISpeechObjectTokenCategory_FWD_DEFINED__
typedef interface ISpeechObjectTokenCategory ISpeechObjectTokenCategory;
#ifdef __cplusplus
interface ISpeechObjectTokenCategory;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechObjectToken_FWD_DEFINED__
#define __ISpeechObjectToken_FWD_DEFINED__
typedef interface ISpeechObjectToken ISpeechObjectToken;
#ifdef __cplusplus
interface ISpeechObjectToken;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechObjectTokens_FWD_DEFINED__
#define __ISpeechObjectTokens_FWD_DEFINED__
typedef interface ISpeechObjectTokens ISpeechObjectTokens;
#ifdef __cplusplus
interface ISpeechObjectTokens;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechWaveFormatEx_FWD_DEFINED__
#define __ISpeechWaveFormatEx_FWD_DEFINED__
typedef interface ISpeechWaveFormatEx ISpeechWaveFormatEx;
#ifdef __cplusplus
interface ISpeechWaveFormatEx;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechAudioFormat_FWD_DEFINED__
#define __ISpeechAudioFormat_FWD_DEFINED__
typedef interface ISpeechAudioFormat ISpeechAudioFormat;
#ifdef __cplusplus
interface ISpeechAudioFormat;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechBaseStream_FWD_DEFINED__
#define __ISpeechBaseStream_FWD_DEFINED__
typedef interface ISpeechBaseStream ISpeechBaseStream;
#ifdef __cplusplus
interface ISpeechBaseStream;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechAudioStatus_FWD_DEFINED__
#define __ISpeechAudioStatus_FWD_DEFINED__
typedef interface ISpeechAudioStatus ISpeechAudioStatus;
#ifdef __cplusplus
interface ISpeechAudioStatus;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechRecognizerStatus_FWD_DEFINED__
#define __ISpeechRecognizerStatus_FWD_DEFINED__
typedef interface ISpeechRecognizerStatus ISpeechRecognizerStatus;
#ifdef __cplusplus
interface ISpeechRecognizerStatus;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechVoiceStatus_FWD_DEFINED__
#define __ISpeechVoiceStatus_FWD_DEFINED__
typedef interface ISpeechVoiceStatus ISpeechVoiceStatus;
#ifdef __cplusplus
interface ISpeechVoiceStatus;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechVoice_FWD_DEFINED__
#define __ISpeechVoice_FWD_DEFINED__
typedef interface ISpeechVoice ISpeechVoice;
#ifdef __cplusplus
interface ISpeechVoice;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechRecoResultTimes_FWD_DEFINED__
#define __ISpeechRecoResultTimes_FWD_DEFINED__
typedef interface ISpeechRecoResultTimes ISpeechRecoResultTimes;
#ifdef __cplusplus
interface ISpeechRecoResultTimes;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseRules_FWD_DEFINED__
#define __ISpeechPhraseRules_FWD_DEFINED__
typedef interface ISpeechPhraseRules ISpeechPhraseRules;
#ifdef __cplusplus
interface ISpeechPhraseRules;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseRule_FWD_DEFINED__
#define __ISpeechPhraseRule_FWD_DEFINED__
typedef interface ISpeechPhraseRule ISpeechPhraseRule;
#ifdef __cplusplus
interface ISpeechPhraseRule;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseProperty_FWD_DEFINED__
#define __ISpeechPhraseProperty_FWD_DEFINED__
typedef interface ISpeechPhraseProperty ISpeechPhraseProperty;
#ifdef __cplusplus
interface ISpeechPhraseProperty;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseProperties_FWD_DEFINED__
#define __ISpeechPhraseProperties_FWD_DEFINED__
typedef interface ISpeechPhraseProperties ISpeechPhraseProperties;
#ifdef __cplusplus
interface ISpeechPhraseProperties;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseElement_FWD_DEFINED__
#define __ISpeechPhraseElement_FWD_DEFINED__
typedef interface ISpeechPhraseElement ISpeechPhraseElement;
#ifdef __cplusplus
interface ISpeechPhraseElement;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseElements_FWD_DEFINED__
#define __ISpeechPhraseElements_FWD_DEFINED__
typedef interface ISpeechPhraseElements ISpeechPhraseElements;
#ifdef __cplusplus
interface ISpeechPhraseElements;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseReplacement_FWD_DEFINED__
#define __ISpeechPhraseReplacement_FWD_DEFINED__
typedef interface ISpeechPhraseReplacement ISpeechPhraseReplacement;
#ifdef __cplusplus
interface ISpeechPhraseReplacement;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseReplacements_FWD_DEFINED__
#define __ISpeechPhraseReplacements_FWD_DEFINED__
typedef interface ISpeechPhraseReplacements ISpeechPhraseReplacements;
#ifdef __cplusplus
interface ISpeechPhraseReplacements;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseInfo_FWD_DEFINED__
#define __ISpeechPhraseInfo_FWD_DEFINED__
typedef interface ISpeechPhraseInfo ISpeechPhraseInfo;
#ifdef __cplusplus
interface ISpeechPhraseInfo;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseAlternate_FWD_DEFINED__
#define __ISpeechPhraseAlternate_FWD_DEFINED__
typedef interface ISpeechPhraseAlternate ISpeechPhraseAlternate;
#ifdef __cplusplus
interface ISpeechPhraseAlternate;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseAlternates_FWD_DEFINED__
#define __ISpeechPhraseAlternates_FWD_DEFINED__
typedef interface ISpeechPhraseAlternates ISpeechPhraseAlternates;
#ifdef __cplusplus
interface ISpeechPhraseAlternates;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechMemoryStream_FWD_DEFINED__
#define __ISpeechMemoryStream_FWD_DEFINED__
typedef interface ISpeechMemoryStream ISpeechMemoryStream;
#ifdef __cplusplus
interface ISpeechMemoryStream;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechRecoResult_FWD_DEFINED__
#define __ISpeechRecoResult_FWD_DEFINED__
typedef interface ISpeechRecoResult ISpeechRecoResult;
#ifdef __cplusplus
interface ISpeechRecoResult;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechGrammarRuleStateTransition_FWD_DEFINED__
#define __ISpeechGrammarRuleStateTransition_FWD_DEFINED__
typedef interface ISpeechGrammarRuleStateTransition ISpeechGrammarRuleStateTransition;
#ifdef __cplusplus
interface ISpeechGrammarRuleStateTransition;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechGrammarRuleStateTransitions_FWD_DEFINED__
#define __ISpeechGrammarRuleStateTransitions_FWD_DEFINED__
typedef interface ISpeechGrammarRuleStateTransitions ISpeechGrammarRuleStateTransitions;
#ifdef __cplusplus
interface ISpeechGrammarRuleStateTransitions;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechGrammarRuleState_FWD_DEFINED__
#define __ISpeechGrammarRuleState_FWD_DEFINED__
typedef interface ISpeechGrammarRuleState ISpeechGrammarRuleState;
#ifdef __cplusplus
interface ISpeechGrammarRuleState;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechGrammarRule_FWD_DEFINED__
#define __ISpeechGrammarRule_FWD_DEFINED__
typedef interface ISpeechGrammarRule ISpeechGrammarRule;
#ifdef __cplusplus
interface ISpeechGrammarRule;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechTextSelectionInformation_FWD_DEFINED__
#define __ISpeechTextSelectionInformation_FWD_DEFINED__
typedef interface ISpeechTextSelectionInformation ISpeechTextSelectionInformation;
#ifdef __cplusplus
interface ISpeechTextSelectionInformation;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechGrammarRules_FWD_DEFINED__
#define __ISpeechGrammarRules_FWD_DEFINED__
typedef interface ISpeechGrammarRules ISpeechGrammarRules;
#ifdef __cplusplus
interface ISpeechGrammarRules;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechRecoGrammar_FWD_DEFINED__
#define __ISpeechRecoGrammar_FWD_DEFINED__
typedef interface ISpeechRecoGrammar ISpeechRecoGrammar;
#ifdef __cplusplus
interface ISpeechRecoGrammar;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechRecoContext_FWD_DEFINED__
#define __ISpeechRecoContext_FWD_DEFINED__
typedef interface ISpeechRecoContext ISpeechRecoContext;
#ifdef __cplusplus
interface ISpeechRecoContext;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechRecognizer_FWD_DEFINED__
#define __ISpeechRecognizer_FWD_DEFINED__
typedef interface ISpeechRecognizer ISpeechRecognizer;
#ifdef __cplusplus
interface ISpeechRecognizer;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechFileStream_FWD_DEFINED__
#define __ISpeechFileStream_FWD_DEFINED__
typedef interface ISpeechFileStream ISpeechFileStream;
#ifdef __cplusplus
interface ISpeechFileStream;
#endif /* __cplusplus */
#endif

#ifndef __SpObjectTokenCategory_FWD_DEFINED__
#define __SpObjectTokenCategory_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpObjectTokenCategory SpObjectTokenCategory;
#else
typedef struct SpObjectTokenCategory SpObjectTokenCategory;
#endif /* defined __cplusplus */
#endif /* defined __SpObjectTokenCategory_FWD_DEFINED__ */

#ifndef __SpSharedRecognizer_FWD_DEFINED__
#define __SpSharedRecognizer_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpSharedRecognizer SpSharedRecognizer;
#else
typedef struct SpSharedRecognizer SpSharedRecognizer;
#endif /* defined __cplusplus */
#endif /* defined __SpSharedRecognizer_FWD_DEFINED__ */

#ifndef __SpVoice_FWD_DEFINED__
#define __SpVoice_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpVoice SpVoice;
#else
typedef struct SpVoice SpVoice;
#endif /* defined __cplusplus */
#endif /* defined __SpVoice_FWD_DEFINED__ */

#ifndef __SpFileStream_FWD_DEFINED__
#define __SpFileStream_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpFileStream SpFileStream;
#else
typedef struct SpFileStream SpFileStream;
#endif /* defined __cplusplus */
#endif /* defined __SpFileStream_FWD_DEFINED__ */

/* Headers for imported files */

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

#ifdef __cplusplus
extern "C" {
#endif

#if 0
typedef struct WAVEFORMATEX {
    WORD wFormatTag;
    WORD nChannels;
    DWORD nSamplesPerSec;
    DWORD nAvgBytesPerSec;
    WORD nBlockAlign;
    WORD wBitsPerSample;
    WORD cbSize;
} WAVEFORMATEX;
#else
#include <mmsystem.h>
#endif
#if defined(__cplusplus)
interface ISpNotifyCallback
{
virtual HRESULT STDMETHODCALLTYPE NotifyCallback(WPARAM wParam, LPARAM lParam) = 0;
};
#else
typedef void *ISpNotifyCallback;
#endif
#if 0
typedef void *SPNOTIFYCALLBACK;
typedef void *SPSTATEHANDLE;
#endif
typedef struct SPEVENT {
    WORD eEventId;
    WORD elParamType;
    ULONG ulStreamNum;
    ULONGLONG ullAudioStreamOffset;
    WPARAM wParam;
    LPARAM lParam;
} SPEVENT;
typedef void __stdcall SPNOTIFYCALLBACK(WPARAM wParam, LPARAM lParam);
DECLARE_HANDLE(SPSTATEHANDLE);
#define SP_MAX_LANGIDS (20)

typedef struct SPEVENTSOURCEINFO {
    ULONGLONG ullEventInterest;
    ULONGLONG ullQueuedInterest;
    ULONG ulCount;
} SPEVENTSOURCEINFO;
typedef enum SPGRAMMARWORDTYPE {
    SPWT_DISPLAY = 0,
    SPWT_LEXICAL = 1,
    SPWT_PRONUNCIATION = 2,
    SPWT_LEXICAL_NO_SPECIAL_CHARS = 3
} SPGRAMMARWORDTYPE;
typedef struct tagSPPROPERTYINFO {
    const WCHAR *pszName;
    ULONG ulId;
    const WCHAR *pszValue;
    VARIANT vValue;
} SPPROPERTYINFO;
typedef enum SPDATAKEYLOCATION {
    SPDKL_DefaultLocation = 0,
    SPDKL_CurrentUser = 1,
    SPDKL_LocalMachine = 2,
    SPDKL_CurrentConfig = 5
} SPDATAKEYLOCATION;
typedef enum SPLOADOPTIONS {
    SPLO_STATIC = 0,
    SPLO_DYNAMIC = 1
} SPLOADOPTIONS;
typedef enum SPRULESTATE {
    SPRS_INACTIVE = 0,
    SPRS_ACTIVE = 1,
    SPRS_ACTIVE_WITH_AUTO_PAUSE = 3,
    SPRS_ACTIVE_USER_DELIMITED = 4
} SPRULESTATE;
typedef enum SPGRAMMARSTATE {
    SPGS_DISABLED = 0,
    SPGS_ENABLED = 1,
    SPGS_EXCLUSIVE = 3
} SPGRAMMARSTATE;
typedef struct SPBINARYGRAMMAR {
    ULONG ulTotalSerializedSize;
} SPBINARYGRAMMAR;
typedef struct tagSPTEXTSELECTIONINFO {
    ULONG ulStartActiveOffset;
    ULONG cchActiveChars;
    ULONG ulStartSelection;
    ULONG cchSelection;
} SPTEXTSELECTIONINFO;
typedef enum SPWORDPRONOUNCEABLE {
    SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE = 0,
    SPWP_UNKNOWN_WORD_PRONOUNCEABLE = 1,
    SPWP_KNOWN_WORD_PRONOUNCEABLE = 2
} SPWORDPRONOUNCEABLE;
typedef enum SPINTERFERENCE {
    SPINTERFERENCE_NONE = 0,
    SPINTERFERENCE_NOISE = 1,
    SPINTERFERENCE_NOSIGNAL = 2,
    SPINTERFERENCE_TOOLOUD = 3,
    SPINTERFERENCE_TOOQUIET = 4,
    SPINTERFERENCE_TOOFAST = 5,
    SPINTERFERENCE_TOOSLOW = 6
} SPINTERFERENCE;
typedef enum SPVISEMES {
    SP_VISEME_0 = 0,
    SP_VISEME_1 = 1,
    SP_VISEME_2 = 2,
    SP_VISEME_3 = 3,
    SP_VISEME_4 = 4,
    SP_VISEME_5 = 5,
    SP_VISEME_6 = 6,
    SP_VISEME_7 = 7,
    SP_VISEME_8 = 8,
    SP_VISEME_9 = 9,
    SP_VISEME_10 = 10,
    SP_VISEME_11 = 11,
    SP_VISEME_12 = 12,
    SP_VISEME_13 = 13,
    SP_VISEME_14 = 14,
    SP_VISEME_15 = 15,
    SP_VISEME_16 = 16,
    SP_VISEME_17 = 17,
    SP_VISEME_18 = 18,
    SP_VISEME_19 = 19,
    SP_VISEME_20 = 20,
    SP_VISEME_21 = 21
} SPVISEMES;
typedef enum SPEVENTENUM {
    SPEI_UNDEFINED = 0,
    SPEI_START_INPUT_STREAM = 1,
    SPEI_END_INPUT_STREAM = 2,
    SPEI_VOICE_CHANGE = 3,
    SPEI_TTS_BOOKMARK = 4,
    SPEI_WORD_BOUNDARY = 5,
    SPEI_PHONEME = 6,
    SPEI_SENTENCE_BOUNDARY = 7,
    SPEI_VISEME = 8,
    SPEI_TTS_AUDIO_LEVEL = 9,
    SPEI_TTS_PRIVATE = 15,
    SPEI_MIN_TTS = 1,
    SPEI_MAX_TTS = 15,
    SPEI_END_SR_STREAM = 34,
    SPEI_SOUND_START = 35,
    SPEI_SOUND_END = 36,
    SPEI_PHRASE_START = 37,
    SPEI_RECOGNITION = 38,
    SPEI_HYPOTHESIS = 39,
    SPEI_SR_BOOKMARK = 40,
    SPEI_PROPERTY_NUM_CHANGE = 41,
    SPEI_PROPERTY_STRING_CHANGE = 42,
    SPEI_FALSE_RECOGNITION = 43,
    SPEI_INTERFERENCE = 44,
    SPEI_REQUEST_UI = 45,
    SPEI_RECO_STATE_CHANGE = 46,
    SPEI_ADAPTATION = 47,
    SPEI_START_SR_STREAM = 48,
    SPEI_RECO_OTHER_CONTEXT = 49,
    SPEI_SR_AUDIO_LEVEL = 50,
    SPEI_SR_RETAINEDAUDIO = 51,
    SPEI_SR_PRIVATE = 52,
    SPEI_ACTIVE_CATEGORY_CHANGED = 53,
    SPEI_MIN_SR = 34,
    SPEI_MAX_SR = 55,
    SPEI_RESERVED1 = 30,
    SPEI_RESERVED2 = 33,
    SPEI_RESERVED3 = 63
} SPEVENTENUM;
typedef enum SPCONTEXTSTATE {
    SPCS_DISABLED = 0,
    SPCS_ENABLED = 1
} SPCONTEXTSTATE;
typedef enum SPVPRIORITY {
    SPVPRI_NORMAL = 0,
    SPVPRI_ALERT = 1,
    SPVPRI_OVER = 2
} SPVPRIORITY;
typedef enum SPRECOSTATE {
    SPRST_INACTIVE = 0,
    SPRST_ACTIVE = 1,
    SPRST_ACTIVE_ALWAYS = 2,
    SPRST_INACTIVE_WITH_PURGE = 3,
    SPRST_NUM_STATES = 4
} SPRECOSTATE;
typedef enum SPWAVEFORMATTYPE {
    SPWF_INPUT = 0,
    SPWF_SRENGINE = 1
} SPSTREAMFORMATTYPE;
typedef struct SPRECOCONTEXTSTATUS {
    SPINTERFERENCE eInterference;
    WCHAR szRequestTypeOfUI[255];
    DWORD dwReserved1;
    DWORD dwReserved2;
} SPRECOCONTEXTSTATUS;
typedef enum SPAUDIOOPTIONS {
    SPAO_NONE = 0,
    SPAO_RETAIN_AUDIO = 1
} SPAUDIOOPTIONS;
typedef struct SPSERIALIZEDRESULT {
    ULONG ulSerializedSize;
} SPSERIALIZEDRESULT;
typedef enum SPDISPLYATTRIBUTES {
    SPAF_ONE_TRAILING_SPACE = 0x2,
    SPAF_TWO_TRAILING_SPACES = 0x4,
    SPAF_CONSUME_LEADING_SPACES = 0x8,
    SPAF_ALL = 0xf
} SPDISPLAYATTRIBUTES;
typedef enum SPBOOKMARKOPTIONS {
    SPBO_NONE = 0,
    SPBO_PAUSE = 1
} SPBOOKMARKOPTIONS;
typedef enum _SPAUDIOSTATE {
    SPAS_CLOSED = 0,
    SPAS_STOP = 1,
    SPAS_PAUSE = 2,
    SPAS_RUN = 3
} SPAUDIOSTATE;
typedef enum SPRUNSTATE {
    SPRS_DONE = 1 << 0,
    SPRS_IS_SPEAKING = 1 << 1
} SPRUNSTATE;
typedef enum SPEAKFLAGS {
    SPF_DEFAULT = 0,
    SPF_ASYNC = 1 << 0,
    SPF_PURGEBEFORESPEAK = 1 << 1,
    SPF_IS_FILENAME = 1 << 2,
    SPF_IS_XML = 1 << 3,
    SPF_IS_NOT_XML = 1 << 4,
    SPF_PERSIST_XML = 1 << 5,
    SPF_NLP_SPEAK_PUNC = 1 << 6,
    SPF_PARSE_SAPI = 1 << 7,
    SPF_PARSE_SSML = 1 << 8,
    SPF_PARSE_AUTODETECT = 0,
    SPF_NLP_MASK = SPF_NLP_SPEAK_PUNC,
    SPF_PARSE_MASK = SPF_PARSE_SAPI | SPF_PARSE_SSML,
    SPF_VOICE_MASK = ((((((SPF_ASYNC | SPF_PURGEBEFORESPEAK) | SPF_IS_FILENAME) | SPF_IS_XML) | SPF_IS_NOT_XML) | SPF_NLP_MASK) | SPF_PERSIST_XML) | SPF_PARSE_MASK,
    SPF_UNUSED_FLAGS = ~SPF_VOICE_MASK
} SPEAKFLAGS;
typedef enum SPCFGRULEATTRIBUTES {
    SPRAF_TopLevel = 1 << 0,
    SPRAF_Active = 1 << 1,
    SPRAF_Export = 1 << 2,
    SPRAF_Import = 1 << 3,
    SPRAF_Interpreter = 1 << 4,
    SPRAF_Dynamic = 1 << 5,
    SPRAF_Root = 1 << 6,
    SPRAF_AutoPause = 1 << 16,
    SPRAF_UserDelimited = 1 << 17
} SPCFGRULEATTRIBUTES;
typedef enum SPPHRASERNG {
    SPPR_ALL_ELEMENTS = -1
} SPPHRASERNG;
typedef enum SPVALUETYPE {
    SPDF_PROPERTY = 0x1,
    SPDF_REPLACEMENT = 0x2,
    SPDF_RULE = 0x4,
    SPDF_DISPLAYTEXT = 0x8,
    SPDF_LEXICALFORM = 0x10,
    SPDF_PRONUNCIATION = 0x20,
    SPDF_AUDIO = 0x40,
    SPDF_ALTERNATES = 0x80,
    SPDF_ALL = 0xff
} SPVALUETYPE;
typedef unsigned short SPPHONEID;
typedef struct SPPHRASEELEMENT {
    ULONG ulAudioTimeOffset;
    ULONG ulAudioSizeTime;
    ULONG ulAudioStreamOffset;
    ULONG ulAudioSizeBytes;
    ULONG ulRetainedStreamOffset;
    ULONG ulRetainedSizeBytes;
    const WCHAR *pszDisplayText;
    const WCHAR *pszLexicalForm;
    const SPPHONEID *pszPronunciation;
    BYTE bDisplayAttributes;
    signed char RequiredConfidence;
    signed char ActualConfidence;
    BYTE Reserved;
    float SREngineConfidence;
} SPPHRASEELEMENT;
typedef struct SPVOICESTATUS {
    ULONG ulCurrentStream;
    ULONG ulLastStreamQueued;
    HRESULT hrLastResult;
    DWORD dwRunningState;
    ULONG ulInputWordPos;
    ULONG ulInputWordLen;
    ULONG ulInputSentPos;
    ULONG ulInputSentLen;
    LONG lBookmarkId;
    SPPHONEID PhonemeId;
    SPVISEMES VisemeId;
    DWORD dwReserved1;
    DWORD dwReserved2;
} SPVOICESTATUS;
typedef struct SPAUDIOSTATUS {
    LONG cbFreeBuffSpace;
    ULONG cbNonBlockingIO;
    SPAUDIOSTATE State;
    ULONGLONG CurSeekPos;
    ULONGLONG CurDevicePos;
    DWORD dwAudioLevel;
    DWORD dwReserved2;
} SPAUDIOSTATUS;
typedef struct SPRECOGNIZERSTATUS {
    SPAUDIOSTATUS AudioStatus;
    ULONGLONG ullRecognitionStreamPos;
    ULONG ulStreamNumber;
    ULONG ulNumActive;
    CLSID clsidEngine;
    ULONG cLangIDs;
    LANGID aLangID[20];
    ULONGLONG ullRecognitionStreamTime;
} SPRECOGNIZERSTATUS;
typedef struct SPPHRASERULE SPPHRASERULE;
struct SPPHRASERULE {
    LPCWSTR pszName;
    ULONG ulId;
    ULONG ulFirstElement;
    ULONG ulCountOfElements;
    const SPPHRASERULE *pNextSibling;
    const SPPHRASERULE *pFirstChild;
    float SREngineConfidence;
    signed char Confidence;
};
typedef struct SPPHRASEPROPERTY SPPHRASEPROPERTY;
struct SPPHRASEPROPERTY {
    const WCHAR *pszName;
    ULONG ulId;
    const WCHAR *pszValue;
    VARIANT vValue;
    ULONG ulFirstElement;
    ULONG ulCountOfElements;
    const SPPHRASEPROPERTY *pNextSibling;
    const SPPHRASEPROPERTY *pFirstChild;
    float SREngineConfidence;
    signed char Confidence;
};
typedef struct SPPHRASEREPLACEMENT {
    BYTE bDisplayAttributes;
    const WCHAR *pszReplacementText;
    ULONG ulFirstElement;
    ULONG ulCountOfElements;
} SPPHRASEREPLACEMENT;
typedef struct SPPHRASE {
    ULONG cbSize;
    LANGID LangID;
    WORD wReserved;
    ULONGLONG ullGrammarID;
    ULONGLONG ftStartTime;
    ULONGLONG ullAudioStreamPosition;
    ULONG ulAudioSizeBytes;
    ULONG ulRetainedSizeBytes;
    ULONG ulAudioSizeTime;
    SPPHRASERULE Rule;
    const SPPHRASEPROPERTY *pProperties;
    const SPPHRASEELEMENT *pElements;
    ULONG cReplacements;
    const SPPHRASEREPLACEMENT *pReplacements;
    GUID SREngineID;
    ULONG ulSREnginePrivateDataSize;
    const BYTE *pSREnginePrivateData;
} SPPHRASE;
typedef struct SPSERIALIZEDPHRASE {
    ULONG ulSerializedSize;
} SPSERIALIZEDPHRASE;
typedef struct SPRECORESULTTIMES {
    FILETIME ftStreamTime;
    ULONGLONG ullLength;
    DWORD dwTickCount;
    ULONGLONG ullStart;
} SPRECORESULTTIMES;
typedef enum SPFILEMODE {
    SPFM_OPEN_READONLY = 0,
    SPFM_OPEN_READWRITE = 1,
    SPFM_CREATE = 2,
    SPFM_CREATE_ALWAYS = 3,
    SPFM_NUM_MODES = 4
} SPFILEMODE;
#if defined(__GNUC__)
#define SPCAT_AUDIOOUT (const WCHAR []){ 'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\','S','O','F','T','W','A','R','E','\\','M','i','c','r','o','s','o','f','t','\\','S','p','e','e','c','h','\\','A','u','d','i','o','O','u','t','p','u','t',0 }
#define SPCAT_AUDIOIN (const WCHAR []){ 'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\','S','O','F','T','W','A','R','E','\\','M','i','c','r','o','s','o','f','t','\\','S','p','e','e','c','h','\\','A','u','d','i','o','I','n','p','u','t',0 }
#define SPCAT_VOICES (const WCHAR []){ 'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\','S','O','F','T','W','A','R','E','\\','M','i','c','r','o','s','o','f','t','\\','S','p','e','e','c','h','\\','V','o','i','c','e','s',0 }
#elif defined(_MSC_VER)
#define SPCAT_AUDIOOUT L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioOutput"
#define SPCAT_AUDIOIN L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\AudioInput"
#define SPCAT_VOICES L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices"
#else
static const WCHAR SPCAT_AUDIOOUT[] = {'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\','S','O','F','T','W','A','R','E','\\','M','i','c','r','o','s','o','f','t','\\','S','p','e','e','c','h','\\','A','u','d','i','o','O','u','t','p','u','t',0};
static const WCHAR SPCAT_AUDIOIN[] = {'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\','S','O','F','T','W','A','R','E','\\','M','i','c','r','o','s','o','f','t','\\','S','p','e','e','c','h','\\','A','u','d','i','o','I','n','p','u','t',0};
static const WCHAR SPCAT_VOICES[] = {'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\','S','O','F','T','W','A','R','E','\\','M','i','c','r','o','s','o','f','t','\\','S','p','e','e','c','h','\\','V','o','i','c','e','s',0};
#endif
#ifndef __IEnumSpObjectTokens_FWD_DEFINED__
#define __IEnumSpObjectTokens_FWD_DEFINED__
typedef interface IEnumSpObjectTokens IEnumSpObjectTokens;
#ifdef __cplusplus
interface IEnumSpObjectTokens;
#endif /* __cplusplus */
#endif

#ifndef __ISpEventSource_FWD_DEFINED__
#define __ISpEventSource_FWD_DEFINED__
typedef interface ISpEventSource ISpEventSource;
#ifdef __cplusplus
interface ISpEventSource;
#endif /* __cplusplus */
#endif

#ifndef __ISpRecoContext_FWD_DEFINED__
#define __ISpRecoContext_FWD_DEFINED__
typedef interface ISpRecoContext ISpRecoContext;
#ifdef __cplusplus
interface ISpRecoContext;
#endif /* __cplusplus */
#endif

#ifndef __ISpRecognizer_FWD_DEFINED__
#define __ISpRecognizer_FWD_DEFINED__
typedef interface ISpRecognizer ISpRecognizer;
#ifdef __cplusplus
interface ISpRecognizer;
#endif /* __cplusplus */
#endif

#ifndef __ISpStreamFormat_FWD_DEFINED__
#define __ISpStreamFormat_FWD_DEFINED__
typedef interface ISpStreamFormat ISpStreamFormat;
#ifdef __cplusplus
interface ISpStreamFormat;
#endif /* __cplusplus */
#endif

/*****************************************************************************
 * ISpDataKey interface
 */
#ifndef __ISpDataKey_INTERFACE_DEFINED__
#define __ISpDataKey_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpDataKey, 0x14056581, 0xe16c, 0x11d2, 0xbb,0x90, 0x00,0xc0,0x4f,0x8e,0xe6,0xc0);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("14056581-e16c-11d2-bb90-00c04f8ee6c0")
ISpDataKey : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetData(
        LPCWSTR pszValueName,
        ULONG cbData,
        const BYTE *pData) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetData(
        LPCWSTR pszValueName,
        ULONG *pcbData,
        BYTE *pData) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStringValue(
        LPCWSTR pszValueName,
        LPCWSTR pszValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStringValue(
        LPCWSTR pszValueName,
        LPWSTR *ppszValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDWORD(
        LPCWSTR pszValueName,
        DWORD dwValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDWORD(
        LPCWSTR pszValueName,
        DWORD *pdwValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE OpenKey(
        LPCWSTR pszSubKeyName,
        ISpDataKey **ppSubKey) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateKey(
        LPCWSTR pszSubKey,
        ISpDataKey **ppSubKey) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteKey(
        LPCWSTR pszSubKey) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteValue(
        LPCWSTR pszValueName) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumKeys(
        ULONG Index,
        LPWSTR *ppszSubKeyName) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumValues(
        ULONG Index,
        LPWSTR *ppszValueName) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpDataKey, 0x14056581, 0xe16c, 0x11d2, 0xbb,0x90, 0x00,0xc0,0x4f,0x8e,0xe6,0xc0)
#endif
#else
typedef struct ISpDataKeyVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpDataKey methods ***/
    HRESULT (STDMETHODCALLTYPE *SetData)(
        ISpDataKey *This,
        LPCWSTR pszValueName,
        ULONG cbData,
        const BYTE *pData);

    HRESULT (STDMETHODCALLTYPE *GetData)(
        ISpDataKey *This,
        LPCWSTR pszValueName,
        ULONG *pcbData,
        BYTE *pData);

    HRESULT (STDMETHODCALLTYPE *SetStringValue)(
        ISpDataKey *This,
        LPCWSTR pszValueName,
        LPCWSTR pszValue);

    HRESULT (STDMETHODCALLTYPE *GetStringValue)(
        ISpDataKey *This,
        LPCWSTR pszValueName,
        LPWSTR *ppszValue);

    HRESULT (STDMETHODCALLTYPE *SetDWORD)(
        ISpDataKey *This,
        LPCWSTR pszValueName,
        DWORD dwValue);

    HRESULT (STDMETHODCALLTYPE *GetDWORD)(
        ISpDataKey *This,
        LPCWSTR pszValueName,
        DWORD *pdwValue);

    HRESULT (STDMETHODCALLTYPE *OpenKey)(
        ISpDataKey *This,
        LPCWSTR pszSubKeyName,
        ISpDataKey **ppSubKey);

    HRESULT (STDMETHODCALLTYPE *CreateKey)(
        ISpDataKey *This,
        LPCWSTR pszSubKey,
        ISpDataKey **ppSubKey);

    HRESULT (STDMETHODCALLTYPE *DeleteKey)(
        ISpDataKey *This,
        LPCWSTR pszSubKey);

    HRESULT (STDMETHODCALLTYPE *DeleteValue)(
        ISpDataKey *This,
        LPCWSTR pszValueName);

    HRESULT (STDMETHODCALLTYPE *EnumKeys)(
        ISpDataKey *This,
        ULONG Index,
        LPWSTR *ppszSubKeyName);

    HRESULT (STDMETHODCALLTYPE *EnumValues)(
        ISpDataKey *This,
        ULONG Index,
        LPWSTR *ppszValueName);

    END_INTERFACE
} ISpDataKeyVtbl;

interface ISpDataKey {
    CONST_VTBL ISpDataKeyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpDataKey_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpDataKey_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpDataKey_Release(This) (This)->lpVtbl->Release(This)
/*** ISpDataKey methods ***/
#define ISpDataKey_SetData(This,pszValueName,cbData,pData) (This)->lpVtbl->SetData(This,pszValueName,cbData,pData)
#define ISpDataKey_GetData(This,pszValueName,pcbData,pData) (This)->lpVtbl->GetData(This,pszValueName,pcbData,pData)
#define ISpDataKey_SetStringValue(This,pszValueName,pszValue) (This)->lpVtbl->SetStringValue(This,pszValueName,pszValue)
#define ISpDataKey_GetStringValue(This,pszValueName,ppszValue) (This)->lpVtbl->GetStringValue(This,pszValueName,ppszValue)
#define ISpDataKey_SetDWORD(This,pszValueName,dwValue) (This)->lpVtbl->SetDWORD(This,pszValueName,dwValue)
#define ISpDataKey_GetDWORD(This,pszValueName,pdwValue) (This)->lpVtbl->GetDWORD(This,pszValueName,pdwValue)
#define ISpDataKey_OpenKey(This,pszSubKeyName,ppSubKey) (This)->lpVtbl->OpenKey(This,pszSubKeyName,ppSubKey)
#define ISpDataKey_CreateKey(This,pszSubKey,ppSubKey) (This)->lpVtbl->CreateKey(This,pszSubKey,ppSubKey)
#define ISpDataKey_DeleteKey(This,pszSubKey) (This)->lpVtbl->DeleteKey(This,pszSubKey)
#define ISpDataKey_DeleteValue(This,pszValueName) (This)->lpVtbl->DeleteValue(This,pszValueName)
#define ISpDataKey_EnumKeys(This,Index,ppszSubKeyName) (This)->lpVtbl->EnumKeys(This,Index,ppszSubKeyName)
#define ISpDataKey_EnumValues(This,Index,ppszValueName) (This)->lpVtbl->EnumValues(This,Index,ppszValueName)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpDataKey_QueryInterface(ISpDataKey* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpDataKey_AddRef(ISpDataKey* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpDataKey_Release(ISpDataKey* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpDataKey methods ***/
static FORCEINLINE HRESULT ISpDataKey_SetData(ISpDataKey* This,LPCWSTR pszValueName,ULONG cbData,const BYTE *pData) {
    return This->lpVtbl->SetData(This,pszValueName,cbData,pData);
}
static FORCEINLINE HRESULT ISpDataKey_GetData(ISpDataKey* This,LPCWSTR pszValueName,ULONG *pcbData,BYTE *pData) {
    return This->lpVtbl->GetData(This,pszValueName,pcbData,pData);
}
static FORCEINLINE HRESULT ISpDataKey_SetStringValue(ISpDataKey* This,LPCWSTR pszValueName,LPCWSTR pszValue) {
    return This->lpVtbl->SetStringValue(This,pszValueName,pszValue);
}
static FORCEINLINE HRESULT ISpDataKey_GetStringValue(ISpDataKey* This,LPCWSTR pszValueName,LPWSTR *ppszValue) {
    return This->lpVtbl->GetStringValue(This,pszValueName,ppszValue);
}
static FORCEINLINE HRESULT ISpDataKey_SetDWORD(ISpDataKey* This,LPCWSTR pszValueName,DWORD dwValue) {
    return This->lpVtbl->SetDWORD(This,pszValueName,dwValue);
}
static FORCEINLINE HRESULT ISpDataKey_GetDWORD(ISpDataKey* This,LPCWSTR pszValueName,DWORD *pdwValue) {
    return This->lpVtbl->GetDWORD(This,pszValueName,pdwValue);
}
static FORCEINLINE HRESULT ISpDataKey_OpenKey(ISpDataKey* This,LPCWSTR pszSubKeyName,ISpDataKey **ppSubKey) {
    return This->lpVtbl->OpenKey(This,pszSubKeyName,ppSubKey);
}
static FORCEINLINE HRESULT ISpDataKey_CreateKey(ISpDataKey* This,LPCWSTR pszSubKey,ISpDataKey **ppSubKey) {
    return This->lpVtbl->CreateKey(This,pszSubKey,ppSubKey);
}
static FORCEINLINE HRESULT ISpDataKey_DeleteKey(ISpDataKey* This,LPCWSTR pszSubKey) {
    return This->lpVtbl->DeleteKey(This,pszSubKey);
}
static FORCEINLINE HRESULT ISpDataKey_DeleteValue(ISpDataKey* This,LPCWSTR pszValueName) {
    return This->lpVtbl->DeleteValue(This,pszValueName);
}
static FORCEINLINE HRESULT ISpDataKey_EnumKeys(ISpDataKey* This,ULONG Index,LPWSTR *ppszSubKeyName) {
    return This->lpVtbl->EnumKeys(This,Index,ppszSubKeyName);
}
static FORCEINLINE HRESULT ISpDataKey_EnumValues(ISpDataKey* This,ULONG Index,LPWSTR *ppszValueName) {
    return This->lpVtbl->EnumValues(This,Index,ppszValueName);
}
#endif
#endif

#endif


#endif  /* __ISpDataKey_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpRegDataKey interface
 */
#ifndef __ISpRegDataKey_INTERFACE_DEFINED__
#define __ISpRegDataKey_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpRegDataKey, 0x92a66e2b, 0xc830, 0x4149, 0x83,0xdf, 0x6f,0xc2,0xba,0x1e,0x7a,0x5b);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("92a66e2b-c830-4149-83df-6fc2ba1e7a5b")
ISpRegDataKey : public ISpDataKey
{
    virtual HRESULT STDMETHODCALLTYPE SetKey(
        HKEY hkey,
        BOOL fReadOnly) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpRegDataKey, 0x92a66e2b, 0xc830, 0x4149, 0x83,0xdf, 0x6f,0xc2,0xba,0x1e,0x7a,0x5b)
#endif
#else
typedef struct ISpRegDataKeyVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpDataKey methods ***/
    HRESULT (STDMETHODCALLTYPE *SetData)(
        ISpRegDataKey *This,
        LPCWSTR pszValueName,
        ULONG cbData,
        const BYTE *pData);

    HRESULT (STDMETHODCALLTYPE *GetData)(
        ISpRegDataKey *This,
        LPCWSTR pszValueName,
        ULONG *pcbData,
        BYTE *pData);

    HRESULT (STDMETHODCALLTYPE *SetStringValue)(
        ISpRegDataKey *This,
        LPCWSTR pszValueName,
        LPCWSTR pszValue);

    HRESULT (STDMETHODCALLTYPE *GetStringValue)(
        ISpRegDataKey *This,
        LPCWSTR pszValueName,
        LPWSTR *ppszValue);

    HRESULT (STDMETHODCALLTYPE *SetDWORD)(
        ISpRegDataKey *This,
        LPCWSTR pszValueName,
        DWORD dwValue);

    HRESULT (STDMETHODCALLTYPE *GetDWORD)(
        ISpRegDataKey *This,
        LPCWSTR pszValueName,
        DWORD *pdwValue);

    HRESULT (STDMETHODCALLTYPE *OpenKey)(
        ISpRegDataKey *This,
        LPCWSTR pszSubKeyName,
        ISpDataKey **ppSubKey);

    HRESULT (STDMETHODCALLTYPE *CreateKey)(
        ISpRegDataKey *This,
        LPCWSTR pszSubKey,
        ISpDataKey **ppSubKey);

    HRESULT (STDMETHODCALLTYPE *DeleteKey)(
        ISpRegDataKey *This,
        LPCWSTR pszSubKey);

    HRESULT (STDMETHODCALLTYPE *DeleteValue)(
        ISpRegDataKey *This,
        LPCWSTR pszValueName);

    HRESULT (STDMETHODCALLTYPE *EnumKeys)(
        ISpRegDataKey *This,
        ULONG Index,
        LPWSTR *ppszSubKeyName);

    HRESULT (STDMETHODCALLTYPE *EnumValues)(
        ISpRegDataKey *This,
        ULONG Index,
        LPWSTR *ppszValueName);

    /*** ISpRegDataKey methods ***/
    HRESULT (STDMETHODCALLTYPE *SetKey)(
        ISpRegDataKey *This,
        HKEY hkey,
        BOOL fReadOnly);

    END_INTERFACE
} ISpRegDataKeyVtbl;

interface ISpRegDataKey {
    CONST_VTBL ISpRegDataKeyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpRegDataKey_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpRegDataKey_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpRegDataKey_Release(This) (This)->lpVtbl->Release(This)
/*** ISpDataKey methods ***/
#define ISpRegDataKey_SetData(This,pszValueName,cbData,pData) (This)->lpVtbl->SetData(This,pszValueName,cbData,pData)
#define ISpRegDataKey_GetData(This,pszValueName,pcbData,pData) (This)->lpVtbl->GetData(This,pszValueName,pcbData,pData)
#define ISpRegDataKey_SetStringValue(This,pszValueName,pszValue) (This)->lpVtbl->SetStringValue(This,pszValueName,pszValue)
#define ISpRegDataKey_GetStringValue(This,pszValueName,ppszValue) (This)->lpVtbl->GetStringValue(This,pszValueName,ppszValue)
#define ISpRegDataKey_SetDWORD(This,pszValueName,dwValue) (This)->lpVtbl->SetDWORD(This,pszValueName,dwValue)
#define ISpRegDataKey_GetDWORD(This,pszValueName,pdwValue) (This)->lpVtbl->GetDWORD(This,pszValueName,pdwValue)
#define ISpRegDataKey_OpenKey(This,pszSubKeyName,ppSubKey) (This)->lpVtbl->OpenKey(This,pszSubKeyName,ppSubKey)
#define ISpRegDataKey_CreateKey(This,pszSubKey,ppSubKey) (This)->lpVtbl->CreateKey(This,pszSubKey,ppSubKey)
#define ISpRegDataKey_DeleteKey(This,pszSubKey) (This)->lpVtbl->DeleteKey(This,pszSubKey)
#define ISpRegDataKey_DeleteValue(This,pszValueName) (This)->lpVtbl->DeleteValue(This,pszValueName)
#define ISpRegDataKey_EnumKeys(This,Index,ppszSubKeyName) (This)->lpVtbl->EnumKeys(This,Index,ppszSubKeyName)
#define ISpRegDataKey_EnumValues(This,Index,ppszValueName) (This)->lpVtbl->EnumValues(This,Index,ppszValueName)
/*** ISpRegDataKey methods ***/
#define ISpRegDataKey_SetKey(This,hkey,fReadOnly) (This)->lpVtbl->SetKey(This,hkey,fReadOnly)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpRegDataKey_QueryInterface(ISpRegDataKey* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpRegDataKey_AddRef(ISpRegDataKey* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpRegDataKey_Release(ISpRegDataKey* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpDataKey methods ***/
static FORCEINLINE HRESULT ISpRegDataKey_SetData(ISpRegDataKey* This,LPCWSTR pszValueName,ULONG cbData,const BYTE *pData) {
    return This->lpVtbl->SetData(This,pszValueName,cbData,pData);
}
static FORCEINLINE HRESULT ISpRegDataKey_GetData(ISpRegDataKey* This,LPCWSTR pszValueName,ULONG *pcbData,BYTE *pData) {
    return This->lpVtbl->GetData(This,pszValueName,pcbData,pData);
}
static FORCEINLINE HRESULT ISpRegDataKey_SetStringValue(ISpRegDataKey* This,LPCWSTR pszValueName,LPCWSTR pszValue) {
    return This->lpVtbl->SetStringValue(This,pszValueName,pszValue);
}
static FORCEINLINE HRESULT ISpRegDataKey_GetStringValue(ISpRegDataKey* This,LPCWSTR pszValueName,LPWSTR *ppszValue) {
    return This->lpVtbl->GetStringValue(This,pszValueName,ppszValue);
}
static FORCEINLINE HRESULT ISpRegDataKey_SetDWORD(ISpRegDataKey* This,LPCWSTR pszValueName,DWORD dwValue) {
    return This->lpVtbl->SetDWORD(This,pszValueName,dwValue);
}
static FORCEINLINE HRESULT ISpRegDataKey_GetDWORD(ISpRegDataKey* This,LPCWSTR pszValueName,DWORD *pdwValue) {
    return This->lpVtbl->GetDWORD(This,pszValueName,pdwValue);
}
static FORCEINLINE HRESULT ISpRegDataKey_OpenKey(ISpRegDataKey* This,LPCWSTR pszSubKeyName,ISpDataKey **ppSubKey) {
    return This->lpVtbl->OpenKey(This,pszSubKeyName,ppSubKey);
}
static FORCEINLINE HRESULT ISpRegDataKey_CreateKey(ISpRegDataKey* This,LPCWSTR pszSubKey,ISpDataKey **ppSubKey) {
    return This->lpVtbl->CreateKey(This,pszSubKey,ppSubKey);
}
static FORCEINLINE HRESULT ISpRegDataKey_DeleteKey(ISpRegDataKey* This,LPCWSTR pszSubKey) {
    return This->lpVtbl->DeleteKey(This,pszSubKey);
}
static FORCEINLINE HRESULT ISpRegDataKey_DeleteValue(ISpRegDataKey* This,LPCWSTR pszValueName) {
    return This->lpVtbl->DeleteValue(This,pszValueName);
}
static FORCEINLINE HRESULT ISpRegDataKey_EnumKeys(ISpRegDataKey* This,ULONG Index,LPWSTR *ppszSubKeyName) {
    return This->lpVtbl->EnumKeys(This,Index,ppszSubKeyName);
}
static FORCEINLINE HRESULT ISpRegDataKey_EnumValues(ISpRegDataKey* This,ULONG Index,LPWSTR *ppszValueName) {
    return This->lpVtbl->EnumValues(This,Index,ppszValueName);
}
/*** ISpRegDataKey methods ***/
static FORCEINLINE HRESULT ISpRegDataKey_SetKey(ISpRegDataKey* This,HKEY hkey,BOOL fReadOnly) {
    return This->lpVtbl->SetKey(This,hkey,fReadOnly);
}
#endif
#endif

#endif


#endif  /* __ISpRegDataKey_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpObjectTokenCategory interface
 */
#ifndef __ISpObjectTokenCategory_INTERFACE_DEFINED__
#define __ISpObjectTokenCategory_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpObjectTokenCategory, 0x2d3d3845, 0x39af, 0x4850, 0xbb,0xf9, 0x40,0xb4,0x97,0x80,0x01,0x1d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2d3d3845-39af-4850-bbf9-40b49780011d")
ISpObjectTokenCategory : public ISpDataKey
{
    virtual HRESULT STDMETHODCALLTYPE SetId(
        LPCWSTR pszCategoryId,
        BOOL fCreateIfNotExist) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetId(
        LPWSTR *ppszCoMemCategoryId) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDataKey(
        SPDATAKEYLOCATION spdkl,
        ISpDataKey **ppDataKey) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumTokens(
        LPCWSTR pszReqAttribs,
        LPCWSTR pszOptAttribs,
        IEnumSpObjectTokens **ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDefaultTokenId(
        LPCWSTR pszTokenId) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDefaultTokenId(
        LPWSTR *ppszCoMemTokenId) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpObjectTokenCategory, 0x2d3d3845, 0x39af, 0x4850, 0xbb,0xf9, 0x40,0xb4,0x97,0x80,0x01,0x1d)
#endif
#else
typedef struct ISpObjectTokenCategoryVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpDataKey methods ***/
    HRESULT (STDMETHODCALLTYPE *SetData)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszValueName,
        ULONG cbData,
        const BYTE *pData);

    HRESULT (STDMETHODCALLTYPE *GetData)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszValueName,
        ULONG *pcbData,
        BYTE *pData);

    HRESULT (STDMETHODCALLTYPE *SetStringValue)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszValueName,
        LPCWSTR pszValue);

    HRESULT (STDMETHODCALLTYPE *GetStringValue)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszValueName,
        LPWSTR *ppszValue);

    HRESULT (STDMETHODCALLTYPE *SetDWORD)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszValueName,
        DWORD dwValue);

    HRESULT (STDMETHODCALLTYPE *GetDWORD)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszValueName,
        DWORD *pdwValue);

    HRESULT (STDMETHODCALLTYPE *OpenKey)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszSubKeyName,
        ISpDataKey **ppSubKey);

    HRESULT (STDMETHODCALLTYPE *CreateKey)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszSubKey,
        ISpDataKey **ppSubKey);

    HRESULT (STDMETHODCALLTYPE *DeleteKey)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszSubKey);

    HRESULT (STDMETHODCALLTYPE *DeleteValue)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszValueName);

    HRESULT (STDMETHODCALLTYPE *EnumKeys)(
        ISpObjectTokenCategory *This,
        ULONG Index,
        LPWSTR *ppszSubKeyName);

    HRESULT (STDMETHODCALLTYPE *EnumValues)(
        ISpObjectTokenCategory *This,
        ULONG Index,
        LPWSTR *ppszValueName);

    /*** ISpObjectTokenCategory methods ***/
    HRESULT (STDMETHODCALLTYPE *SetId)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszCategoryId,
        BOOL fCreateIfNotExist);

    HRESULT (STDMETHODCALLTYPE *GetId)(
        ISpObjectTokenCategory *This,
        LPWSTR *ppszCoMemCategoryId);

    HRESULT (STDMETHODCALLTYPE *GetDataKey)(
        ISpObjectTokenCategory *This,
        SPDATAKEYLOCATION spdkl,
        ISpDataKey **ppDataKey);

    HRESULT (STDMETHODCALLTYPE *EnumTokens)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszReqAttribs,
        LPCWSTR pszOptAttribs,
        IEnumSpObjectTokens **ppEnum);

    HRESULT (STDMETHODCALLTYPE *SetDefaultTokenId)(
        ISpObjectTokenCategory *This,
        LPCWSTR pszTokenId);

    HRESULT (STDMETHODCALLTYPE *GetDefaultTokenId)(
        ISpObjectTokenCategory *This,
        LPWSTR *ppszCoMemTokenId);

    END_INTERFACE
} ISpObjectTokenCategoryVtbl;

interface ISpObjectTokenCategory {
    CONST_VTBL ISpObjectTokenCategoryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpObjectTokenCategory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpObjectTokenCategory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpObjectTokenCategory_Release(This) (This)->lpVtbl->Release(This)
/*** ISpDataKey methods ***/
#define ISpObjectTokenCategory_SetData(This,pszValueName,cbData,pData) (This)->lpVtbl->SetData(This,pszValueName,cbData,pData)
#define ISpObjectTokenCategory_GetData(This,pszValueName,pcbData,pData) (This)->lpVtbl->GetData(This,pszValueName,pcbData,pData)
#define ISpObjectTokenCategory_SetStringValue(This,pszValueName,pszValue) (This)->lpVtbl->SetStringValue(This,pszValueName,pszValue)
#define ISpObjectTokenCategory_GetStringValue(This,pszValueName,ppszValue) (This)->lpVtbl->GetStringValue(This,pszValueName,ppszValue)
#define ISpObjectTokenCategory_SetDWORD(This,pszValueName,dwValue) (This)->lpVtbl->SetDWORD(This,pszValueName,dwValue)
#define ISpObjectTokenCategory_GetDWORD(This,pszValueName,pdwValue) (This)->lpVtbl->GetDWORD(This,pszValueName,pdwValue)
#define ISpObjectTokenCategory_OpenKey(This,pszSubKeyName,ppSubKey) (This)->lpVtbl->OpenKey(This,pszSubKeyName,ppSubKey)
#define ISpObjectTokenCategory_CreateKey(This,pszSubKey,ppSubKey) (This)->lpVtbl->CreateKey(This,pszSubKey,ppSubKey)
#define ISpObjectTokenCategory_DeleteKey(This,pszSubKey) (This)->lpVtbl->DeleteKey(This,pszSubKey)
#define ISpObjectTokenCategory_DeleteValue(This,pszValueName) (This)->lpVtbl->DeleteValue(This,pszValueName)
#define ISpObjectTokenCategory_EnumKeys(This,Index,ppszSubKeyName) (This)->lpVtbl->EnumKeys(This,Index,ppszSubKeyName)
#define ISpObjectTokenCategory_EnumValues(This,Index,ppszValueName) (This)->lpVtbl->EnumValues(This,Index,ppszValueName)
/*** ISpObjectTokenCategory methods ***/
#define ISpObjectTokenCategory_SetId(This,pszCategoryId,fCreateIfNotExist) (This)->lpVtbl->SetId(This,pszCategoryId,fCreateIfNotExist)
#define ISpObjectTokenCategory_GetId(This,ppszCoMemCategoryId) (This)->lpVtbl->GetId(This,ppszCoMemCategoryId)
#define ISpObjectTokenCategory_GetDataKey(This,spdkl,ppDataKey) (This)->lpVtbl->GetDataKey(This,spdkl,ppDataKey)
#define ISpObjectTokenCategory_EnumTokens(This,pszReqAttribs,pszOptAttribs,ppEnum) (This)->lpVtbl->EnumTokens(This,pszReqAttribs,pszOptAttribs,ppEnum)
#define ISpObjectTokenCategory_SetDefaultTokenId(This,pszTokenId) (This)->lpVtbl->SetDefaultTokenId(This,pszTokenId)
#define ISpObjectTokenCategory_GetDefaultTokenId(This,ppszCoMemTokenId) (This)->lpVtbl->GetDefaultTokenId(This,ppszCoMemTokenId)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpObjectTokenCategory_QueryInterface(ISpObjectTokenCategory* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpObjectTokenCategory_AddRef(ISpObjectTokenCategory* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpObjectTokenCategory_Release(ISpObjectTokenCategory* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpDataKey methods ***/
static FORCEINLINE HRESULT ISpObjectTokenCategory_SetData(ISpObjectTokenCategory* This,LPCWSTR pszValueName,ULONG cbData,const BYTE *pData) {
    return This->lpVtbl->SetData(This,pszValueName,cbData,pData);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_GetData(ISpObjectTokenCategory* This,LPCWSTR pszValueName,ULONG *pcbData,BYTE *pData) {
    return This->lpVtbl->GetData(This,pszValueName,pcbData,pData);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_SetStringValue(ISpObjectTokenCategory* This,LPCWSTR pszValueName,LPCWSTR pszValue) {
    return This->lpVtbl->SetStringValue(This,pszValueName,pszValue);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_GetStringValue(ISpObjectTokenCategory* This,LPCWSTR pszValueName,LPWSTR *ppszValue) {
    return This->lpVtbl->GetStringValue(This,pszValueName,ppszValue);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_SetDWORD(ISpObjectTokenCategory* This,LPCWSTR pszValueName,DWORD dwValue) {
    return This->lpVtbl->SetDWORD(This,pszValueName,dwValue);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_GetDWORD(ISpObjectTokenCategory* This,LPCWSTR pszValueName,DWORD *pdwValue) {
    return This->lpVtbl->GetDWORD(This,pszValueName,pdwValue);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_OpenKey(ISpObjectTokenCategory* This,LPCWSTR pszSubKeyName,ISpDataKey **ppSubKey) {
    return This->lpVtbl->OpenKey(This,pszSubKeyName,ppSubKey);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_CreateKey(ISpObjectTokenCategory* This,LPCWSTR pszSubKey,ISpDataKey **ppSubKey) {
    return This->lpVtbl->CreateKey(This,pszSubKey,ppSubKey);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_DeleteKey(ISpObjectTokenCategory* This,LPCWSTR pszSubKey) {
    return This->lpVtbl->DeleteKey(This,pszSubKey);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_DeleteValue(ISpObjectTokenCategory* This,LPCWSTR pszValueName) {
    return This->lpVtbl->DeleteValue(This,pszValueName);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_EnumKeys(ISpObjectTokenCategory* This,ULONG Index,LPWSTR *ppszSubKeyName) {
    return This->lpVtbl->EnumKeys(This,Index,ppszSubKeyName);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_EnumValues(ISpObjectTokenCategory* This,ULONG Index,LPWSTR *ppszValueName) {
    return This->lpVtbl->EnumValues(This,Index,ppszValueName);
}
/*** ISpObjectTokenCategory methods ***/
static FORCEINLINE HRESULT ISpObjectTokenCategory_SetId(ISpObjectTokenCategory* This,LPCWSTR pszCategoryId,BOOL fCreateIfNotExist) {
    return This->lpVtbl->SetId(This,pszCategoryId,fCreateIfNotExist);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_GetId(ISpObjectTokenCategory* This,LPWSTR *ppszCoMemCategoryId) {
    return This->lpVtbl->GetId(This,ppszCoMemCategoryId);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_GetDataKey(ISpObjectTokenCategory* This,SPDATAKEYLOCATION spdkl,ISpDataKey **ppDataKey) {
    return This->lpVtbl->GetDataKey(This,spdkl,ppDataKey);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_EnumTokens(ISpObjectTokenCategory* This,LPCWSTR pszReqAttribs,LPCWSTR pszOptAttribs,IEnumSpObjectTokens **ppEnum) {
    return This->lpVtbl->EnumTokens(This,pszReqAttribs,pszOptAttribs,ppEnum);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_SetDefaultTokenId(ISpObjectTokenCategory* This,LPCWSTR pszTokenId) {
    return This->lpVtbl->SetDefaultTokenId(This,pszTokenId);
}
static FORCEINLINE HRESULT ISpObjectTokenCategory_GetDefaultTokenId(ISpObjectTokenCategory* This,LPWSTR *ppszCoMemTokenId) {
    return This->lpVtbl->GetDefaultTokenId(This,ppszCoMemTokenId);
}
#endif
#endif

#endif


#endif  /* __ISpObjectTokenCategory_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpObjectToken interface
 */
#ifndef __ISpObjectToken_INTERFACE_DEFINED__
#define __ISpObjectToken_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpObjectToken, 0x14056589, 0xe16c, 0x11d2, 0xbb,0x90, 0x00,0xc0,0x4f,0x8e,0xe6,0xc0);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("14056589-e16c-11d2-bb90-00c04f8ee6c0")
ISpObjectToken : public ISpDataKey
{
    virtual HRESULT STDMETHODCALLTYPE SetId(
        LPCWSTR pszCategoryId,
        LPCWSTR pszTokenId,
        BOOL fCreateIfNotExist) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetId(
        LPWSTR *ppszCoMemTokenId) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCategory(
        ISpObjectTokenCategory **ppTokenCategory) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateInstance(
        IUnknown *pUnkOuter,
        DWORD dwClsContext,
        REFIID riid,
        void **ppvObject) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStorageFileName(
        REFCLSID clsidCaller,
        LPCWSTR pszValueName,
        LPCWSTR pszFileNameSpecifier,
        ULONG nFolder,
        LPWSTR *ppszFilePath) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveStorageFileName(
        REFCLSID clsidCaller,
        LPCWSTR pszKeyName,
        BOOL fDeleteFile) = 0;

    virtual HRESULT STDMETHODCALLTYPE Remove(
        const CLSID *pclsidCaller) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsUISupported(
        LPCWSTR pszTypeOfUI,
        void *pvExtraData,
        ULONG cbExtraData,
        IUnknown *punkObject,
        BOOL *pfSupported) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisplayUI(
        HWND hwndParent,
        LPCWSTR pszTitle,
        LPCWSTR pszTypeOfUI,
        void *pvExtraData,
        ULONG cbExtraData,
        IUnknown *punkObject) = 0;

    virtual HRESULT STDMETHODCALLTYPE MatchesAttributes(
        LPCWSTR pszAttributes,
        BOOL *pfMatches) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpObjectToken, 0x14056589, 0xe16c, 0x11d2, 0xbb,0x90, 0x00,0xc0,0x4f,0x8e,0xe6,0xc0)
#endif
#else
typedef struct ISpObjectTokenVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpDataKey methods ***/
    HRESULT (STDMETHODCALLTYPE *SetData)(
        ISpObjectToken *This,
        LPCWSTR pszValueName,
        ULONG cbData,
        const BYTE *pData);

    HRESULT (STDMETHODCALLTYPE *GetData)(
        ISpObjectToken *This,
        LPCWSTR pszValueName,
        ULONG *pcbData,
        BYTE *pData);

    HRESULT (STDMETHODCALLTYPE *SetStringValue)(
        ISpObjectToken *This,
        LPCWSTR pszValueName,
        LPCWSTR pszValue);

    HRESULT (STDMETHODCALLTYPE *GetStringValue)(
        ISpObjectToken *This,
        LPCWSTR pszValueName,
        LPWSTR *ppszValue);

    HRESULT (STDMETHODCALLTYPE *SetDWORD)(
        ISpObjectToken *This,
        LPCWSTR pszValueName,
        DWORD dwValue);

    HRESULT (STDMETHODCALLTYPE *GetDWORD)(
        ISpObjectToken *This,
        LPCWSTR pszValueName,
        DWORD *pdwValue);

    HRESULT (STDMETHODCALLTYPE *OpenKey)(
        ISpObjectToken *This,
        LPCWSTR pszSubKeyName,
        ISpDataKey **ppSubKey);

    HRESULT (STDMETHODCALLTYPE *CreateKey)(
        ISpObjectToken *This,
        LPCWSTR pszSubKey,
        ISpDataKey **ppSubKey);

    HRESULT (STDMETHODCALLTYPE *DeleteKey)(
        ISpObjectToken *This,
        LPCWSTR pszSubKey);

    HRESULT (STDMETHODCALLTYPE *DeleteValue)(
        ISpObjectToken *This,
        LPCWSTR pszValueName);

    HRESULT (STDMETHODCALLTYPE *EnumKeys)(
        ISpObjectToken *This,
        ULONG Index,
        LPWSTR *ppszSubKeyName);

    HRESULT (STDMETHODCALLTYPE *EnumValues)(
        ISpObjectToken *This,
        ULONG Index,
        LPWSTR *ppszValueName);

    /*** ISpObjectToken methods ***/
    HRESULT (STDMETHODCALLTYPE *SetId)(
        ISpObjectToken *This,
        LPCWSTR pszCategoryId,
        LPCWSTR pszTokenId,
        BOOL fCreateIfNotExist);

    HRESULT (STDMETHODCALLTYPE *GetId)(
        ISpObjectToken *This,
        LPWSTR *ppszCoMemTokenId);

    HRESULT (STDMETHODCALLTYPE *GetCategory)(
        ISpObjectToken *This,
        ISpObjectTokenCategory **ppTokenCategory);

    HRESULT (STDMETHODCALLTYPE *CreateInstance)(
        ISpObjectToken *This,
        IUnknown *pUnkOuter,
        DWORD dwClsContext,
        REFIID riid,
        void **ppvObject);

    HRESULT (STDMETHODCALLTYPE *GetStorageFileName)(
        ISpObjectToken *This,
        REFCLSID clsidCaller,
        LPCWSTR pszValueName,
        LPCWSTR pszFileNameSpecifier,
        ULONG nFolder,
        LPWSTR *ppszFilePath);

    HRESULT (STDMETHODCALLTYPE *RemoveStorageFileName)(
        ISpObjectToken *This,
        REFCLSID clsidCaller,
        LPCWSTR pszKeyName,
        BOOL fDeleteFile);

    HRESULT (STDMETHODCALLTYPE *Remove)(
        ISpObjectToken *This,
        const CLSID *pclsidCaller);

    HRESULT (STDMETHODCALLTYPE *IsUISupported)(
        ISpObjectToken *This,
        LPCWSTR pszTypeOfUI,
        void *pvExtraData,
        ULONG cbExtraData,
        IUnknown *punkObject,
        BOOL *pfSupported);

    HRESULT (STDMETHODCALLTYPE *DisplayUI)(
        ISpObjectToken *This,
        HWND hwndParent,
        LPCWSTR pszTitle,
        LPCWSTR pszTypeOfUI,
        void *pvExtraData,
        ULONG cbExtraData,
        IUnknown *punkObject);

    HRESULT (STDMETHODCALLTYPE *MatchesAttributes)(
        ISpObjectToken *This,
        LPCWSTR pszAttributes,
        BOOL *pfMatches);

    END_INTERFACE
} ISpObjectTokenVtbl;

interface ISpObjectToken {
    CONST_VTBL ISpObjectTokenVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpObjectToken_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpObjectToken_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpObjectToken_Release(This) (This)->lpVtbl->Release(This)
/*** ISpDataKey methods ***/
#define ISpObjectToken_SetData(This,pszValueName,cbData,pData) (This)->lpVtbl->SetData(This,pszValueName,cbData,pData)
#define ISpObjectToken_GetData(This,pszValueName,pcbData,pData) (This)->lpVtbl->GetData(This,pszValueName,pcbData,pData)
#define ISpObjectToken_SetStringValue(This,pszValueName,pszValue) (This)->lpVtbl->SetStringValue(This,pszValueName,pszValue)
#define ISpObjectToken_GetStringValue(This,pszValueName,ppszValue) (This)->lpVtbl->GetStringValue(This,pszValueName,ppszValue)
#define ISpObjectToken_SetDWORD(This,pszValueName,dwValue) (This)->lpVtbl->SetDWORD(This,pszValueName,dwValue)
#define ISpObjectToken_GetDWORD(This,pszValueName,pdwValue) (This)->lpVtbl->GetDWORD(This,pszValueName,pdwValue)
#define ISpObjectToken_OpenKey(This,pszSubKeyName,ppSubKey) (This)->lpVtbl->OpenKey(This,pszSubKeyName,ppSubKey)
#define ISpObjectToken_CreateKey(This,pszSubKey,ppSubKey) (This)->lpVtbl->CreateKey(This,pszSubKey,ppSubKey)
#define ISpObjectToken_DeleteKey(This,pszSubKey) (This)->lpVtbl->DeleteKey(This,pszSubKey)
#define ISpObjectToken_DeleteValue(This,pszValueName) (This)->lpVtbl->DeleteValue(This,pszValueName)
#define ISpObjectToken_EnumKeys(This,Index,ppszSubKeyName) (This)->lpVtbl->EnumKeys(This,Index,ppszSubKeyName)
#define ISpObjectToken_EnumValues(This,Index,ppszValueName) (This)->lpVtbl->EnumValues(This,Index,ppszValueName)
/*** ISpObjectToken methods ***/
#define ISpObjectToken_SetId(This,pszCategoryId,pszTokenId,fCreateIfNotExist) (This)->lpVtbl->SetId(This,pszCategoryId,pszTokenId,fCreateIfNotExist)
#define ISpObjectToken_GetId(This,ppszCoMemTokenId) (This)->lpVtbl->GetId(This,ppszCoMemTokenId)
#define ISpObjectToken_GetCategory(This,ppTokenCategory) (This)->lpVtbl->GetCategory(This,ppTokenCategory)
#define ISpObjectToken_CreateInstance(This,pUnkOuter,dwClsContext,riid,ppvObject) (This)->lpVtbl->CreateInstance(This,pUnkOuter,dwClsContext,riid,ppvObject)
#define ISpObjectToken_GetStorageFileName(This,clsidCaller,pszValueName,pszFileNameSpecifier,nFolder,ppszFilePath) (This)->lpVtbl->GetStorageFileName(This,clsidCaller,pszValueName,pszFileNameSpecifier,nFolder,ppszFilePath)
#define ISpObjectToken_RemoveStorageFileName(This,clsidCaller,pszKeyName,fDeleteFile) (This)->lpVtbl->RemoveStorageFileName(This,clsidCaller,pszKeyName,fDeleteFile)
#define ISpObjectToken_Remove(This,pclsidCaller) (This)->lpVtbl->Remove(This,pclsidCaller)
#define ISpObjectToken_IsUISupported(This,pszTypeOfUI,pvExtraData,cbExtraData,punkObject,pfSupported) (This)->lpVtbl->IsUISupported(This,pszTypeOfUI,pvExtraData,cbExtraData,punkObject,pfSupported)
#define ISpObjectToken_DisplayUI(This,hwndParent,pszTitle,pszTypeOfUI,pvExtraData,cbExtraData,punkObject) (This)->lpVtbl->DisplayUI(This,hwndParent,pszTitle,pszTypeOfUI,pvExtraData,cbExtraData,punkObject)
#define ISpObjectToken_MatchesAttributes(This,pszAttributes,pfMatches) (This)->lpVtbl->MatchesAttributes(This,pszAttributes,pfMatches)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpObjectToken_QueryInterface(ISpObjectToken* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpObjectToken_AddRef(ISpObjectToken* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpObjectToken_Release(ISpObjectToken* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpDataKey methods ***/
static FORCEINLINE HRESULT ISpObjectToken_SetData(ISpObjectToken* This,LPCWSTR pszValueName,ULONG cbData,const BYTE *pData) {
    return This->lpVtbl->SetData(This,pszValueName,cbData,pData);
}
static FORCEINLINE HRESULT ISpObjectToken_GetData(ISpObjectToken* This,LPCWSTR pszValueName,ULONG *pcbData,BYTE *pData) {
    return This->lpVtbl->GetData(This,pszValueName,pcbData,pData);
}
static FORCEINLINE HRESULT ISpObjectToken_SetStringValue(ISpObjectToken* This,LPCWSTR pszValueName,LPCWSTR pszValue) {
    return This->lpVtbl->SetStringValue(This,pszValueName,pszValue);
}
static FORCEINLINE HRESULT ISpObjectToken_GetStringValue(ISpObjectToken* This,LPCWSTR pszValueName,LPWSTR *ppszValue) {
    return This->lpVtbl->GetStringValue(This,pszValueName,ppszValue);
}
static FORCEINLINE HRESULT ISpObjectToken_SetDWORD(ISpObjectToken* This,LPCWSTR pszValueName,DWORD dwValue) {
    return This->lpVtbl->SetDWORD(This,pszValueName,dwValue);
}
static FORCEINLINE HRESULT ISpObjectToken_GetDWORD(ISpObjectToken* This,LPCWSTR pszValueName,DWORD *pdwValue) {
    return This->lpVtbl->GetDWORD(This,pszValueName,pdwValue);
}
static FORCEINLINE HRESULT ISpObjectToken_OpenKey(ISpObjectToken* This,LPCWSTR pszSubKeyName,ISpDataKey **ppSubKey) {
    return This->lpVtbl->OpenKey(This,pszSubKeyName,ppSubKey);
}
static FORCEINLINE HRESULT ISpObjectToken_CreateKey(ISpObjectToken* This,LPCWSTR pszSubKey,ISpDataKey **ppSubKey) {
    return This->lpVtbl->CreateKey(This,pszSubKey,ppSubKey);
}
static FORCEINLINE HRESULT ISpObjectToken_DeleteKey(ISpObjectToken* This,LPCWSTR pszSubKey) {
    return This->lpVtbl->DeleteKey(This,pszSubKey);
}
static FORCEINLINE HRESULT ISpObjectToken_DeleteValue(ISpObjectToken* This,LPCWSTR pszValueName) {
    return This->lpVtbl->DeleteValue(This,pszValueName);
}
static FORCEINLINE HRESULT ISpObjectToken_EnumKeys(ISpObjectToken* This,ULONG Index,LPWSTR *ppszSubKeyName) {
    return This->lpVtbl->EnumKeys(This,Index,ppszSubKeyName);
}
static FORCEINLINE HRESULT ISpObjectToken_EnumValues(ISpObjectToken* This,ULONG Index,LPWSTR *ppszValueName) {
    return This->lpVtbl->EnumValues(This,Index,ppszValueName);
}
/*** ISpObjectToken methods ***/
static FORCEINLINE HRESULT ISpObjectToken_SetId(ISpObjectToken* This,LPCWSTR pszCategoryId,LPCWSTR pszTokenId,BOOL fCreateIfNotExist) {
    return This->lpVtbl->SetId(This,pszCategoryId,pszTokenId,fCreateIfNotExist);
}
static FORCEINLINE HRESULT ISpObjectToken_GetId(ISpObjectToken* This,LPWSTR *ppszCoMemTokenId) {
    return This->lpVtbl->GetId(This,ppszCoMemTokenId);
}
static FORCEINLINE HRESULT ISpObjectToken_GetCategory(ISpObjectToken* This,ISpObjectTokenCategory **ppTokenCategory) {
    return This->lpVtbl->GetCategory(This,ppTokenCategory);
}
static FORCEINLINE HRESULT ISpObjectToken_CreateInstance(ISpObjectToken* This,IUnknown *pUnkOuter,DWORD dwClsContext,REFIID riid,void **ppvObject) {
    return This->lpVtbl->CreateInstance(This,pUnkOuter,dwClsContext,riid,ppvObject);
}
static FORCEINLINE HRESULT ISpObjectToken_GetStorageFileName(ISpObjectToken* This,REFCLSID clsidCaller,LPCWSTR pszValueName,LPCWSTR pszFileNameSpecifier,ULONG nFolder,LPWSTR *ppszFilePath) {
    return This->lpVtbl->GetStorageFileName(This,clsidCaller,pszValueName,pszFileNameSpecifier,nFolder,ppszFilePath);
}
static FORCEINLINE HRESULT ISpObjectToken_RemoveStorageFileName(ISpObjectToken* This,REFCLSID clsidCaller,LPCWSTR pszKeyName,BOOL fDeleteFile) {
    return This->lpVtbl->RemoveStorageFileName(This,clsidCaller,pszKeyName,fDeleteFile);
}
static FORCEINLINE HRESULT ISpObjectToken_Remove(ISpObjectToken* This,const CLSID *pclsidCaller) {
    return This->lpVtbl->Remove(This,pclsidCaller);
}
static FORCEINLINE HRESULT ISpObjectToken_IsUISupported(ISpObjectToken* This,LPCWSTR pszTypeOfUI,void *pvExtraData,ULONG cbExtraData,IUnknown *punkObject,BOOL *pfSupported) {
    return This->lpVtbl->IsUISupported(This,pszTypeOfUI,pvExtraData,cbExtraData,punkObject,pfSupported);
}
static FORCEINLINE HRESULT ISpObjectToken_DisplayUI(ISpObjectToken* This,HWND hwndParent,LPCWSTR pszTitle,LPCWSTR pszTypeOfUI,void *pvExtraData,ULONG cbExtraData,IUnknown *punkObject) {
    return This->lpVtbl->DisplayUI(This,hwndParent,pszTitle,pszTypeOfUI,pvExtraData,cbExtraData,punkObject);
}
static FORCEINLINE HRESULT ISpObjectToken_MatchesAttributes(ISpObjectToken* This,LPCWSTR pszAttributes,BOOL *pfMatches) {
    return This->lpVtbl->MatchesAttributes(This,pszAttributes,pfMatches);
}
#endif
#endif

#endif


#endif  /* __ISpObjectToken_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IEnumSpObjectTokens interface
 */
#ifndef __IEnumSpObjectTokens_INTERFACE_DEFINED__
#define __IEnumSpObjectTokens_INTERFACE_DEFINED__

DEFINE_GUID(IID_IEnumSpObjectTokens, 0x06b64f9e, 0x7fda, 0x11d2, 0xb4,0xf2, 0x00,0xc0,0x4f,0x79,0x73,0x96);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("06b64f9e-7fda-11d2-b4f2-00c04f797396")
IEnumSpObjectTokens : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG celt,
        ISpObjectToken **pelt,
        ULONG *pceltFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG celt) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IEnumSpObjectTokens **ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        ULONG Index,
        ISpObjectToken **ppToken) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCount(
        ULONG *pCount) = 0;

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

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

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

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

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

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

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

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

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

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

    END_INTERFACE
} IEnumSpObjectTokensVtbl;

interface IEnumSpObjectTokens {
    CONST_VTBL IEnumSpObjectTokensVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IEnumSpObjectTokens_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumSpObjectTokens_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumSpObjectTokens_Release(This) (This)->lpVtbl->Release(This)
/*** IEnumSpObjectTokens methods ***/
#define IEnumSpObjectTokens_Next(This,celt,pelt,pceltFetched) (This)->lpVtbl->Next(This,celt,pelt,pceltFetched)
#define IEnumSpObjectTokens_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
#define IEnumSpObjectTokens_Reset(This) (This)->lpVtbl->Reset(This)
#define IEnumSpObjectTokens_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
#define IEnumSpObjectTokens_Item(This,Index,ppToken) (This)->lpVtbl->Item(This,Index,ppToken)
#define IEnumSpObjectTokens_GetCount(This,pCount) (This)->lpVtbl->GetCount(This,pCount)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IEnumSpObjectTokens_QueryInterface(IEnumSpObjectTokens* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IEnumSpObjectTokens_AddRef(IEnumSpObjectTokens* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IEnumSpObjectTokens_Release(IEnumSpObjectTokens* This) {
    return This->lpVtbl->Release(This);
}
/*** IEnumSpObjectTokens methods ***/
static FORCEINLINE HRESULT IEnumSpObjectTokens_Next(IEnumSpObjectTokens* This,ULONG celt,ISpObjectToken **pelt,ULONG *pceltFetched) {
    return This->lpVtbl->Next(This,celt,pelt,pceltFetched);
}
static FORCEINLINE HRESULT IEnumSpObjectTokens_Skip(IEnumSpObjectTokens* This,ULONG celt) {
    return This->lpVtbl->Skip(This,celt);
}
static FORCEINLINE HRESULT IEnumSpObjectTokens_Reset(IEnumSpObjectTokens* This) {
    return This->lpVtbl->Reset(This);
}
static FORCEINLINE HRESULT IEnumSpObjectTokens_Clone(IEnumSpObjectTokens* This,IEnumSpObjectTokens **ppEnum) {
    return This->lpVtbl->Clone(This,ppEnum);
}
static FORCEINLINE HRESULT IEnumSpObjectTokens_Item(IEnumSpObjectTokens* This,ULONG Index,ISpObjectToken **ppToken) {
    return This->lpVtbl->Item(This,Index,ppToken);
}
static FORCEINLINE HRESULT IEnumSpObjectTokens_GetCount(IEnumSpObjectTokens* This,ULONG *pCount) {
    return This->lpVtbl->GetCount(This,pCount);
}
#endif
#endif

#endif


#endif  /* __IEnumSpObjectTokens_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpPhrase interface
 */
#ifndef __ISpPhrase_INTERFACE_DEFINED__
#define __ISpPhrase_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpPhrase, 0x1a5c0354, 0xb621, 0x4b5a, 0x87,0x91, 0xd3,0x06,0xed,0x37,0x9e,0x53);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1a5c0354-b621-4b5a-8791-d306ed379e53")
ISpPhrase : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetPhrase(
        SPPHRASE **phrase) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSerializedPhrase(
        SPSERIALIZEDPHRASE **phrase) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetText(
        ULONG start,
        ULONG count,
        BOOL replacements,
        WCHAR **text,
        BYTE *attributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE Discard(
        DWORD types) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpPhrase, 0x1a5c0354, 0xb621, 0x4b5a, 0x87,0x91, 0xd3,0x06,0xed,0x37,0x9e,0x53)
#endif
#else
typedef struct ISpPhraseVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpPhrase methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPhrase)(
        ISpPhrase *This,
        SPPHRASE **phrase);

    HRESULT (STDMETHODCALLTYPE *GetSerializedPhrase)(
        ISpPhrase *This,
        SPSERIALIZEDPHRASE **phrase);

    HRESULT (STDMETHODCALLTYPE *GetText)(
        ISpPhrase *This,
        ULONG start,
        ULONG count,
        BOOL replacements,
        WCHAR **text,
        BYTE *attributes);

    HRESULT (STDMETHODCALLTYPE *Discard)(
        ISpPhrase *This,
        DWORD types);

    END_INTERFACE
} ISpPhraseVtbl;

interface ISpPhrase {
    CONST_VTBL ISpPhraseVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpPhrase_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpPhrase_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpPhrase_Release(This) (This)->lpVtbl->Release(This)
/*** ISpPhrase methods ***/
#define ISpPhrase_GetPhrase(This,phrase) (This)->lpVtbl->GetPhrase(This,phrase)
#define ISpPhrase_GetSerializedPhrase(This,phrase) (This)->lpVtbl->GetSerializedPhrase(This,phrase)
#define ISpPhrase_GetText(This,start,count,replacements,text,attributes) (This)->lpVtbl->GetText(This,start,count,replacements,text,attributes)
#define ISpPhrase_Discard(This,types) (This)->lpVtbl->Discard(This,types)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpPhrase_QueryInterface(ISpPhrase* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpPhrase_AddRef(ISpPhrase* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpPhrase_Release(ISpPhrase* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpPhrase methods ***/
static FORCEINLINE HRESULT ISpPhrase_GetPhrase(ISpPhrase* This,SPPHRASE **phrase) {
    return This->lpVtbl->GetPhrase(This,phrase);
}
static FORCEINLINE HRESULT ISpPhrase_GetSerializedPhrase(ISpPhrase* This,SPSERIALIZEDPHRASE **phrase) {
    return This->lpVtbl->GetSerializedPhrase(This,phrase);
}
static FORCEINLINE HRESULT ISpPhrase_GetText(ISpPhrase* This,ULONG start,ULONG count,BOOL replacements,WCHAR **text,BYTE *attributes) {
    return This->lpVtbl->GetText(This,start,count,replacements,text,attributes);
}
static FORCEINLINE HRESULT ISpPhrase_Discard(ISpPhrase* This,DWORD types) {
    return This->lpVtbl->Discard(This,types);
}
#endif
#endif

#endif


#endif  /* __ISpPhrase_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpPhraseAlt interface
 */
#ifndef __ISpPhraseAlt_INTERFACE_DEFINED__
#define __ISpPhraseAlt_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpPhraseAlt, 0x8fcebc98, 0x4e49, 0x4067, 0x9c,0x6c, 0xd8,0x6a,0x0e,0x09,0x2e,0x3d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8fcebc98-4e49-4067-9c6c-d86a0e092e3d")
ISpPhraseAlt : public ISpPhrase
{
    virtual HRESULT STDMETHODCALLTYPE GetAltInfo(
        ISpPhrase **parent,
        ULONG *start,
        ULONG *count,
        ULONG *elements) = 0;

    virtual HRESULT STDMETHODCALLTYPE Commit(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpPhraseAlt, 0x8fcebc98, 0x4e49, 0x4067, 0x9c,0x6c, 0xd8,0x6a,0x0e,0x09,0x2e,0x3d)
#endif
#else
typedef struct ISpPhraseAltVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpPhrase methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPhrase)(
        ISpPhraseAlt *This,
        SPPHRASE **phrase);

    HRESULT (STDMETHODCALLTYPE *GetSerializedPhrase)(
        ISpPhraseAlt *This,
        SPSERIALIZEDPHRASE **phrase);

    HRESULT (STDMETHODCALLTYPE *GetText)(
        ISpPhraseAlt *This,
        ULONG start,
        ULONG count,
        BOOL replacements,
        WCHAR **text,
        BYTE *attributes);

    HRESULT (STDMETHODCALLTYPE *Discard)(
        ISpPhraseAlt *This,
        DWORD types);

    /*** ISpPhraseAlt methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAltInfo)(
        ISpPhraseAlt *This,
        ISpPhrase **parent,
        ULONG *start,
        ULONG *count,
        ULONG *elements);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        ISpPhraseAlt *This);

    END_INTERFACE
} ISpPhraseAltVtbl;

interface ISpPhraseAlt {
    CONST_VTBL ISpPhraseAltVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpPhraseAlt_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpPhraseAlt_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpPhraseAlt_Release(This) (This)->lpVtbl->Release(This)
/*** ISpPhrase methods ***/
#define ISpPhraseAlt_GetPhrase(This,phrase) (This)->lpVtbl->GetPhrase(This,phrase)
#define ISpPhraseAlt_GetSerializedPhrase(This,phrase) (This)->lpVtbl->GetSerializedPhrase(This,phrase)
#define ISpPhraseAlt_GetText(This,start,count,replacements,text,attributes) (This)->lpVtbl->GetText(This,start,count,replacements,text,attributes)
#define ISpPhraseAlt_Discard(This,types) (This)->lpVtbl->Discard(This,types)
/*** ISpPhraseAlt methods ***/
#define ISpPhraseAlt_GetAltInfo(This,parent,start,count,elements) (This)->lpVtbl->GetAltInfo(This,parent,start,count,elements)
#define ISpPhraseAlt_Commit(This) (This)->lpVtbl->Commit(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpPhraseAlt_QueryInterface(ISpPhraseAlt* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpPhraseAlt_AddRef(ISpPhraseAlt* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpPhraseAlt_Release(ISpPhraseAlt* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpPhrase methods ***/
static FORCEINLINE HRESULT ISpPhraseAlt_GetPhrase(ISpPhraseAlt* This,SPPHRASE **phrase) {
    return This->lpVtbl->GetPhrase(This,phrase);
}
static FORCEINLINE HRESULT ISpPhraseAlt_GetSerializedPhrase(ISpPhraseAlt* This,SPSERIALIZEDPHRASE **phrase) {
    return This->lpVtbl->GetSerializedPhrase(This,phrase);
}
static FORCEINLINE HRESULT ISpPhraseAlt_GetText(ISpPhraseAlt* This,ULONG start,ULONG count,BOOL replacements,WCHAR **text,BYTE *attributes) {
    return This->lpVtbl->GetText(This,start,count,replacements,text,attributes);
}
static FORCEINLINE HRESULT ISpPhraseAlt_Discard(ISpPhraseAlt* This,DWORD types) {
    return This->lpVtbl->Discard(This,types);
}
/*** ISpPhraseAlt methods ***/
static FORCEINLINE HRESULT ISpPhraseAlt_GetAltInfo(ISpPhraseAlt* This,ISpPhrase **parent,ULONG *start,ULONG *count,ULONG *elements) {
    return This->lpVtbl->GetAltInfo(This,parent,start,count,elements);
}
static FORCEINLINE HRESULT ISpPhraseAlt_Commit(ISpPhraseAlt* This) {
    return This->lpVtbl->Commit(This);
}
#endif
#endif

#endif


#endif  /* __ISpPhraseAlt_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpRecoResult interface
 */
#ifndef __ISpRecoResult_INTERFACE_DEFINED__
#define __ISpRecoResult_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpRecoResult, 0x20b053be, 0xe235, 0x43cd, 0x9a,0x2a, 0x8d,0x17,0xa4,0x8b,0x78,0x42);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("20b053be-e235-43cd-9a2a-8d17a48b7842")
ISpRecoResult : public ISpPhrase
{
    virtual HRESULT STDMETHODCALLTYPE GetResultTimes(
        SPRECORESULTTIMES *times) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAlternates(
        ULONG start,
        ULONG elements,
        ULONG count,
        ISpPhraseAlt **phrases,
        ULONG *returned) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAudio(
        ULONG start,
        ULONG elements,
        ISpStreamFormat **stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE SpeakAudio(
        ULONG start,
        ULONG elements,
        DWORD flags,
        ULONG *number) = 0;

    virtual HRESULT STDMETHODCALLTYPE Serialize(
        SPSERIALIZEDRESULT **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE ScaleAudio(
        const GUID *format,
        const WAVEFORMATEX *wave) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRecoContext(
        ISpRecoContext *context) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpRecoResult, 0x20b053be, 0xe235, 0x43cd, 0x9a,0x2a, 0x8d,0x17,0xa4,0x8b,0x78,0x42)
#endif
#else
typedef struct ISpRecoResultVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpPhrase methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPhrase)(
        ISpRecoResult *This,
        SPPHRASE **phrase);

    HRESULT (STDMETHODCALLTYPE *GetSerializedPhrase)(
        ISpRecoResult *This,
        SPSERIALIZEDPHRASE **phrase);

    HRESULT (STDMETHODCALLTYPE *GetText)(
        ISpRecoResult *This,
        ULONG start,
        ULONG count,
        BOOL replacements,
        WCHAR **text,
        BYTE *attributes);

    HRESULT (STDMETHODCALLTYPE *Discard)(
        ISpRecoResult *This,
        DWORD types);

    /*** ISpRecoResult methods ***/
    HRESULT (STDMETHODCALLTYPE *GetResultTimes)(
        ISpRecoResult *This,
        SPRECORESULTTIMES *times);

    HRESULT (STDMETHODCALLTYPE *GetAlternates)(
        ISpRecoResult *This,
        ULONG start,
        ULONG elements,
        ULONG count,
        ISpPhraseAlt **phrases,
        ULONG *returned);

    HRESULT (STDMETHODCALLTYPE *GetAudio)(
        ISpRecoResult *This,
        ULONG start,
        ULONG elements,
        ISpStreamFormat **stream);

    HRESULT (STDMETHODCALLTYPE *SpeakAudio)(
        ISpRecoResult *This,
        ULONG start,
        ULONG elements,
        DWORD flags,
        ULONG *number);

    HRESULT (STDMETHODCALLTYPE *Serialize)(
        ISpRecoResult *This,
        SPSERIALIZEDRESULT **result);

    HRESULT (STDMETHODCALLTYPE *ScaleAudio)(
        ISpRecoResult *This,
        const GUID *format,
        const WAVEFORMATEX *wave);

    HRESULT (STDMETHODCALLTYPE *GetRecoContext)(
        ISpRecoResult *This,
        ISpRecoContext *context);

    END_INTERFACE
} ISpRecoResultVtbl;

interface ISpRecoResult {
    CONST_VTBL ISpRecoResultVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpRecoResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpRecoResult_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpRecoResult_Release(This) (This)->lpVtbl->Release(This)
/*** ISpPhrase methods ***/
#define ISpRecoResult_GetPhrase(This,phrase) (This)->lpVtbl->GetPhrase(This,phrase)
#define ISpRecoResult_GetSerializedPhrase(This,phrase) (This)->lpVtbl->GetSerializedPhrase(This,phrase)
#define ISpRecoResult_GetText(This,start,count,replacements,text,attributes) (This)->lpVtbl->GetText(This,start,count,replacements,text,attributes)
#define ISpRecoResult_Discard(This,types) (This)->lpVtbl->Discard(This,types)
/*** ISpRecoResult methods ***/
#define ISpRecoResult_GetResultTimes(This,times) (This)->lpVtbl->GetResultTimes(This,times)
#define ISpRecoResult_GetAlternates(This,start,elements,count,phrases,returned) (This)->lpVtbl->GetAlternates(This,start,elements,count,phrases,returned)
#define ISpRecoResult_GetAudio(This,start,elements,stream) (This)->lpVtbl->GetAudio(This,start,elements,stream)
#define ISpRecoResult_SpeakAudio(This,start,elements,flags,number) (This)->lpVtbl->SpeakAudio(This,start,elements,flags,number)
#define ISpRecoResult_Serialize(This,result) (This)->lpVtbl->Serialize(This,result)
#define ISpRecoResult_ScaleAudio(This,format,wave) (This)->lpVtbl->ScaleAudio(This,format,wave)
#define ISpRecoResult_GetRecoContext(This,context) (This)->lpVtbl->GetRecoContext(This,context)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpRecoResult_QueryInterface(ISpRecoResult* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpRecoResult_AddRef(ISpRecoResult* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpRecoResult_Release(ISpRecoResult* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpPhrase methods ***/
static FORCEINLINE HRESULT ISpRecoResult_GetPhrase(ISpRecoResult* This,SPPHRASE **phrase) {
    return This->lpVtbl->GetPhrase(This,phrase);
}
static FORCEINLINE HRESULT ISpRecoResult_GetSerializedPhrase(ISpRecoResult* This,SPSERIALIZEDPHRASE **phrase) {
    return This->lpVtbl->GetSerializedPhrase(This,phrase);
}
static FORCEINLINE HRESULT ISpRecoResult_GetText(ISpRecoResult* This,ULONG start,ULONG count,BOOL replacements,WCHAR **text,BYTE *attributes) {
    return This->lpVtbl->GetText(This,start,count,replacements,text,attributes);
}
static FORCEINLINE HRESULT ISpRecoResult_Discard(ISpRecoResult* This,DWORD types) {
    return This->lpVtbl->Discard(This,types);
}
/*** ISpRecoResult methods ***/
static FORCEINLINE HRESULT ISpRecoResult_GetResultTimes(ISpRecoResult* This,SPRECORESULTTIMES *times) {
    return This->lpVtbl->GetResultTimes(This,times);
}
static FORCEINLINE HRESULT ISpRecoResult_GetAlternates(ISpRecoResult* This,ULONG start,ULONG elements,ULONG count,ISpPhraseAlt **phrases,ULONG *returned) {
    return This->lpVtbl->GetAlternates(This,start,elements,count,phrases,returned);
}
static FORCEINLINE HRESULT ISpRecoResult_GetAudio(ISpRecoResult* This,ULONG start,ULONG elements,ISpStreamFormat **stream) {
    return This->lpVtbl->GetAudio(This,start,elements,stream);
}
static FORCEINLINE HRESULT ISpRecoResult_SpeakAudio(ISpRecoResult* This,ULONG start,ULONG elements,DWORD flags,ULONG *number) {
    return This->lpVtbl->SpeakAudio(This,start,elements,flags,number);
}
static FORCEINLINE HRESULT ISpRecoResult_Serialize(ISpRecoResult* This,SPSERIALIZEDRESULT **result) {
    return This->lpVtbl->Serialize(This,result);
}
static FORCEINLINE HRESULT ISpRecoResult_ScaleAudio(ISpRecoResult* This,const GUID *format,const WAVEFORMATEX *wave) {
    return This->lpVtbl->ScaleAudio(This,format,wave);
}
static FORCEINLINE HRESULT ISpRecoResult_GetRecoContext(ISpRecoResult* This,ISpRecoContext *context) {
    return This->lpVtbl->GetRecoContext(This,context);
}
#endif
#endif

#endif


#endif  /* __ISpRecoResult_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpGrammarBuilder interface
 */
#ifndef __ISpGrammarBuilder_INTERFACE_DEFINED__
#define __ISpGrammarBuilder_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpGrammarBuilder, 0x8137828f, 0x591a, 0x4a42, 0xbe,0x58, 0x49,0xea,0x7e,0xba,0xac,0x68);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8137828f-591a-4a42-be58-49ea7ebaac68")
ISpGrammarBuilder : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE ResetGrammar(
        LANGID language) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRule(
        const WCHAR *rule,
        DWORD id,
        DWORD attributes,
        BOOL should_create,
        SPSTATEHANDLE *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE ClearRule(
        SPSTATEHANDLE state) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateNewState(
        SPSTATEHANDLE instate,
        SPSTATEHANDLE *outstate) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddWordTransition(
        SPSTATEHANDLE from_state,
        SPSTATEHANDLE to_state,
        const WCHAR *value,
        const WCHAR *separators,
        SPGRAMMARWORDTYPE type,
        float weight,
        const SPPROPERTYINFO *info) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddRuleTransition(
        SPSTATEHANDLE from_state,
        SPSTATEHANDLE to_state,
        SPSTATEHANDLE rule,
        float weight,
        const SPPROPERTYINFO *info) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddResource(
        SPSTATEHANDLE state,
        const WCHAR *name,
        const WCHAR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE Commit(
        DWORD reserved) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpGrammarBuilder, 0x8137828f, 0x591a, 0x4a42, 0xbe,0x58, 0x49,0xea,0x7e,0xba,0xac,0x68)
#endif
#else
typedef struct ISpGrammarBuilderVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpGrammarBuilder methods ***/
    HRESULT (STDMETHODCALLTYPE *ResetGrammar)(
        ISpGrammarBuilder *This,
        LANGID language);

    HRESULT (STDMETHODCALLTYPE *GetRule)(
        ISpGrammarBuilder *This,
        const WCHAR *rule,
        DWORD id,
        DWORD attributes,
        BOOL should_create,
        SPSTATEHANDLE *state);

    HRESULT (STDMETHODCALLTYPE *ClearRule)(
        ISpGrammarBuilder *This,
        SPSTATEHANDLE state);

    HRESULT (STDMETHODCALLTYPE *CreateNewState)(
        ISpGrammarBuilder *This,
        SPSTATEHANDLE instate,
        SPSTATEHANDLE *outstate);

    HRESULT (STDMETHODCALLTYPE *AddWordTransition)(
        ISpGrammarBuilder *This,
        SPSTATEHANDLE from_state,
        SPSTATEHANDLE to_state,
        const WCHAR *value,
        const WCHAR *separators,
        SPGRAMMARWORDTYPE type,
        float weight,
        const SPPROPERTYINFO *info);

    HRESULT (STDMETHODCALLTYPE *AddRuleTransition)(
        ISpGrammarBuilder *This,
        SPSTATEHANDLE from_state,
        SPSTATEHANDLE to_state,
        SPSTATEHANDLE rule,
        float weight,
        const SPPROPERTYINFO *info);

    HRESULT (STDMETHODCALLTYPE *AddResource)(
        ISpGrammarBuilder *This,
        SPSTATEHANDLE state,
        const WCHAR *name,
        const WCHAR *value);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        ISpGrammarBuilder *This,
        DWORD reserved);

    END_INTERFACE
} ISpGrammarBuilderVtbl;

interface ISpGrammarBuilder {
    CONST_VTBL ISpGrammarBuilderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpGrammarBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpGrammarBuilder_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpGrammarBuilder_Release(This) (This)->lpVtbl->Release(This)
/*** ISpGrammarBuilder methods ***/
#define ISpGrammarBuilder_ResetGrammar(This,language) (This)->lpVtbl->ResetGrammar(This,language)
#define ISpGrammarBuilder_GetRule(This,rule,id,attributes,should_create,state) (This)->lpVtbl->GetRule(This,rule,id,attributes,should_create,state)
#define ISpGrammarBuilder_ClearRule(This,state) (This)->lpVtbl->ClearRule(This,state)
#define ISpGrammarBuilder_CreateNewState(This,instate,outstate) (This)->lpVtbl->CreateNewState(This,instate,outstate)
#define ISpGrammarBuilder_AddWordTransition(This,from_state,to_state,value,separators,type,weight,info) (This)->lpVtbl->AddWordTransition(This,from_state,to_state,value,separators,type,weight,info)
#define ISpGrammarBuilder_AddRuleTransition(This,from_state,to_state,rule,weight,info) (This)->lpVtbl->AddRuleTransition(This,from_state,to_state,rule,weight,info)
#define ISpGrammarBuilder_AddResource(This,state,name,value) (This)->lpVtbl->AddResource(This,state,name,value)
#define ISpGrammarBuilder_Commit(This,reserved) (This)->lpVtbl->Commit(This,reserved)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpGrammarBuilder_QueryInterface(ISpGrammarBuilder* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpGrammarBuilder_AddRef(ISpGrammarBuilder* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpGrammarBuilder_Release(ISpGrammarBuilder* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpGrammarBuilder methods ***/
static FORCEINLINE HRESULT ISpGrammarBuilder_ResetGrammar(ISpGrammarBuilder* This,LANGID language) {
    return This->lpVtbl->ResetGrammar(This,language);
}
static FORCEINLINE HRESULT ISpGrammarBuilder_GetRule(ISpGrammarBuilder* This,const WCHAR *rule,DWORD id,DWORD attributes,BOOL should_create,SPSTATEHANDLE *state) {
    return This->lpVtbl->GetRule(This,rule,id,attributes,should_create,state);
}
static FORCEINLINE HRESULT ISpGrammarBuilder_ClearRule(ISpGrammarBuilder* This,SPSTATEHANDLE state) {
    return This->lpVtbl->ClearRule(This,state);
}
static FORCEINLINE HRESULT ISpGrammarBuilder_CreateNewState(ISpGrammarBuilder* This,SPSTATEHANDLE instate,SPSTATEHANDLE *outstate) {
    return This->lpVtbl->CreateNewState(This,instate,outstate);
}
static FORCEINLINE HRESULT ISpGrammarBuilder_AddWordTransition(ISpGrammarBuilder* This,SPSTATEHANDLE from_state,SPSTATEHANDLE to_state,const WCHAR *value,const WCHAR *separators,SPGRAMMARWORDTYPE type,float weight,const SPPROPERTYINFO *info) {
    return This->lpVtbl->AddWordTransition(This,from_state,to_state,value,separators,type,weight,info);
}
static FORCEINLINE HRESULT ISpGrammarBuilder_AddRuleTransition(ISpGrammarBuilder* This,SPSTATEHANDLE from_state,SPSTATEHANDLE to_state,SPSTATEHANDLE rule,float weight,const SPPROPERTYINFO *info) {
    return This->lpVtbl->AddRuleTransition(This,from_state,to_state,rule,weight,info);
}
static FORCEINLINE HRESULT ISpGrammarBuilder_AddResource(ISpGrammarBuilder* This,SPSTATEHANDLE state,const WCHAR *name,const WCHAR *value) {
    return This->lpVtbl->AddResource(This,state,name,value);
}
static FORCEINLINE HRESULT ISpGrammarBuilder_Commit(ISpGrammarBuilder* This,DWORD reserved) {
    return This->lpVtbl->Commit(This,reserved);
}
#endif
#endif

#endif


#endif  /* __ISpGrammarBuilder_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpRecoGrammar interface
 */
#ifndef __ISpRecoGrammar_INTERFACE_DEFINED__
#define __ISpRecoGrammar_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpRecoGrammar, 0x2177db29, 0x7f45, 0x47d0, 0x85,0x54, 0x06,0x7e,0x91,0xc8,0x05,0x02);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2177db29-7f45-47d0-8554-067e91c80502")
ISpRecoGrammar : public ISpGrammarBuilder
{
    virtual HRESULT STDMETHODCALLTYPE GetGrammarId(
        ULONGLONG *grammar) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRecoContext(
        ISpRecoContext **context) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadCmdFromFile(
        const WCHAR *pszFileName,
        SPLOADOPTIONS options) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadCmdFromObject(
        REFCLSID rcid,
        const WCHAR *pszGrammarName,
        SPLOADOPTIONS options) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadCmdFromResource(
        HMODULE hmod,
        const WCHAR *name,
        const WCHAR *type,
        WORD language,
        SPLOADOPTIONS options) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadCmdFromMemory(
        const SPBINARYGRAMMAR *grammar,
        SPLOADOPTIONS options) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadCmdFromProprietaryGrammar(
        REFGUID guid,
        const WCHAR *param,
        const void *data,
        ULONG size,
        SPLOADOPTIONS options) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRuleState(
        const WCHAR *name,
        void *reserved,
        SPRULESTATE state) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRuleIdState(
        ULONG rule,
        SPRULESTATE state) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadDictation(
        const WCHAR *name,
        SPLOADOPTIONS options) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnloadDictation(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDictationState(
        SPRULESTATE state) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetWordSequenceData(
        const WCHAR *text,
        ULONG count,
        const SPTEXTSELECTIONINFO *info) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTextSelection(
        const SPTEXTSELECTIONINFO *info) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsPronounceable(
        const WCHAR *word,
        SPWORDPRONOUNCEABLE *pronounceable) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetGrammarState(
        SPGRAMMARSTATE state) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveCmd(
        IStream *stream,
        WCHAR **error) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGrammarState(
        SPGRAMMARSTATE *state) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpRecoGrammar, 0x2177db29, 0x7f45, 0x47d0, 0x85,0x54, 0x06,0x7e,0x91,0xc8,0x05,0x02)
#endif
#else
typedef struct ISpRecoGrammarVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpGrammarBuilder methods ***/
    HRESULT (STDMETHODCALLTYPE *ResetGrammar)(
        ISpRecoGrammar *This,
        LANGID language);

    HRESULT (STDMETHODCALLTYPE *GetRule)(
        ISpRecoGrammar *This,
        const WCHAR *rule,
        DWORD id,
        DWORD attributes,
        BOOL should_create,
        SPSTATEHANDLE *state);

    HRESULT (STDMETHODCALLTYPE *ClearRule)(
        ISpRecoGrammar *This,
        SPSTATEHANDLE state);

    HRESULT (STDMETHODCALLTYPE *CreateNewState)(
        ISpRecoGrammar *This,
        SPSTATEHANDLE instate,
        SPSTATEHANDLE *outstate);

    HRESULT (STDMETHODCALLTYPE *AddWordTransition)(
        ISpRecoGrammar *This,
        SPSTATEHANDLE from_state,
        SPSTATEHANDLE to_state,
        const WCHAR *value,
        const WCHAR *separators,
        SPGRAMMARWORDTYPE type,
        float weight,
        const SPPROPERTYINFO *info);

    HRESULT (STDMETHODCALLTYPE *AddRuleTransition)(
        ISpRecoGrammar *This,
        SPSTATEHANDLE from_state,
        SPSTATEHANDLE to_state,
        SPSTATEHANDLE rule,
        float weight,
        const SPPROPERTYINFO *info);

    HRESULT (STDMETHODCALLTYPE *AddResource)(
        ISpRecoGrammar *This,
        SPSTATEHANDLE state,
        const WCHAR *name,
        const WCHAR *value);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        ISpRecoGrammar *This,
        DWORD reserved);

    /*** ISpRecoGrammar methods ***/
    HRESULT (STDMETHODCALLTYPE *GetGrammarId)(
        ISpRecoGrammar *This,
        ULONGLONG *grammar);

    HRESULT (STDMETHODCALLTYPE *GetRecoContext)(
        ISpRecoGrammar *This,
        ISpRecoContext **context);

    HRESULT (STDMETHODCALLTYPE *LoadCmdFromFile)(
        ISpRecoGrammar *This,
        const WCHAR *pszFileName,
        SPLOADOPTIONS options);

    HRESULT (STDMETHODCALLTYPE *LoadCmdFromObject)(
        ISpRecoGrammar *This,
        REFCLSID rcid,
        const WCHAR *pszGrammarName,
        SPLOADOPTIONS options);

    HRESULT (STDMETHODCALLTYPE *LoadCmdFromResource)(
        ISpRecoGrammar *This,
        HMODULE hmod,
        const WCHAR *name,
        const WCHAR *type,
        WORD language,
        SPLOADOPTIONS options);

    HRESULT (STDMETHODCALLTYPE *LoadCmdFromMemory)(
        ISpRecoGrammar *This,
        const SPBINARYGRAMMAR *grammar,
        SPLOADOPTIONS options);

    HRESULT (STDMETHODCALLTYPE *LoadCmdFromProprietaryGrammar)(
        ISpRecoGrammar *This,
        REFGUID guid,
        const WCHAR *param,
        const void *data,
        ULONG size,
        SPLOADOPTIONS options);

    HRESULT (STDMETHODCALLTYPE *SetRuleState)(
        ISpRecoGrammar *This,
        const WCHAR *name,
        void *reserved,
        SPRULESTATE state);

    HRESULT (STDMETHODCALLTYPE *SetRuleIdState)(
        ISpRecoGrammar *This,
        ULONG rule,
        SPRULESTATE state);

    HRESULT (STDMETHODCALLTYPE *LoadDictation)(
        ISpRecoGrammar *This,
        const WCHAR *name,
        SPLOADOPTIONS options);

    HRESULT (STDMETHODCALLTYPE *UnloadDictation)(
        ISpRecoGrammar *This);

    HRESULT (STDMETHODCALLTYPE *SetDictationState)(
        ISpRecoGrammar *This,
        SPRULESTATE state);

    HRESULT (STDMETHODCALLTYPE *SetWordSequenceData)(
        ISpRecoGrammar *This,
        const WCHAR *text,
        ULONG count,
        const SPTEXTSELECTIONINFO *info);

    HRESULT (STDMETHODCALLTYPE *SetTextSelection)(
        ISpRecoGrammar *This,
        const SPTEXTSELECTIONINFO *info);

    HRESULT (STDMETHODCALLTYPE *IsPronounceable)(
        ISpRecoGrammar *This,
        const WCHAR *word,
        SPWORDPRONOUNCEABLE *pronounceable);

    HRESULT (STDMETHODCALLTYPE *SetGrammarState)(
        ISpRecoGrammar *This,
        SPGRAMMARSTATE state);

    HRESULT (STDMETHODCALLTYPE *SaveCmd)(
        ISpRecoGrammar *This,
        IStream *stream,
        WCHAR **error);

    HRESULT (STDMETHODCALLTYPE *GetGrammarState)(
        ISpRecoGrammar *This,
        SPGRAMMARSTATE *state);

    END_INTERFACE
} ISpRecoGrammarVtbl;

interface ISpRecoGrammar {
    CONST_VTBL ISpRecoGrammarVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpRecoGrammar_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpRecoGrammar_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpRecoGrammar_Release(This) (This)->lpVtbl->Release(This)
/*** ISpGrammarBuilder methods ***/
#define ISpRecoGrammar_ResetGrammar(This,language) (This)->lpVtbl->ResetGrammar(This,language)
#define ISpRecoGrammar_GetRule(This,rule,id,attributes,should_create,state) (This)->lpVtbl->GetRule(This,rule,id,attributes,should_create,state)
#define ISpRecoGrammar_ClearRule(This,state) (This)->lpVtbl->ClearRule(This,state)
#define ISpRecoGrammar_CreateNewState(This,instate,outstate) (This)->lpVtbl->CreateNewState(This,instate,outstate)
#define ISpRecoGrammar_AddWordTransition(This,from_state,to_state,value,separators,type,weight,info) (This)->lpVtbl->AddWordTransition(This,from_state,to_state,value,separators,type,weight,info)
#define ISpRecoGrammar_AddRuleTransition(This,from_state,to_state,rule,weight,info) (This)->lpVtbl->AddRuleTransition(This,from_state,to_state,rule,weight,info)
#define ISpRecoGrammar_AddResource(This,state,name,value) (This)->lpVtbl->AddResource(This,state,name,value)
#define ISpRecoGrammar_Commit(This,reserved) (This)->lpVtbl->Commit(This,reserved)
/*** ISpRecoGrammar methods ***/
#define ISpRecoGrammar_GetGrammarId(This,grammar) (This)->lpVtbl->GetGrammarId(This,grammar)
#define ISpRecoGrammar_GetRecoContext(This,context) (This)->lpVtbl->GetRecoContext(This,context)
#define ISpRecoGrammar_LoadCmdFromFile(This,pszFileName,options) (This)->lpVtbl->LoadCmdFromFile(This,pszFileName,options)
#define ISpRecoGrammar_LoadCmdFromObject(This,rcid,pszGrammarName,options) (This)->lpVtbl->LoadCmdFromObject(This,rcid,pszGrammarName,options)
#define ISpRecoGrammar_LoadCmdFromResource(This,hmod,name,type,language,options) (This)->lpVtbl->LoadCmdFromResource(This,hmod,name,type,language,options)
#define ISpRecoGrammar_LoadCmdFromMemory(This,grammar,options) (This)->lpVtbl->LoadCmdFromMemory(This,grammar,options)
#define ISpRecoGrammar_LoadCmdFromProprietaryGrammar(This,guid,param,data,size,options) (This)->lpVtbl->LoadCmdFromProprietaryGrammar(This,guid,param,data,size,options)
#define ISpRecoGrammar_SetRuleState(This,name,reserved,state) (This)->lpVtbl->SetRuleState(This,name,reserved,state)
#define ISpRecoGrammar_SetRuleIdState(This,rule,state) (This)->lpVtbl->SetRuleIdState(This,rule,state)
#define ISpRecoGrammar_LoadDictation(This,name,options) (This)->lpVtbl->LoadDictation(This,name,options)
#define ISpRecoGrammar_UnloadDictation(This) (This)->lpVtbl->UnloadDictation(This)
#define ISpRecoGrammar_SetDictationState(This,state) (This)->lpVtbl->SetDictationState(This,state)
#define ISpRecoGrammar_SetWordSequenceData(This,text,count,info) (This)->lpVtbl->SetWordSequenceData(This,text,count,info)
#define ISpRecoGrammar_SetTextSelection(This,info) (This)->lpVtbl->SetTextSelection(This,info)
#define ISpRecoGrammar_IsPronounceable(This,word,pronounceable) (This)->lpVtbl->IsPronounceable(This,word,pronounceable)
#define ISpRecoGrammar_SetGrammarState(This,state) (This)->lpVtbl->SetGrammarState(This,state)
#define ISpRecoGrammar_SaveCmd(This,stream,error) (This)->lpVtbl->SaveCmd(This,stream,error)
#define ISpRecoGrammar_GetGrammarState(This,state) (This)->lpVtbl->GetGrammarState(This,state)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpRecoGrammar_QueryInterface(ISpRecoGrammar* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpRecoGrammar_AddRef(ISpRecoGrammar* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpRecoGrammar_Release(ISpRecoGrammar* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpGrammarBuilder methods ***/
static FORCEINLINE HRESULT ISpRecoGrammar_ResetGrammar(ISpRecoGrammar* This,LANGID language) {
    return This->lpVtbl->ResetGrammar(This,language);
}
static FORCEINLINE HRESULT ISpRecoGrammar_GetRule(ISpRecoGrammar* This,const WCHAR *rule,DWORD id,DWORD attributes,BOOL should_create,SPSTATEHANDLE *state) {
    return This->lpVtbl->GetRule(This,rule,id,attributes,should_create,state);
}
static FORCEINLINE HRESULT ISpRecoGrammar_ClearRule(ISpRecoGrammar* This,SPSTATEHANDLE state) {
    return This->lpVtbl->ClearRule(This,state);
}
static FORCEINLINE HRESULT ISpRecoGrammar_CreateNewState(ISpRecoGrammar* This,SPSTATEHANDLE instate,SPSTATEHANDLE *outstate) {
    return This->lpVtbl->CreateNewState(This,instate,outstate);
}
static FORCEINLINE HRESULT ISpRecoGrammar_AddWordTransition(ISpRecoGrammar* This,SPSTATEHANDLE from_state,SPSTATEHANDLE to_state,const WCHAR *value,const WCHAR *separators,SPGRAMMARWORDTYPE type,float weight,const SPPROPERTYINFO *info) {
    return This->lpVtbl->AddWordTransition(This,from_state,to_state,value,separators,type,weight,info);
}
static FORCEINLINE HRESULT ISpRecoGrammar_AddRuleTransition(ISpRecoGrammar* This,SPSTATEHANDLE from_state,SPSTATEHANDLE to_state,SPSTATEHANDLE rule,float weight,const SPPROPERTYINFO *info) {
    return This->lpVtbl->AddRuleTransition(This,from_state,to_state,rule,weight,info);
}
static FORCEINLINE HRESULT ISpRecoGrammar_AddResource(ISpRecoGrammar* This,SPSTATEHANDLE state,const WCHAR *name,const WCHAR *value) {
    return This->lpVtbl->AddResource(This,state,name,value);
}
static FORCEINLINE HRESULT ISpRecoGrammar_Commit(ISpRecoGrammar* This,DWORD reserved) {
    return This->lpVtbl->Commit(This,reserved);
}
/*** ISpRecoGrammar methods ***/
static FORCEINLINE HRESULT ISpRecoGrammar_GetGrammarId(ISpRecoGrammar* This,ULONGLONG *grammar) {
    return This->lpVtbl->GetGrammarId(This,grammar);
}
static FORCEINLINE HRESULT ISpRecoGrammar_GetRecoContext(ISpRecoGrammar* This,ISpRecoContext **context) {
    return This->lpVtbl->GetRecoContext(This,context);
}
static FORCEINLINE HRESULT ISpRecoGrammar_LoadCmdFromFile(ISpRecoGrammar* This,const WCHAR *pszFileName,SPLOADOPTIONS options) {
    return This->lpVtbl->LoadCmdFromFile(This,pszFileName,options);
}
static FORCEINLINE HRESULT ISpRecoGrammar_LoadCmdFromObject(ISpRecoGrammar* This,REFCLSID rcid,const WCHAR *pszGrammarName,SPLOADOPTIONS options) {
    return This->lpVtbl->LoadCmdFromObject(This,rcid,pszGrammarName,options);
}
static FORCEINLINE HRESULT ISpRecoGrammar_LoadCmdFromResource(ISpRecoGrammar* This,HMODULE hmod,const WCHAR *name,const WCHAR *type,WORD language,SPLOADOPTIONS options) {
    return This->lpVtbl->LoadCmdFromResource(This,hmod,name,type,language,options);
}
static FORCEINLINE HRESULT ISpRecoGrammar_LoadCmdFromMemory(ISpRecoGrammar* This,const SPBINARYGRAMMAR *grammar,SPLOADOPTIONS options) {
    return This->lpVtbl->LoadCmdFromMemory(This,grammar,options);
}
static FORCEINLINE HRESULT ISpRecoGrammar_LoadCmdFromProprietaryGrammar(ISpRecoGrammar* This,REFGUID guid,const WCHAR *param,const void *data,ULONG size,SPLOADOPTIONS options) {
    return This->lpVtbl->LoadCmdFromProprietaryGrammar(This,guid,param,data,size,options);
}
static FORCEINLINE HRESULT ISpRecoGrammar_SetRuleState(ISpRecoGrammar* This,const WCHAR *name,void *reserved,SPRULESTATE state) {
    return This->lpVtbl->SetRuleState(This,name,reserved,state);
}
static FORCEINLINE HRESULT ISpRecoGrammar_SetRuleIdState(ISpRecoGrammar* This,ULONG rule,SPRULESTATE state) {
    return This->lpVtbl->SetRuleIdState(This,rule,state);
}
static FORCEINLINE HRESULT ISpRecoGrammar_LoadDictation(ISpRecoGrammar* This,const WCHAR *name,SPLOADOPTIONS options) {
    return This->lpVtbl->LoadDictation(This,name,options);
}
static FORCEINLINE HRESULT ISpRecoGrammar_UnloadDictation(ISpRecoGrammar* This) {
    return This->lpVtbl->UnloadDictation(This);
}
static FORCEINLINE HRESULT ISpRecoGrammar_SetDictationState(ISpRecoGrammar* This,SPRULESTATE state) {
    return This->lpVtbl->SetDictationState(This,state);
}
static FORCEINLINE HRESULT ISpRecoGrammar_SetWordSequenceData(ISpRecoGrammar* This,const WCHAR *text,ULONG count,const SPTEXTSELECTIONINFO *info) {
    return This->lpVtbl->SetWordSequenceData(This,text,count,info);
}
static FORCEINLINE HRESULT ISpRecoGrammar_SetTextSelection(ISpRecoGrammar* This,const SPTEXTSELECTIONINFO *info) {
    return This->lpVtbl->SetTextSelection(This,info);
}
static FORCEINLINE HRESULT ISpRecoGrammar_IsPronounceable(ISpRecoGrammar* This,const WCHAR *word,SPWORDPRONOUNCEABLE *pronounceable) {
    return This->lpVtbl->IsPronounceable(This,word,pronounceable);
}
static FORCEINLINE HRESULT ISpRecoGrammar_SetGrammarState(ISpRecoGrammar* This,SPGRAMMARSTATE state) {
    return This->lpVtbl->SetGrammarState(This,state);
}
static FORCEINLINE HRESULT ISpRecoGrammar_SaveCmd(ISpRecoGrammar* This,IStream *stream,WCHAR **error) {
    return This->lpVtbl->SaveCmd(This,stream,error);
}
static FORCEINLINE HRESULT ISpRecoGrammar_GetGrammarState(ISpRecoGrammar* This,SPGRAMMARSTATE *state) {
    return This->lpVtbl->GetGrammarState(This,state);
}
#endif
#endif

#endif


#endif  /* __ISpRecoGrammar_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpNotifySink interface
 */
#ifndef __ISpNotifySink_INTERFACE_DEFINED__
#define __ISpNotifySink_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpNotifySink, 0x259684dc, 0x37c3, 0x11d2, 0x96,0x03, 0x00,0xc0,0x4f,0x8e,0xe6,0x28);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("259684dc-37c3-11d2-9603-00c04f8ee628")
ISpNotifySink : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Notify(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpNotifySink, 0x259684dc, 0x37c3, 0x11d2, 0x96,0x03, 0x00,0xc0,0x4f,0x8e,0xe6,0x28)
#endif
#else
typedef struct ISpNotifySinkVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpNotifySink methods ***/
    HRESULT (STDMETHODCALLTYPE *Notify)(
        ISpNotifySink *This);

    END_INTERFACE
} ISpNotifySinkVtbl;

interface ISpNotifySink {
    CONST_VTBL ISpNotifySinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpNotifySink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpNotifySink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpNotifySink_Release(This) (This)->lpVtbl->Release(This)
/*** ISpNotifySink methods ***/
#define ISpNotifySink_Notify(This) (This)->lpVtbl->Notify(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpNotifySink_QueryInterface(ISpNotifySink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpNotifySink_AddRef(ISpNotifySink* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpNotifySink_Release(ISpNotifySink* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpNotifySink methods ***/
static FORCEINLINE HRESULT ISpNotifySink_Notify(ISpNotifySink* This) {
    return This->lpVtbl->Notify(This);
}
#endif
#endif

#endif


#endif  /* __ISpNotifySink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpVoice interface
 */
#ifndef __ISpVoice_INTERFACE_DEFINED__
#define __ISpVoice_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpVoice, 0x6c44df74, 0x72b9, 0x4992, 0xa1,0xec, 0xef,0x99,0x6e,0x04,0x22,0xd4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6c44df74-72b9-4992-a1ec-ef996e0422d4")
ISpVoice : public ISpEventSource
{
    virtual HRESULT STDMETHODCALLTYPE SetOutput(
        IUnknown *unk,
        BOOL changes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputObjectToken(
        ISpObjectToken **token) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOutputStream(
        ISpStreamFormat **stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE Pause(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetVoice(
        ISpObjectToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVoice(
        ISpObjectToken **token) = 0;

    virtual HRESULT STDMETHODCALLTYPE Speak(
        const WCHAR *pwcs,
        DWORD flags,
        ULONG *number) = 0;

    virtual HRESULT STDMETHODCALLTYPE SpeakStream(
        IStream *stream,
        DWORD flags,
        ULONG *number) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStatus(
        SPVOICESTATUS *status,
        WCHAR **bookmark) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        const WCHAR *type,
        LONG items,
        ULONG *skipped) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPriority(
        SPVPRIORITY priority) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPriority(
        SPVPRIORITY *priority) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAlertBoundary(
        SPEVENTENUM boundary) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAlertBoundary(
        SPEVENTENUM *boundary) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRate(
        LONG adjust) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetVolume(
        USHORT volume) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE WaitUntilDone(
        ULONG timeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSyncSpeakTimeout(
        ULONG timeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSyncSpeakTimeout(
        ULONG *timeout) = 0;

    virtual HANDLE STDMETHODCALLTYPE SpeakCompleteEvent(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsUISupported(
        const WCHAR *type,
        void *extra,
        ULONG count,
        BOOL *supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisplayUI(
        HWND parent,
        const WCHAR *title,
        const WCHAR *type,
        void *extra,
        ULONG count) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpVoice, 0x6c44df74, 0x72b9, 0x4992, 0xa1,0xec, 0xef,0x99,0x6e,0x04,0x22,0xd4)
#endif
#else
typedef struct ISpVoiceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpNotifySource methods ***/
    HRESULT (STDMETHODCALLTYPE *SetNotifySink)(
        ISpVoice *This,
        ISpNotifySink *sink);

    HRESULT (STDMETHODCALLTYPE *SetNotifyWindowMessage)(
        ISpVoice *This,
        HWND hwnd,
        UINT msg,
        WPARAM wparam,
        LPARAM lparam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackFunction)(
        ISpVoice *This,
        SPNOTIFYCALLBACK *callback,
        WPARAM wparam,
        LPARAM lparam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackInterface)(
        ISpVoice *This,
        ISpNotifyCallback *callback,
        WPARAM wparam,
        LPARAM lparam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyWin32Event)(
        ISpVoice *This);

    HRESULT (STDMETHODCALLTYPE *WaitForNotifyEvent)(
        ISpVoice *This,
        DWORD milliseconds);

    HANDLE (STDMETHODCALLTYPE *GetNotifyEventHandle)(
        ISpVoice *This);

    /*** ISpEventSource methods ***/
    HRESULT (STDMETHODCALLTYPE *SetInterest)(
        ISpVoice *This,
        ULONGLONG event,
        ULONGLONG queued);

    HRESULT (STDMETHODCALLTYPE *GetEvents)(
        ISpVoice *This,
        ULONG count,
        SPEVENT *array,
        ULONG *fetched);

    HRESULT (STDMETHODCALLTYPE *GetInfo)(
        ISpVoice *This,
        SPEVENTSOURCEINFO *info);

    /*** ISpVoice methods ***/
    HRESULT (STDMETHODCALLTYPE *SetOutput)(
        ISpVoice *This,
        IUnknown *unk,
        BOOL changes);

    HRESULT (STDMETHODCALLTYPE *GetOutputObjectToken)(
        ISpVoice *This,
        ISpObjectToken **token);

    HRESULT (STDMETHODCALLTYPE *GetOutputStream)(
        ISpVoice *This,
        ISpStreamFormat **stream);

    HRESULT (STDMETHODCALLTYPE *Pause)(
        ISpVoice *This);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        ISpVoice *This);

    HRESULT (STDMETHODCALLTYPE *SetVoice)(
        ISpVoice *This,
        ISpObjectToken *token);

    HRESULT (STDMETHODCALLTYPE *GetVoice)(
        ISpVoice *This,
        ISpObjectToken **token);

    HRESULT (STDMETHODCALLTYPE *Speak)(
        ISpVoice *This,
        const WCHAR *pwcs,
        DWORD flags,
        ULONG *number);

    HRESULT (STDMETHODCALLTYPE *SpeakStream)(
        ISpVoice *This,
        IStream *stream,
        DWORD flags,
        ULONG *number);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        ISpVoice *This,
        SPVOICESTATUS *status,
        WCHAR **bookmark);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        ISpVoice *This,
        const WCHAR *type,
        LONG items,
        ULONG *skipped);

    HRESULT (STDMETHODCALLTYPE *SetPriority)(
        ISpVoice *This,
        SPVPRIORITY priority);

    HRESULT (STDMETHODCALLTYPE *GetPriority)(
        ISpVoice *This,
        SPVPRIORITY *priority);

    HRESULT (STDMETHODCALLTYPE *SetAlertBoundary)(
        ISpVoice *This,
        SPEVENTENUM boundary);

    HRESULT (STDMETHODCALLTYPE *GetAlertBoundary)(
        ISpVoice *This,
        SPEVENTENUM *boundary);

    HRESULT (STDMETHODCALLTYPE *SetRate)(
        ISpVoice *This,
        LONG adjust);

    HRESULT (STDMETHODCALLTYPE *GetRate)(
        ISpVoice *This,
        LONG *adjust);

    HRESULT (STDMETHODCALLTYPE *SetVolume)(
        ISpVoice *This,
        USHORT volume);

    HRESULT (STDMETHODCALLTYPE *GetVolume)(
        ISpVoice *This,
        USHORT *volume);

    HRESULT (STDMETHODCALLTYPE *WaitUntilDone)(
        ISpVoice *This,
        ULONG timeout);

    HRESULT (STDMETHODCALLTYPE *SetSyncSpeakTimeout)(
        ISpVoice *This,
        ULONG timeout);

    HRESULT (STDMETHODCALLTYPE *GetSyncSpeakTimeout)(
        ISpVoice *This,
        ULONG *timeout);

    HANDLE (STDMETHODCALLTYPE *SpeakCompleteEvent)(
        ISpVoice *This);

    HRESULT (STDMETHODCALLTYPE *IsUISupported)(
        ISpVoice *This,
        const WCHAR *type,
        void *extra,
        ULONG count,
        BOOL *supported);

    HRESULT (STDMETHODCALLTYPE *DisplayUI)(
        ISpVoice *This,
        HWND parent,
        const WCHAR *title,
        const WCHAR *type,
        void *extra,
        ULONG count);

    END_INTERFACE
} ISpVoiceVtbl;

interface ISpVoice {
    CONST_VTBL ISpVoiceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpVoice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpVoice_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpVoice_Release(This) (This)->lpVtbl->Release(This)
/*** ISpNotifySource methods ***/
#define ISpVoice_SetNotifySink(This,sink) (This)->lpVtbl->SetNotifySink(This,sink)
#define ISpVoice_SetNotifyWindowMessage(This,hwnd,msg,wparam,lparam) (This)->lpVtbl->SetNotifyWindowMessage(This,hwnd,msg,wparam,lparam)
#define ISpVoice_SetNotifyCallbackFunction(This,callback,wparam,lparam) (This)->lpVtbl->SetNotifyCallbackFunction(This,callback,wparam,lparam)
#define ISpVoice_SetNotifyCallbackInterface(This,callback,wparam,lparam) (This)->lpVtbl->SetNotifyCallbackInterface(This,callback,wparam,lparam)
#define ISpVoice_SetNotifyWin32Event(This) (This)->lpVtbl->SetNotifyWin32Event(This)
#define ISpVoice_WaitForNotifyEvent(This,milliseconds) (This)->lpVtbl->WaitForNotifyEvent(This,milliseconds)
#define ISpVoice_GetNotifyEventHandle(This) (This)->lpVtbl->GetNotifyEventHandle(This)
/*** ISpEventSource methods ***/
#define ISpVoice_SetInterest(This,event,queued) (This)->lpVtbl->SetInterest(This,event,queued)
#define ISpVoice_GetEvents(This,count,array,fetched) (This)->lpVtbl->GetEvents(This,count,array,fetched)
#define ISpVoice_GetInfo(This,info) (This)->lpVtbl->GetInfo(This,info)
/*** ISpVoice methods ***/
#define ISpVoice_SetOutput(This,unk,changes) (This)->lpVtbl->SetOutput(This,unk,changes)
#define ISpVoice_GetOutputObjectToken(This,token) (This)->lpVtbl->GetOutputObjectToken(This,token)
#define ISpVoice_GetOutputStream(This,stream) (This)->lpVtbl->GetOutputStream(This,stream)
#define ISpVoice_Pause(This) (This)->lpVtbl->Pause(This)
#define ISpVoice_Resume(This) (This)->lpVtbl->Resume(This)
#define ISpVoice_SetVoice(This,token) (This)->lpVtbl->SetVoice(This,token)
#define ISpVoice_GetVoice(This,token) (This)->lpVtbl->GetVoice(This,token)
#define ISpVoice_Speak(This,pwcs,flags,number) (This)->lpVtbl->Speak(This,pwcs,flags,number)
#define ISpVoice_SpeakStream(This,stream,flags,number) (This)->lpVtbl->SpeakStream(This,stream,flags,number)
#define ISpVoice_GetStatus(This,status,bookmark) (This)->lpVtbl->GetStatus(This,status,bookmark)
#define ISpVoice_Skip(This,type,items,skipped) (This)->lpVtbl->Skip(This,type,items,skipped)
#define ISpVoice_SetPriority(This,priority) (This)->lpVtbl->SetPriority(This,priority)
#define ISpVoice_GetPriority(This,priority) (This)->lpVtbl->GetPriority(This,priority)
#define ISpVoice_SetAlertBoundary(This,boundary) (This)->lpVtbl->SetAlertBoundary(This,boundary)
#define ISpVoice_GetAlertBoundary(This,boundary) (This)->lpVtbl->GetAlertBoundary(This,boundary)
#define ISpVoice_SetRate(This,adjust) (This)->lpVtbl->SetRate(This,adjust)
#define ISpVoice_GetRate(This,adjust) (This)->lpVtbl->GetRate(This,adjust)
#define ISpVoice_SetVolume(This,volume) (This)->lpVtbl->SetVolume(This,volume)
#define ISpVoice_GetVolume(This,volume) (This)->lpVtbl->GetVolume(This,volume)
#define ISpVoice_WaitUntilDone(This,timeout) (This)->lpVtbl->WaitUntilDone(This,timeout)
#define ISpVoice_SetSyncSpeakTimeout(This,timeout) (This)->lpVtbl->SetSyncSpeakTimeout(This,timeout)
#define ISpVoice_GetSyncSpeakTimeout(This,timeout) (This)->lpVtbl->GetSyncSpeakTimeout(This,timeout)
#define ISpVoice_SpeakCompleteEvent(This) (This)->lpVtbl->SpeakCompleteEvent(This)
#define ISpVoice_IsUISupported(This,type,extra,count,supported) (This)->lpVtbl->IsUISupported(This,type,extra,count,supported)
#define ISpVoice_DisplayUI(This,parent,title,type,extra,count) (This)->lpVtbl->DisplayUI(This,parent,title,type,extra,count)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpVoice_QueryInterface(ISpVoice* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpVoice_AddRef(ISpVoice* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpVoice_Release(ISpVoice* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpNotifySource methods ***/
static FORCEINLINE HRESULT ISpVoice_SetNotifySink(ISpVoice* This,ISpNotifySink *sink) {
    return This->lpVtbl->SetNotifySink(This,sink);
}
static FORCEINLINE HRESULT ISpVoice_SetNotifyWindowMessage(ISpVoice* This,HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam) {
    return This->lpVtbl->SetNotifyWindowMessage(This,hwnd,msg,wparam,lparam);
}
static FORCEINLINE HRESULT ISpVoice_SetNotifyCallbackFunction(ISpVoice* This,SPNOTIFYCALLBACK *callback,WPARAM wparam,LPARAM lparam) {
    return This->lpVtbl->SetNotifyCallbackFunction(This,callback,wparam,lparam);
}
static FORCEINLINE HRESULT ISpVoice_SetNotifyCallbackInterface(ISpVoice* This,ISpNotifyCallback *callback,WPARAM wparam,LPARAM lparam) {
    return This->lpVtbl->SetNotifyCallbackInterface(This,callback,wparam,lparam);
}
static FORCEINLINE HRESULT ISpVoice_SetNotifyWin32Event(ISpVoice* This) {
    return This->lpVtbl->SetNotifyWin32Event(This);
}
static FORCEINLINE HRESULT ISpVoice_WaitForNotifyEvent(ISpVoice* This,DWORD milliseconds) {
    return This->lpVtbl->WaitForNotifyEvent(This,milliseconds);
}
static FORCEINLINE HANDLE ISpVoice_GetNotifyEventHandle(ISpVoice* This) {
    return This->lpVtbl->GetNotifyEventHandle(This);
}
/*** ISpEventSource methods ***/
static FORCEINLINE HRESULT ISpVoice_SetInterest(ISpVoice* This,ULONGLONG event,ULONGLONG queued) {
    return This->lpVtbl->SetInterest(This,event,queued);
}
static FORCEINLINE HRESULT ISpVoice_GetEvents(ISpVoice* This,ULONG count,SPEVENT *array,ULONG *fetched) {
    return This->lpVtbl->GetEvents(This,count,array,fetched);
}
static FORCEINLINE HRESULT ISpVoice_GetInfo(ISpVoice* This,SPEVENTSOURCEINFO *info) {
    return This->lpVtbl->GetInfo(This,info);
}
/*** ISpVoice methods ***/
static FORCEINLINE HRESULT ISpVoice_SetOutput(ISpVoice* This,IUnknown *unk,BOOL changes) {
    return This->lpVtbl->SetOutput(This,unk,changes);
}
static FORCEINLINE HRESULT ISpVoice_GetOutputObjectToken(ISpVoice* This,ISpObjectToken **token) {
    return This->lpVtbl->GetOutputObjectToken(This,token);
}
static FORCEINLINE HRESULT ISpVoice_GetOutputStream(ISpVoice* This,ISpStreamFormat **stream) {
    return This->lpVtbl->GetOutputStream(This,stream);
}
static FORCEINLINE HRESULT ISpVoice_Pause(ISpVoice* This) {
    return This->lpVtbl->Pause(This);
}
static FORCEINLINE HRESULT ISpVoice_Resume(ISpVoice* This) {
    return This->lpVtbl->Resume(This);
}
static FORCEINLINE HRESULT ISpVoice_SetVoice(ISpVoice* This,ISpObjectToken *token) {
    return This->lpVtbl->SetVoice(This,token);
}
static FORCEINLINE HRESULT ISpVoice_GetVoice(ISpVoice* This,ISpObjectToken **token) {
    return This->lpVtbl->GetVoice(This,token);
}
static FORCEINLINE HRESULT ISpVoice_Speak(ISpVoice* This,const WCHAR *pwcs,DWORD flags,ULONG *number) {
    return This->lpVtbl->Speak(This,pwcs,flags,number);
}
static FORCEINLINE HRESULT ISpVoice_SpeakStream(ISpVoice* This,IStream *stream,DWORD flags,ULONG *number) {
    return This->lpVtbl->SpeakStream(This,stream,flags,number);
}
static FORCEINLINE HRESULT ISpVoice_GetStatus(ISpVoice* This,SPVOICESTATUS *status,WCHAR **bookmark) {
    return This->lpVtbl->GetStatus(This,status,bookmark);
}
static FORCEINLINE HRESULT ISpVoice_Skip(ISpVoice* This,const WCHAR *type,LONG items,ULONG *skipped) {
    return This->lpVtbl->Skip(This,type,items,skipped);
}
static FORCEINLINE HRESULT ISpVoice_SetPriority(ISpVoice* This,SPVPRIORITY priority) {
    return This->lpVtbl->SetPriority(This,priority);
}
static FORCEINLINE HRESULT ISpVoice_GetPriority(ISpVoice* This,SPVPRIORITY *priority) {
    return This->lpVtbl->GetPriority(This,priority);
}
static FORCEINLINE HRESULT ISpVoice_SetAlertBoundary(ISpVoice* This,SPEVENTENUM boundary) {
    return This->lpVtbl->SetAlertBoundary(This,boundary);
}
static FORCEINLINE HRESULT ISpVoice_GetAlertBoundary(ISpVoice* This,SPEVENTENUM *boundary) {
    return This->lpVtbl->GetAlertBoundary(This,boundary);
}
static FORCEINLINE HRESULT ISpVoice_SetRate(ISpVoice* This,LONG adjust) {
    return This->lpVtbl->SetRate(This,adjust);
}
static FORCEINLINE HRESULT ISpVoice_GetRate(ISpVoice* This,LONG *adjust) {
    return This->lpVtbl->GetRate(This,adjust);
}
static FORCEINLINE HRESULT ISpVoice_SetVolume(ISpVoice* This,USHORT volume) {
    return This->lpVtbl->SetVolume(This,volume);
}
static FORCEINLINE HRESULT ISpVoice_GetVolume(ISpVoice* This,USHORT *volume) {
    return This->lpVtbl->GetVolume(This,volume);
}
static FORCEINLINE HRESULT ISpVoice_WaitUntilDone(ISpVoice* This,ULONG timeout) {
    return This->lpVtbl->WaitUntilDone(This,timeout);
}
static FORCEINLINE HRESULT ISpVoice_SetSyncSpeakTimeout(ISpVoice* This,ULONG timeout) {
    return This->lpVtbl->SetSyncSpeakTimeout(This,timeout);
}
static FORCEINLINE HRESULT ISpVoice_GetSyncSpeakTimeout(ISpVoice* This,ULONG *timeout) {
    return This->lpVtbl->GetSyncSpeakTimeout(This,timeout);
}
static FORCEINLINE HANDLE ISpVoice_SpeakCompleteEvent(ISpVoice* This) {
    return This->lpVtbl->SpeakCompleteEvent(This);
}
static FORCEINLINE HRESULT ISpVoice_IsUISupported(ISpVoice* This,const WCHAR *type,void *extra,ULONG count,BOOL *supported) {
    return This->lpVtbl->IsUISupported(This,type,extra,count,supported);
}
static FORCEINLINE HRESULT ISpVoice_DisplayUI(ISpVoice* This,HWND parent,const WCHAR *title,const WCHAR *type,void *extra,ULONG count) {
    return This->lpVtbl->DisplayUI(This,parent,title,type,extra,count);
}
#endif
#endif

#endif


#endif  /* __ISpVoice_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpNotifySource interface
 */
#ifndef __ISpNotifySource_INTERFACE_DEFINED__
#define __ISpNotifySource_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpNotifySource, 0x5eff4aef, 0x8487, 0x11d2, 0x96,0x1c, 0x00,0xc0,0x4f,0x8e,0xe6,0x28);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5eff4aef-8487-11d2-961c-00c04f8ee628")
ISpNotifySource : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetNotifySink(
        ISpNotifySink *sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetNotifyWindowMessage(
        HWND hwnd,
        UINT msg,
        WPARAM wparam,
        LPARAM lparam) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetNotifyCallbackFunction(
        SPNOTIFYCALLBACK *callback,
        WPARAM wparam,
        LPARAM lparam) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetNotifyCallbackInterface(
        ISpNotifyCallback *callback,
        WPARAM wparam,
        LPARAM lparam) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetNotifyWin32Event(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE WaitForNotifyEvent(
        DWORD milliseconds) = 0;

    virtual HANDLE STDMETHODCALLTYPE GetNotifyEventHandle(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpNotifySource, 0x5eff4aef, 0x8487, 0x11d2, 0x96,0x1c, 0x00,0xc0,0x4f,0x8e,0xe6,0x28)
#endif
#else
typedef struct ISpNotifySourceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpNotifySource methods ***/
    HRESULT (STDMETHODCALLTYPE *SetNotifySink)(
        ISpNotifySource *This,
        ISpNotifySink *sink);

    HRESULT (STDMETHODCALLTYPE *SetNotifyWindowMessage)(
        ISpNotifySource *This,
        HWND hwnd,
        UINT msg,
        WPARAM wparam,
        LPARAM lparam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackFunction)(
        ISpNotifySource *This,
        SPNOTIFYCALLBACK *callback,
        WPARAM wparam,
        LPARAM lparam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackInterface)(
        ISpNotifySource *This,
        ISpNotifyCallback *callback,
        WPARAM wparam,
        LPARAM lparam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyWin32Event)(
        ISpNotifySource *This);

    HRESULT (STDMETHODCALLTYPE *WaitForNotifyEvent)(
        ISpNotifySource *This,
        DWORD milliseconds);

    HANDLE (STDMETHODCALLTYPE *GetNotifyEventHandle)(
        ISpNotifySource *This);

    END_INTERFACE
} ISpNotifySourceVtbl;

interface ISpNotifySource {
    CONST_VTBL ISpNotifySourceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpNotifySource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpNotifySource_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpNotifySource_Release(This) (This)->lpVtbl->Release(This)
/*** ISpNotifySource methods ***/
#define ISpNotifySource_SetNotifySink(This,sink) (This)->lpVtbl->SetNotifySink(This,sink)
#define ISpNotifySource_SetNotifyWindowMessage(This,hwnd,msg,wparam,lparam) (This)->lpVtbl->SetNotifyWindowMessage(This,hwnd,msg,wparam,lparam)
#define ISpNotifySource_SetNotifyCallbackFunction(This,callback,wparam,lparam) (This)->lpVtbl->SetNotifyCallbackFunction(This,callback,wparam,lparam)
#define ISpNotifySource_SetNotifyCallbackInterface(This,callback,wparam,lparam) (This)->lpVtbl->SetNotifyCallbackInterface(This,callback,wparam,lparam)
#define ISpNotifySource_SetNotifyWin32Event(This) (This)->lpVtbl->SetNotifyWin32Event(This)
#define ISpNotifySource_WaitForNotifyEvent(This,milliseconds) (This)->lpVtbl->WaitForNotifyEvent(This,milliseconds)
#define ISpNotifySource_GetNotifyEventHandle(This) (This)->lpVtbl->GetNotifyEventHandle(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpNotifySource_QueryInterface(ISpNotifySource* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpNotifySource_AddRef(ISpNotifySource* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpNotifySource_Release(ISpNotifySource* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpNotifySource methods ***/
static FORCEINLINE HRESULT ISpNotifySource_SetNotifySink(ISpNotifySource* This,ISpNotifySink *sink) {
    return This->lpVtbl->SetNotifySink(This,sink);
}
static FORCEINLINE HRESULT ISpNotifySource_SetNotifyWindowMessage(ISpNotifySource* This,HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam) {
    return This->lpVtbl->SetNotifyWindowMessage(This,hwnd,msg,wparam,lparam);
}
static FORCEINLINE HRESULT ISpNotifySource_SetNotifyCallbackFunction(ISpNotifySource* This,SPNOTIFYCALLBACK *callback,WPARAM wparam,LPARAM lparam) {
    return This->lpVtbl->SetNotifyCallbackFunction(This,callback,wparam,lparam);
}
static FORCEINLINE HRESULT ISpNotifySource_SetNotifyCallbackInterface(ISpNotifySource* This,ISpNotifyCallback *callback,WPARAM wparam,LPARAM lparam) {
    return This->lpVtbl->SetNotifyCallbackInterface(This,callback,wparam,lparam);
}
static FORCEINLINE HRESULT ISpNotifySource_SetNotifyWin32Event(ISpNotifySource* This) {
    return This->lpVtbl->SetNotifyWin32Event(This);
}
static FORCEINLINE HRESULT ISpNotifySource_WaitForNotifyEvent(ISpNotifySource* This,DWORD milliseconds) {
    return This->lpVtbl->WaitForNotifyEvent(This,milliseconds);
}
static FORCEINLINE HANDLE ISpNotifySource_GetNotifyEventHandle(ISpNotifySource* This) {
    return This->lpVtbl->GetNotifyEventHandle(This);
}
#endif
#endif

#endif


#endif  /* __ISpNotifySource_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpEventSource interface
 */
#ifndef __ISpEventSource_INTERFACE_DEFINED__
#define __ISpEventSource_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpEventSource, 0xbe7a9cce, 0x5f9e, 0x11d2, 0x96,0x0f, 0x00,0xc0,0x4f,0x8e,0xe6,0x28);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("be7a9cce-5f9e-11d2-960f-00c04f8ee628")
ISpEventSource : public ISpNotifySource
{
    virtual HRESULT STDMETHODCALLTYPE SetInterest(
        ULONGLONG event,
        ULONGLONG queued) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEvents(
        ULONG count,
        SPEVENT *array,
        ULONG *fetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInfo(
        SPEVENTSOURCEINFO *info) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpEventSource, 0xbe7a9cce, 0x5f9e, 0x11d2, 0x96,0x0f, 0x00,0xc0,0x4f,0x8e,0xe6,0x28)
#endif
#else
typedef struct ISpEventSourceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpNotifySource methods ***/
    HRESULT (STDMETHODCALLTYPE *SetNotifySink)(
        ISpEventSource *This,
        ISpNotifySink *sink);

    HRESULT (STDMETHODCALLTYPE *SetNotifyWindowMessage)(
        ISpEventSource *This,
        HWND hwnd,
        UINT msg,
        WPARAM wparam,
        LPARAM lparam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackFunction)(
        ISpEventSource *This,
        SPNOTIFYCALLBACK *callback,
        WPARAM wparam,
        LPARAM lparam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackInterface)(
        ISpEventSource *This,
        ISpNotifyCallback *callback,
        WPARAM wparam,
        LPARAM lparam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyWin32Event)(
        ISpEventSource *This);

    HRESULT (STDMETHODCALLTYPE *WaitForNotifyEvent)(
        ISpEventSource *This,
        DWORD milliseconds);

    HANDLE (STDMETHODCALLTYPE *GetNotifyEventHandle)(
        ISpEventSource *This);

    /*** ISpEventSource methods ***/
    HRESULT (STDMETHODCALLTYPE *SetInterest)(
        ISpEventSource *This,
        ULONGLONG event,
        ULONGLONG queued);

    HRESULT (STDMETHODCALLTYPE *GetEvents)(
        ISpEventSource *This,
        ULONG count,
        SPEVENT *array,
        ULONG *fetched);

    HRESULT (STDMETHODCALLTYPE *GetInfo)(
        ISpEventSource *This,
        SPEVENTSOURCEINFO *info);

    END_INTERFACE
} ISpEventSourceVtbl;

interface ISpEventSource {
    CONST_VTBL ISpEventSourceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpEventSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpEventSource_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpEventSource_Release(This) (This)->lpVtbl->Release(This)
/*** ISpNotifySource methods ***/
#define ISpEventSource_SetNotifySink(This,sink) (This)->lpVtbl->SetNotifySink(This,sink)
#define ISpEventSource_SetNotifyWindowMessage(This,hwnd,msg,wparam,lparam) (This)->lpVtbl->SetNotifyWindowMessage(This,hwnd,msg,wparam,lparam)
#define ISpEventSource_SetNotifyCallbackFunction(This,callback,wparam,lparam) (This)->lpVtbl->SetNotifyCallbackFunction(This,callback,wparam,lparam)
#define ISpEventSource_SetNotifyCallbackInterface(This,callback,wparam,lparam) (This)->lpVtbl->SetNotifyCallbackInterface(This,callback,wparam,lparam)
#define ISpEventSource_SetNotifyWin32Event(This) (This)->lpVtbl->SetNotifyWin32Event(This)
#define ISpEventSource_WaitForNotifyEvent(This,milliseconds) (This)->lpVtbl->WaitForNotifyEvent(This,milliseconds)
#define ISpEventSource_GetNotifyEventHandle(This) (This)->lpVtbl->GetNotifyEventHandle(This)
/*** ISpEventSource methods ***/
#define ISpEventSource_SetInterest(This,event,queued) (This)->lpVtbl->SetInterest(This,event,queued)
#define ISpEventSource_GetEvents(This,count,array,fetched) (This)->lpVtbl->GetEvents(This,count,array,fetched)
#define ISpEventSource_GetInfo(This,info) (This)->lpVtbl->GetInfo(This,info)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpEventSource_QueryInterface(ISpEventSource* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpEventSource_AddRef(ISpEventSource* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpEventSource_Release(ISpEventSource* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpNotifySource methods ***/
static FORCEINLINE HRESULT ISpEventSource_SetNotifySink(ISpEventSource* This,ISpNotifySink *sink) {
    return This->lpVtbl->SetNotifySink(This,sink);
}
static FORCEINLINE HRESULT ISpEventSource_SetNotifyWindowMessage(ISpEventSource* This,HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam) {
    return This->lpVtbl->SetNotifyWindowMessage(This,hwnd,msg,wparam,lparam);
}
static FORCEINLINE HRESULT ISpEventSource_SetNotifyCallbackFunction(ISpEventSource* This,SPNOTIFYCALLBACK *callback,WPARAM wparam,LPARAM lparam) {
    return This->lpVtbl->SetNotifyCallbackFunction(This,callback,wparam,lparam);
}
static FORCEINLINE HRESULT ISpEventSource_SetNotifyCallbackInterface(ISpEventSource* This,ISpNotifyCallback *callback,WPARAM wparam,LPARAM lparam) {
    return This->lpVtbl->SetNotifyCallbackInterface(This,callback,wparam,lparam);
}
static FORCEINLINE HRESULT ISpEventSource_SetNotifyWin32Event(ISpEventSource* This) {
    return This->lpVtbl->SetNotifyWin32Event(This);
}
static FORCEINLINE HRESULT ISpEventSource_WaitForNotifyEvent(ISpEventSource* This,DWORD milliseconds) {
    return This->lpVtbl->WaitForNotifyEvent(This,milliseconds);
}
static FORCEINLINE HANDLE ISpEventSource_GetNotifyEventHandle(ISpEventSource* This) {
    return This->lpVtbl->GetNotifyEventHandle(This);
}
/*** ISpEventSource methods ***/
static FORCEINLINE HRESULT ISpEventSource_SetInterest(ISpEventSource* This,ULONGLONG event,ULONGLONG queued) {
    return This->lpVtbl->SetInterest(This,event,queued);
}
static FORCEINLINE HRESULT ISpEventSource_GetEvents(ISpEventSource* This,ULONG count,SPEVENT *array,ULONG *fetched) {
    return This->lpVtbl->GetEvents(This,count,array,fetched);
}
static FORCEINLINE HRESULT ISpEventSource_GetInfo(ISpEventSource* This,SPEVENTSOURCEINFO *info) {
    return This->lpVtbl->GetInfo(This,info);
}
#endif
#endif

#endif


#endif  /* __ISpEventSource_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpRecoContext interface
 */
#ifndef __ISpRecoContext_INTERFACE_DEFINED__
#define __ISpRecoContext_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpRecoContext, 0xf740a62f, 0x7c15, 0x489e, 0x82,0x34, 0x94,0x0a,0x33,0xd9,0x27,0x2d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f740a62f-7c15-489e-8234-940a33d9272d")
ISpRecoContext : public ISpEventSource
{
    virtual HRESULT STDMETHODCALLTYPE GetRecognizer(
        ISpRecognizer **recognizer) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateGrammar(
        ULONGLONG grammar,
        ISpRecoGrammar **spgrammar) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStatus(
        SPRECOCONTEXTSTATUS *status) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMaxAlternates(
        ULONG *alternates) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetMaxAlternates(
        ULONG alternates) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAudioOptions(
        SPAUDIOOPTIONS options,
        const GUID *format,
        const WAVEFORMATEX *wave) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAudioOptions(
        SPAUDIOOPTIONS *options,
        GUID *format,
        WAVEFORMATEX **wave) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeserializeResult(
        const SPSERIALIZEDRESULT *serialized,
        ISpRecoResult **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE Bookmark(
        SPBOOKMARKOPTIONS options,
        ULONGLONG position,
        LPARAM event) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAdaptationData(
        const WCHAR *data,
        const ULONG count) = 0;

    virtual HRESULT STDMETHODCALLTYPE Pause(
        DWORD reserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        DWORD reserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetVoice(
        ISpVoice *voice,
        BOOL changes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVoice(
        ISpVoice **voice) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetVoicePurgeEvent(
        ULONGLONG interest) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVoicePurgeEvent(
        ULONGLONG *interest) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetContextState(
        SPCONTEXTSTATE state) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetContextState(
        SPCONTEXTSTATE *state) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpRecoContext, 0xf740a62f, 0x7c15, 0x489e, 0x82,0x34, 0x94,0x0a,0x33,0xd9,0x27,0x2d)
#endif
#else
typedef struct ISpRecoContextVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpNotifySource methods ***/
    HRESULT (STDMETHODCALLTYPE *SetNotifySink)(
        ISpRecoContext *This,
        ISpNotifySink *sink);

    HRESULT (STDMETHODCALLTYPE *SetNotifyWindowMessage)(
        ISpRecoContext *This,
        HWND hwnd,
        UINT msg,
        WPARAM wparam,
        LPARAM lparam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackFunction)(
        ISpRecoContext *This,
        SPNOTIFYCALLBACK *callback,
        WPARAM wparam,
        LPARAM lparam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackInterface)(
        ISpRecoContext *This,
        ISpNotifyCallback *callback,
        WPARAM wparam,
        LPARAM lparam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyWin32Event)(
        ISpRecoContext *This);

    HRESULT (STDMETHODCALLTYPE *WaitForNotifyEvent)(
        ISpRecoContext *This,
        DWORD milliseconds);

    HANDLE (STDMETHODCALLTYPE *GetNotifyEventHandle)(
        ISpRecoContext *This);

    /*** ISpEventSource methods ***/
    HRESULT (STDMETHODCALLTYPE *SetInterest)(
        ISpRecoContext *This,
        ULONGLONG event,
        ULONGLONG queued);

    HRESULT (STDMETHODCALLTYPE *GetEvents)(
        ISpRecoContext *This,
        ULONG count,
        SPEVENT *array,
        ULONG *fetched);

    HRESULT (STDMETHODCALLTYPE *GetInfo)(
        ISpRecoContext *This,
        SPEVENTSOURCEINFO *info);

    /*** ISpRecoContext methods ***/
    HRESULT (STDMETHODCALLTYPE *GetRecognizer)(
        ISpRecoContext *This,
        ISpRecognizer **recognizer);

    HRESULT (STDMETHODCALLTYPE *CreateGrammar)(
        ISpRecoContext *This,
        ULONGLONG grammar,
        ISpRecoGrammar **spgrammar);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        ISpRecoContext *This,
        SPRECOCONTEXTSTATUS *status);

    HRESULT (STDMETHODCALLTYPE *GetMaxAlternates)(
        ISpRecoContext *This,
        ULONG *alternates);

    HRESULT (STDMETHODCALLTYPE *SetMaxAlternates)(
        ISpRecoContext *This,
        ULONG alternates);

    HRESULT (STDMETHODCALLTYPE *SetAudioOptions)(
        ISpRecoContext *This,
        SPAUDIOOPTIONS options,
        const GUID *format,
        const WAVEFORMATEX *wave);

    HRESULT (STDMETHODCALLTYPE *GetAudioOptions)(
        ISpRecoContext *This,
        SPAUDIOOPTIONS *options,
        GUID *format,
        WAVEFORMATEX **wave);

    HRESULT (STDMETHODCALLTYPE *DeserializeResult)(
        ISpRecoContext *This,
        const SPSERIALIZEDRESULT *serialized,
        ISpRecoResult **result);

    HRESULT (STDMETHODCALLTYPE *Bookmark)(
        ISpRecoContext *This,
        SPBOOKMARKOPTIONS options,
        ULONGLONG position,
        LPARAM event);

    HRESULT (STDMETHODCALLTYPE *SetAdaptationData)(
        ISpRecoContext *This,
        const WCHAR *data,
        const ULONG count);

    HRESULT (STDMETHODCALLTYPE *Pause)(
        ISpRecoContext *This,
        DWORD reserved);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        ISpRecoContext *This,
        DWORD reserved);

    HRESULT (STDMETHODCALLTYPE *SetVoice)(
        ISpRecoContext *This,
        ISpVoice *voice,
        BOOL changes);

    HRESULT (STDMETHODCALLTYPE *GetVoice)(
        ISpRecoContext *This,
        ISpVoice **voice);

    HRESULT (STDMETHODCALLTYPE *SetVoicePurgeEvent)(
        ISpRecoContext *This,
        ULONGLONG interest);

    HRESULT (STDMETHODCALLTYPE *GetVoicePurgeEvent)(
        ISpRecoContext *This,
        ULONGLONG *interest);

    HRESULT (STDMETHODCALLTYPE *SetContextState)(
        ISpRecoContext *This,
        SPCONTEXTSTATE state);

    HRESULT (STDMETHODCALLTYPE *GetContextState)(
        ISpRecoContext *This,
        SPCONTEXTSTATE *state);

    END_INTERFACE
} ISpRecoContextVtbl;

interface ISpRecoContext {
    CONST_VTBL ISpRecoContextVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpRecoContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpRecoContext_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpRecoContext_Release(This) (This)->lpVtbl->Release(This)
/*** ISpNotifySource methods ***/
#define ISpRecoContext_SetNotifySink(This,sink) (This)->lpVtbl->SetNotifySink(This,sink)
#define ISpRecoContext_SetNotifyWindowMessage(This,hwnd,msg,wparam,lparam) (This)->lpVtbl->SetNotifyWindowMessage(This,hwnd,msg,wparam,lparam)
#define ISpRecoContext_SetNotifyCallbackFunction(This,callback,wparam,lparam) (This)->lpVtbl->SetNotifyCallbackFunction(This,callback,wparam,lparam)
#define ISpRecoContext_SetNotifyCallbackInterface(This,callback,wparam,lparam) (This)->lpVtbl->SetNotifyCallbackInterface(This,callback,wparam,lparam)
#define ISpRecoContext_SetNotifyWin32Event(This) (This)->lpVtbl->SetNotifyWin32Event(This)
#define ISpRecoContext_WaitForNotifyEvent(This,milliseconds) (This)->lpVtbl->WaitForNotifyEvent(This,milliseconds)
#define ISpRecoContext_GetNotifyEventHandle(This) (This)->lpVtbl->GetNotifyEventHandle(This)
/*** ISpEventSource methods ***/
#define ISpRecoContext_SetInterest(This,event,queued) (This)->lpVtbl->SetInterest(This,event,queued)
#define ISpRecoContext_GetEvents(This,count,array,fetched) (This)->lpVtbl->GetEvents(This,count,array,fetched)
#define ISpRecoContext_GetInfo(This,info) (This)->lpVtbl->GetInfo(This,info)
/*** ISpRecoContext methods ***/
#define ISpRecoContext_GetRecognizer(This,recognizer) (This)->lpVtbl->GetRecognizer(This,recognizer)
#define ISpRecoContext_CreateGrammar(This,grammar,spgrammar) (This)->lpVtbl->CreateGrammar(This,grammar,spgrammar)
#define ISpRecoContext_GetStatus(This,status) (This)->lpVtbl->GetStatus(This,status)
#define ISpRecoContext_GetMaxAlternates(This,alternates) (This)->lpVtbl->GetMaxAlternates(This,alternates)
#define ISpRecoContext_SetMaxAlternates(This,alternates) (This)->lpVtbl->SetMaxAlternates(This,alternates)
#define ISpRecoContext_SetAudioOptions(This,options,format,wave) (This)->lpVtbl->SetAudioOptions(This,options,format,wave)
#define ISpRecoContext_GetAudioOptions(This,options,format,wave) (This)->lpVtbl->GetAudioOptions(This,options,format,wave)
#define ISpRecoContext_DeserializeResult(This,serialized,result) (This)->lpVtbl->DeserializeResult(This,serialized,result)
#define ISpRecoContext_Bookmark(This,options,position,event) (This)->lpVtbl->Bookmark(This,options,position,event)
#define ISpRecoContext_SetAdaptationData(This,data,count) (This)->lpVtbl->SetAdaptationData(This,data,count)
#define ISpRecoContext_Pause(This,reserved) (This)->lpVtbl->Pause(This,reserved)
#define ISpRecoContext_Resume(This,reserved) (This)->lpVtbl->Resume(This,reserved)
#define ISpRecoContext_SetVoice(This,voice,changes) (This)->lpVtbl->SetVoice(This,voice,changes)
#define ISpRecoContext_GetVoice(This,voice) (This)->lpVtbl->GetVoice(This,voice)
#define ISpRecoContext_SetVoicePurgeEvent(This,interest) (This)->lpVtbl->SetVoicePurgeEvent(This,interest)
#define ISpRecoContext_GetVoicePurgeEvent(This,interest) (This)->lpVtbl->GetVoicePurgeEvent(This,interest)
#define ISpRecoContext_SetContextState(This,state) (This)->lpVtbl->SetContextState(This,state)
#define ISpRecoContext_GetContextState(This,state) (This)->lpVtbl->GetContextState(This,state)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpRecoContext_QueryInterface(ISpRecoContext* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpRecoContext_AddRef(ISpRecoContext* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpRecoContext_Release(ISpRecoContext* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpNotifySource methods ***/
static FORCEINLINE HRESULT ISpRecoContext_SetNotifySink(ISpRecoContext* This,ISpNotifySink *sink) {
    return This->lpVtbl->SetNotifySink(This,sink);
}
static FORCEINLINE HRESULT ISpRecoContext_SetNotifyWindowMessage(ISpRecoContext* This,HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam) {
    return This->lpVtbl->SetNotifyWindowMessage(This,hwnd,msg,wparam,lparam);
}
static FORCEINLINE HRESULT ISpRecoContext_SetNotifyCallbackFunction(ISpRecoContext* This,SPNOTIFYCALLBACK *callback,WPARAM wparam,LPARAM lparam) {
    return This->lpVtbl->SetNotifyCallbackFunction(This,callback,wparam,lparam);
}
static FORCEINLINE HRESULT ISpRecoContext_SetNotifyCallbackInterface(ISpRecoContext* This,ISpNotifyCallback *callback,WPARAM wparam,LPARAM lparam) {
    return This->lpVtbl->SetNotifyCallbackInterface(This,callback,wparam,lparam);
}
static FORCEINLINE HRESULT ISpRecoContext_SetNotifyWin32Event(ISpRecoContext* This) {
    return This->lpVtbl->SetNotifyWin32Event(This);
}
static FORCEINLINE HRESULT ISpRecoContext_WaitForNotifyEvent(ISpRecoContext* This,DWORD milliseconds) {
    return This->lpVtbl->WaitForNotifyEvent(This,milliseconds);
}
static FORCEINLINE HANDLE ISpRecoContext_GetNotifyEventHandle(ISpRecoContext* This) {
    return This->lpVtbl->GetNotifyEventHandle(This);
}
/*** ISpEventSource methods ***/
static FORCEINLINE HRESULT ISpRecoContext_SetInterest(ISpRecoContext* This,ULONGLONG event,ULONGLONG queued) {
    return This->lpVtbl->SetInterest(This,event,queued);
}
static FORCEINLINE HRESULT ISpRecoContext_GetEvents(ISpRecoContext* This,ULONG count,SPEVENT *array,ULONG *fetched) {
    return This->lpVtbl->GetEvents(This,count,array,fetched);
}
static FORCEINLINE HRESULT ISpRecoContext_GetInfo(ISpRecoContext* This,SPEVENTSOURCEINFO *info) {
    return This->lpVtbl->GetInfo(This,info);
}
/*** ISpRecoContext methods ***/
static FORCEINLINE HRESULT ISpRecoContext_GetRecognizer(ISpRecoContext* This,ISpRecognizer **recognizer) {
    return This->lpVtbl->GetRecognizer(This,recognizer);
}
static FORCEINLINE HRESULT ISpRecoContext_CreateGrammar(ISpRecoContext* This,ULONGLONG grammar,ISpRecoGrammar **spgrammar) {
    return This->lpVtbl->CreateGrammar(This,grammar,spgrammar);
}
static FORCEINLINE HRESULT ISpRecoContext_GetStatus(ISpRecoContext* This,SPRECOCONTEXTSTATUS *status) {
    return This->lpVtbl->GetStatus(This,status);
}
static FORCEINLINE HRESULT ISpRecoContext_GetMaxAlternates(ISpRecoContext* This,ULONG *alternates) {
    return This->lpVtbl->GetMaxAlternates(This,alternates);
}
static FORCEINLINE HRESULT ISpRecoContext_SetMaxAlternates(ISpRecoContext* This,ULONG alternates) {
    return This->lpVtbl->SetMaxAlternates(This,alternates);
}
static FORCEINLINE HRESULT ISpRecoContext_SetAudioOptions(ISpRecoContext* This,SPAUDIOOPTIONS options,const GUID *format,const WAVEFORMATEX *wave) {
    return This->lpVtbl->SetAudioOptions(This,options,format,wave);
}
static FORCEINLINE HRESULT ISpRecoContext_GetAudioOptions(ISpRecoContext* This,SPAUDIOOPTIONS *options,GUID *format,WAVEFORMATEX **wave) {
    return This->lpVtbl->GetAudioOptions(This,options,format,wave);
}
static FORCEINLINE HRESULT ISpRecoContext_DeserializeResult(ISpRecoContext* This,const SPSERIALIZEDRESULT *serialized,ISpRecoResult **result) {
    return This->lpVtbl->DeserializeResult(This,serialized,result);
}
static FORCEINLINE HRESULT ISpRecoContext_Bookmark(ISpRecoContext* This,SPBOOKMARKOPTIONS options,ULONGLONG position,LPARAM event) {
    return This->lpVtbl->Bookmark(This,options,position,event);
}
static FORCEINLINE HRESULT ISpRecoContext_SetAdaptationData(ISpRecoContext* This,const WCHAR *data,const ULONG count) {
    return This->lpVtbl->SetAdaptationData(This,data,count);
}
static FORCEINLINE HRESULT ISpRecoContext_Pause(ISpRecoContext* This,DWORD reserved) {
    return This->lpVtbl->Pause(This,reserved);
}
static FORCEINLINE HRESULT ISpRecoContext_Resume(ISpRecoContext* This,DWORD reserved) {
    return This->lpVtbl->Resume(This,reserved);
}
static FORCEINLINE HRESULT ISpRecoContext_SetVoice(ISpRecoContext* This,ISpVoice *voice,BOOL changes) {
    return This->lpVtbl->SetVoice(This,voice,changes);
}
static FORCEINLINE HRESULT ISpRecoContext_GetVoice(ISpRecoContext* This,ISpVoice **voice) {
    return This->lpVtbl->GetVoice(This,voice);
}
static FORCEINLINE HRESULT ISpRecoContext_SetVoicePurgeEvent(ISpRecoContext* This,ULONGLONG interest) {
    return This->lpVtbl->SetVoicePurgeEvent(This,interest);
}
static FORCEINLINE HRESULT ISpRecoContext_GetVoicePurgeEvent(ISpRecoContext* This,ULONGLONG *interest) {
    return This->lpVtbl->GetVoicePurgeEvent(This,interest);
}
static FORCEINLINE HRESULT ISpRecoContext_SetContextState(ISpRecoContext* This,SPCONTEXTSTATE state) {
    return This->lpVtbl->SetContextState(This,state);
}
static FORCEINLINE HRESULT ISpRecoContext_GetContextState(ISpRecoContext* This,SPCONTEXTSTATE *state) {
    return This->lpVtbl->GetContextState(This,state);
}
#endif
#endif

#endif


#endif  /* __ISpRecoContext_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpStreamFormat interface
 */
#ifndef __ISpStreamFormat_INTERFACE_DEFINED__
#define __ISpStreamFormat_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpStreamFormat, 0xbed530be, 0x2606, 0x4f4d, 0xa1,0xc0, 0x54,0xc5,0xcd,0xa5,0x56,0x6f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bed530be-2606-4f4d-a1c0-54c5cda5566f")
ISpStreamFormat : public IStream
{
    virtual HRESULT STDMETHODCALLTYPE GetFormat(
        GUID *format,
        WAVEFORMATEX **wave) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpStreamFormat, 0xbed530be, 0x2606, 0x4f4d, 0xa1,0xc0, 0x54,0xc5,0xcd,0xa5,0x56,0x6f)
#endif
#else
typedef struct ISpStreamFormatVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISequentialStream methods ***/
    HRESULT (STDMETHODCALLTYPE *Read)(
        ISpStreamFormat *This,
        void *pv,
        ULONG cb,
        ULONG *pcbRead);

    HRESULT (STDMETHODCALLTYPE *Write)(
        ISpStreamFormat *This,
        const void *pv,
        ULONG cb,
        ULONG *pcbWritten);

    /*** IStream methods ***/
    HRESULT (STDMETHODCALLTYPE *Seek)(
        ISpStreamFormat *This,
        LARGE_INTEGER dlibMove,
        DWORD dwOrigin,
        ULARGE_INTEGER *plibNewPosition);

    HRESULT (STDMETHODCALLTYPE *SetSize)(
        ISpStreamFormat *This,
        ULARGE_INTEGER libNewSize);

    HRESULT (STDMETHODCALLTYPE *CopyTo)(
        ISpStreamFormat *This,
        IStream *pstm,
        ULARGE_INTEGER cb,
        ULARGE_INTEGER *pcbRead,
        ULARGE_INTEGER *pcbWritten);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        ISpStreamFormat *This,
        DWORD grfCommitFlags);

    HRESULT (STDMETHODCALLTYPE *Revert)(
        ISpStreamFormat *This);

    HRESULT (STDMETHODCALLTYPE *LockRegion)(
        ISpStreamFormat *This,
        ULARGE_INTEGER libOffset,
        ULARGE_INTEGER cb,
        DWORD dwLockType);

    HRESULT (STDMETHODCALLTYPE *UnlockRegion)(
        ISpStreamFormat *This,
        ULARGE_INTEGER libOffset,
        ULARGE_INTEGER cb,
        DWORD dwLockType);

    HRESULT (STDMETHODCALLTYPE *Stat)(
        ISpStreamFormat *This,
        STATSTG *pstatstg,
        DWORD grfStatFlag);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        ISpStreamFormat *This,
        IStream **ppstm);

    /*** ISpStreamFormat methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFormat)(
        ISpStreamFormat *This,
        GUID *format,
        WAVEFORMATEX **wave);

    END_INTERFACE
} ISpStreamFormatVtbl;

interface ISpStreamFormat {
    CONST_VTBL ISpStreamFormatVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpStreamFormat_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpStreamFormat_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpStreamFormat_Release(This) (This)->lpVtbl->Release(This)
/*** ISequentialStream methods ***/
#define ISpStreamFormat_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
#define ISpStreamFormat_Write(This,pv,cb,pcbWritten) (This)->lpVtbl->Write(This,pv,cb,pcbWritten)
/*** IStream methods ***/
#define ISpStreamFormat_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
#define ISpStreamFormat_SetSize(This,libNewSize) (This)->lpVtbl->SetSize(This,libNewSize)
#define ISpStreamFormat_CopyTo(This,pstm,cb,pcbRead,pcbWritten) (This)->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten)
#define ISpStreamFormat_Commit(This,grfCommitFlags) (This)->lpVtbl->Commit(This,grfCommitFlags)
#define ISpStreamFormat_Revert(This) (This)->lpVtbl->Revert(This)
#define ISpStreamFormat_LockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->LockRegion(This,libOffset,cb,dwLockType)
#define ISpStreamFormat_UnlockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType)
#define ISpStreamFormat_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
#define ISpStreamFormat_Clone(This,ppstm) (This)->lpVtbl->Clone(This,ppstm)
/*** ISpStreamFormat methods ***/
#define ISpStreamFormat_GetFormat(This,format,wave) (This)->lpVtbl->GetFormat(This,format,wave)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpStreamFormat_QueryInterface(ISpStreamFormat* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpStreamFormat_AddRef(ISpStreamFormat* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpStreamFormat_Release(ISpStreamFormat* This) {
    return This->lpVtbl->Release(This);
}
/*** ISequentialStream methods ***/
static FORCEINLINE HRESULT ISpStreamFormat_Read(ISpStreamFormat* This,void *pv,ULONG cb,ULONG *pcbRead) {
    return This->lpVtbl->Read(This,pv,cb,pcbRead);
}
static FORCEINLINE HRESULT ISpStreamFormat_Write(ISpStreamFormat* This,const void *pv,ULONG cb,ULONG *pcbWritten) {
    return This->lpVtbl->Write(This,pv,cb,pcbWritten);
}
/*** IStream methods ***/
static FORCEINLINE HRESULT ISpStreamFormat_Seek(ISpStreamFormat* This,LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition) {
    return This->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition);
}
static FORCEINLINE HRESULT ISpStreamFormat_SetSize(ISpStreamFormat* This,ULARGE_INTEGER libNewSize) {
    return This->lpVtbl->SetSize(This,libNewSize);
}
static FORCEINLINE HRESULT ISpStreamFormat_CopyTo(ISpStreamFormat* This,IStream *pstm,ULARGE_INTEGER cb,ULARGE_INTEGER *pcbRead,ULARGE_INTEGER *pcbWritten) {
    return This->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten);
}
static FORCEINLINE HRESULT ISpStreamFormat_Commit(ISpStreamFormat* This,DWORD grfCommitFlags) {
    return This->lpVtbl->Commit(This,grfCommitFlags);
}
static FORCEINLINE HRESULT ISpStreamFormat_Revert(ISpStreamFormat* This) {
    return This->lpVtbl->Revert(This);
}
static FORCEINLINE HRESULT ISpStreamFormat_LockRegion(ISpStreamFormat* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->LockRegion(This,libOffset,cb,dwLockType);
}
static FORCEINLINE HRESULT ISpStreamFormat_UnlockRegion(ISpStreamFormat* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType);
}
static FORCEINLINE HRESULT ISpStreamFormat_Stat(ISpStreamFormat* This,STATSTG *pstatstg,DWORD grfStatFlag) {
    return This->lpVtbl->Stat(This,pstatstg,grfStatFlag);
}
static FORCEINLINE HRESULT ISpStreamFormat_Clone(ISpStreamFormat* This,IStream **ppstm) {
    return This->lpVtbl->Clone(This,ppstm);
}
/*** ISpStreamFormat methods ***/
static FORCEINLINE HRESULT ISpStreamFormat_GetFormat(ISpStreamFormat* This,GUID *format,WAVEFORMATEX **wave) {
    return This->lpVtbl->GetFormat(This,format,wave);
}
#endif
#endif

#endif


#endif  /* __ISpStreamFormat_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpProperties interface
 */
#ifndef __ISpProperties_INTERFACE_DEFINED__
#define __ISpProperties_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpProperties, 0x5b4fb971, 0xb115, 0x4de1, 0xad,0x97, 0xe4,0x82,0xe3,0xbf,0x6e,0xe4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5b4fb971-b115-4de1-ad97-e482e3bf6ee4")
ISpProperties : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetPropertyNum(
        const WCHAR *name,
        LONG value) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyNum(
        const WCHAR *name,
        LONG *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPropertyString(
        const WCHAR *name,
        const WCHAR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyString(
        const WCHAR *name,
        WCHAR **value) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpProperties, 0x5b4fb971, 0xb115, 0x4de1, 0xad,0x97, 0xe4,0x82,0xe3,0xbf,0x6e,0xe4)
#endif
#else
typedef struct ISpPropertiesVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpProperties methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPropertyNum)(
        ISpProperties *This,
        const WCHAR *name,
        LONG value);

    HRESULT (STDMETHODCALLTYPE *GetPropertyNum)(
        ISpProperties *This,
        const WCHAR *name,
        LONG *value);

    HRESULT (STDMETHODCALLTYPE *SetPropertyString)(
        ISpProperties *This,
        const WCHAR *name,
        const WCHAR *value);

    HRESULT (STDMETHODCALLTYPE *GetPropertyString)(
        ISpProperties *This,
        const WCHAR *name,
        WCHAR **value);

    END_INTERFACE
} ISpPropertiesVtbl;

interface ISpProperties {
    CONST_VTBL ISpPropertiesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpProperties_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpProperties_Release(This) (This)->lpVtbl->Release(This)
/*** ISpProperties methods ***/
#define ISpProperties_SetPropertyNum(This,name,value) (This)->lpVtbl->SetPropertyNum(This,name,value)
#define ISpProperties_GetPropertyNum(This,name,value) (This)->lpVtbl->GetPropertyNum(This,name,value)
#define ISpProperties_SetPropertyString(This,name,value) (This)->lpVtbl->SetPropertyString(This,name,value)
#define ISpProperties_GetPropertyString(This,name,value) (This)->lpVtbl->GetPropertyString(This,name,value)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpProperties_QueryInterface(ISpProperties* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpProperties_AddRef(ISpProperties* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpProperties_Release(ISpProperties* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpProperties methods ***/
static FORCEINLINE HRESULT ISpProperties_SetPropertyNum(ISpProperties* This,const WCHAR *name,LONG value) {
    return This->lpVtbl->SetPropertyNum(This,name,value);
}
static FORCEINLINE HRESULT ISpProperties_GetPropertyNum(ISpProperties* This,const WCHAR *name,LONG *value) {
    return This->lpVtbl->GetPropertyNum(This,name,value);
}
static FORCEINLINE HRESULT ISpProperties_SetPropertyString(ISpProperties* This,const WCHAR *name,const WCHAR *value) {
    return This->lpVtbl->SetPropertyString(This,name,value);
}
static FORCEINLINE HRESULT ISpProperties_GetPropertyString(ISpProperties* This,const WCHAR *name,WCHAR **value) {
    return This->lpVtbl->GetPropertyString(This,name,value);
}
#endif
#endif

#endif


#endif  /* __ISpProperties_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpRecognizer interface
 */
#ifndef __ISpRecognizer_INTERFACE_DEFINED__
#define __ISpRecognizer_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpRecognizer, 0xc2b5f241, 0xdaa0, 0x4507, 0x9e,0x16, 0x5a,0x1e,0xaa,0x2b,0x7a,0x5c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c2b5f241-daa0-4507-9e16-5a1eaa2b7a5c")
ISpRecognizer : public ISpProperties
{
    virtual HRESULT STDMETHODCALLTYPE SetRecognizer(
        ISpObjectToken *recognizer) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRecognizer(
        ISpObjectToken **recognizer) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetInput(
        IUnknown *input,
        BOOL changes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputObjectToken(
        ISpObjectToken **token) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInputStream(
        ISpStreamFormat **stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateRecoContext(
        ISpRecoContext **cxt) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRecoProfile(
        ISpObjectToken **token) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRecoProfile(
        ISpObjectToken *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsSharedInstance(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRecoState(
        SPRECOSTATE *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRecoState(
        SPRECOSTATE state) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStatus(
        SPRECOGNIZERSTATUS *status) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFormat(
        SPSTREAMFORMATTYPE type,
        GUID *format,
        WAVEFORMATEX **wave) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsUISupported(
        const WCHAR *type,
        void *extra,
        ULONG count,
        BOOL *supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisplayUI(
        HWND hwnd,
        const WCHAR *title,
        const WCHAR *type,
        void *extra,
        ULONG cnt) = 0;

    virtual HRESULT STDMETHODCALLTYPE EmulateRecognition(
        ISpPhrase *phrase) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpRecognizer, 0xc2b5f241, 0xdaa0, 0x4507, 0x9e,0x16, 0x5a,0x1e,0xaa,0x2b,0x7a,0x5c)
#endif
#else
typedef struct ISpRecognizerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpProperties methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPropertyNum)(
        ISpRecognizer *This,
        const WCHAR *name,
        LONG value);

    HRESULT (STDMETHODCALLTYPE *GetPropertyNum)(
        ISpRecognizer *This,
        const WCHAR *name,
        LONG *value);

    HRESULT (STDMETHODCALLTYPE *SetPropertyString)(
        ISpRecognizer *This,
        const WCHAR *name,
        const WCHAR *value);

    HRESULT (STDMETHODCALLTYPE *GetPropertyString)(
        ISpRecognizer *This,
        const WCHAR *name,
        WCHAR **value);

    /*** ISpRecognizer methods ***/
    HRESULT (STDMETHODCALLTYPE *SetRecognizer)(
        ISpRecognizer *This,
        ISpObjectToken *recognizer);

    HRESULT (STDMETHODCALLTYPE *GetRecognizer)(
        ISpRecognizer *This,
        ISpObjectToken **recognizer);

    HRESULT (STDMETHODCALLTYPE *SetInput)(
        ISpRecognizer *This,
        IUnknown *input,
        BOOL changes);

    HRESULT (STDMETHODCALLTYPE *GetInputObjectToken)(
        ISpRecognizer *This,
        ISpObjectToken **token);

    HRESULT (STDMETHODCALLTYPE *GetInputStream)(
        ISpRecognizer *This,
        ISpStreamFormat **stream);

    HRESULT (STDMETHODCALLTYPE *CreateRecoContext)(
        ISpRecognizer *This,
        ISpRecoContext **cxt);

    HRESULT (STDMETHODCALLTYPE *GetRecoProfile)(
        ISpRecognizer *This,
        ISpObjectToken **token);

    HRESULT (STDMETHODCALLTYPE *SetRecoProfile)(
        ISpRecognizer *This,
        ISpObjectToken *token);

    HRESULT (STDMETHODCALLTYPE *IsSharedInstance)(
        ISpRecognizer *This);

    HRESULT (STDMETHODCALLTYPE *GetRecoState)(
        ISpRecognizer *This,
        SPRECOSTATE *state);

    HRESULT (STDMETHODCALLTYPE *SetRecoState)(
        ISpRecognizer *This,
        SPRECOSTATE state);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        ISpRecognizer *This,
        SPRECOGNIZERSTATUS *status);

    HRESULT (STDMETHODCALLTYPE *GetFormat)(
        ISpRecognizer *This,
        SPSTREAMFORMATTYPE type,
        GUID *format,
        WAVEFORMATEX **wave);

    HRESULT (STDMETHODCALLTYPE *IsUISupported)(
        ISpRecognizer *This,
        const WCHAR *type,
        void *extra,
        ULONG count,
        BOOL *supported);

    HRESULT (STDMETHODCALLTYPE *DisplayUI)(
        ISpRecognizer *This,
        HWND hwnd,
        const WCHAR *title,
        const WCHAR *type,
        void *extra,
        ULONG cnt);

    HRESULT (STDMETHODCALLTYPE *EmulateRecognition)(
        ISpRecognizer *This,
        ISpPhrase *phrase);

    END_INTERFACE
} ISpRecognizerVtbl;

interface ISpRecognizer {
    CONST_VTBL ISpRecognizerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpRecognizer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpRecognizer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpRecognizer_Release(This) (This)->lpVtbl->Release(This)
/*** ISpProperties methods ***/
#define ISpRecognizer_SetPropertyNum(This,name,value) (This)->lpVtbl->SetPropertyNum(This,name,value)
#define ISpRecognizer_GetPropertyNum(This,name,value) (This)->lpVtbl->GetPropertyNum(This,name,value)
#define ISpRecognizer_SetPropertyString(This,name,value) (This)->lpVtbl->SetPropertyString(This,name,value)
#define ISpRecognizer_GetPropertyString(This,name,value) (This)->lpVtbl->GetPropertyString(This,name,value)
/*** ISpRecognizer methods ***/
#define ISpRecognizer_SetRecognizer(This,recognizer) (This)->lpVtbl->SetRecognizer(This,recognizer)
#define ISpRecognizer_GetRecognizer(This,recognizer) (This)->lpVtbl->GetRecognizer(This,recognizer)
#define ISpRecognizer_SetInput(This,input,changes) (This)->lpVtbl->SetInput(This,input,changes)
#define ISpRecognizer_GetInputObjectToken(This,token) (This)->lpVtbl->GetInputObjectToken(This,token)
#define ISpRecognizer_GetInputStream(This,stream) (This)->lpVtbl->GetInputStream(This,stream)
#define ISpRecognizer_CreateRecoContext(This,cxt) (This)->lpVtbl->CreateRecoContext(This,cxt)
#define ISpRecognizer_GetRecoProfile(This,token) (This)->lpVtbl->GetRecoProfile(This,token)
#define ISpRecognizer_SetRecoProfile(This,token) (This)->lpVtbl->SetRecoProfile(This,token)
#define ISpRecognizer_IsSharedInstance(This) (This)->lpVtbl->IsSharedInstance(This)
#define ISpRecognizer_GetRecoState(This,state) (This)->lpVtbl->GetRecoState(This,state)
#define ISpRecognizer_SetRecoState(This,state) (This)->lpVtbl->SetRecoState(This,state)
#define ISpRecognizer_GetStatus(This,status) (This)->lpVtbl->GetStatus(This,status)
#define ISpRecognizer_GetFormat(This,type,format,wave) (This)->lpVtbl->GetFormat(This,type,format,wave)
#define ISpRecognizer_IsUISupported(This,type,extra,count,supported) (This)->lpVtbl->IsUISupported(This,type,extra,count,supported)
#define ISpRecognizer_DisplayUI(This,hwnd,title,type,extra,cnt) (This)->lpVtbl->DisplayUI(This,hwnd,title,type,extra,cnt)
#define ISpRecognizer_EmulateRecognition(This,phrase) (This)->lpVtbl->EmulateRecognition(This,phrase)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpRecognizer_QueryInterface(ISpRecognizer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpRecognizer_AddRef(ISpRecognizer* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpRecognizer_Release(ISpRecognizer* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpProperties methods ***/
static FORCEINLINE HRESULT ISpRecognizer_SetPropertyNum(ISpRecognizer* This,const WCHAR *name,LONG value) {
    return This->lpVtbl->SetPropertyNum(This,name,value);
}
static FORCEINLINE HRESULT ISpRecognizer_GetPropertyNum(ISpRecognizer* This,const WCHAR *name,LONG *value) {
    return This->lpVtbl->GetPropertyNum(This,name,value);
}
static FORCEINLINE HRESULT ISpRecognizer_SetPropertyString(ISpRecognizer* This,const WCHAR *name,const WCHAR *value) {
    return This->lpVtbl->SetPropertyString(This,name,value);
}
static FORCEINLINE HRESULT ISpRecognizer_GetPropertyString(ISpRecognizer* This,const WCHAR *name,WCHAR **value) {
    return This->lpVtbl->GetPropertyString(This,name,value);
}
/*** ISpRecognizer methods ***/
static FORCEINLINE HRESULT ISpRecognizer_SetRecognizer(ISpRecognizer* This,ISpObjectToken *recognizer) {
    return This->lpVtbl->SetRecognizer(This,recognizer);
}
static FORCEINLINE HRESULT ISpRecognizer_GetRecognizer(ISpRecognizer* This,ISpObjectToken **recognizer) {
    return This->lpVtbl->GetRecognizer(This,recognizer);
}
static FORCEINLINE HRESULT ISpRecognizer_SetInput(ISpRecognizer* This,IUnknown *input,BOOL changes) {
    return This->lpVtbl->SetInput(This,input,changes);
}
static FORCEINLINE HRESULT ISpRecognizer_GetInputObjectToken(ISpRecognizer* This,ISpObjectToken **token) {
    return This->lpVtbl->GetInputObjectToken(This,token);
}
static FORCEINLINE HRESULT ISpRecognizer_GetInputStream(ISpRecognizer* This,ISpStreamFormat **stream) {
    return This->lpVtbl->GetInputStream(This,stream);
}
static FORCEINLINE HRESULT ISpRecognizer_CreateRecoContext(ISpRecognizer* This,ISpRecoContext **cxt) {
    return This->lpVtbl->CreateRecoContext(This,cxt);
}
static FORCEINLINE HRESULT ISpRecognizer_GetRecoProfile(ISpRecognizer* This,ISpObjectToken **token) {
    return This->lpVtbl->GetRecoProfile(This,token);
}
static FORCEINLINE HRESULT ISpRecognizer_SetRecoProfile(ISpRecognizer* This,ISpObjectToken *token) {
    return This->lpVtbl->SetRecoProfile(This,token);
}
static FORCEINLINE HRESULT ISpRecognizer_IsSharedInstance(ISpRecognizer* This) {
    return This->lpVtbl->IsSharedInstance(This);
}
static FORCEINLINE HRESULT ISpRecognizer_GetRecoState(ISpRecognizer* This,SPRECOSTATE *state) {
    return This->lpVtbl->GetRecoState(This,state);
}
static FORCEINLINE HRESULT ISpRecognizer_SetRecoState(ISpRecognizer* This,SPRECOSTATE state) {
    return This->lpVtbl->SetRecoState(This,state);
}
static FORCEINLINE HRESULT ISpRecognizer_GetStatus(ISpRecognizer* This,SPRECOGNIZERSTATUS *status) {
    return This->lpVtbl->GetStatus(This,status);
}
static FORCEINLINE HRESULT ISpRecognizer_GetFormat(ISpRecognizer* This,SPSTREAMFORMATTYPE type,GUID *format,WAVEFORMATEX **wave) {
    return This->lpVtbl->GetFormat(This,type,format,wave);
}
static FORCEINLINE HRESULT ISpRecognizer_IsUISupported(ISpRecognizer* This,const WCHAR *type,void *extra,ULONG count,BOOL *supported) {
    return This->lpVtbl->IsUISupported(This,type,extra,count,supported);
}
static FORCEINLINE HRESULT ISpRecognizer_DisplayUI(ISpRecognizer* This,HWND hwnd,const WCHAR *title,const WCHAR *type,void *extra,ULONG cnt) {
    return This->lpVtbl->DisplayUI(This,hwnd,title,type,extra,cnt);
}
static FORCEINLINE HRESULT ISpRecognizer_EmulateRecognition(ISpRecognizer* This,ISpPhrase *phrase) {
    return This->lpVtbl->EmulateRecognition(This,phrase);
}
#endif
#endif

#endif


#endif  /* __ISpRecognizer_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpStream interface
 */
#ifndef __ISpStream_INTERFACE_DEFINED__
#define __ISpStream_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpStream, 0x12e3cca9, 0x7518, 0x44c5, 0xa5,0xe7, 0xba,0x5a,0x79,0xcb,0x92,0x9e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("12e3cca9-7518-44c5-a5e7-ba5a79cb929e")
ISpStream : public ISpStreamFormat
{
    virtual HRESULT STDMETHODCALLTYPE SetBaseStream(
        IStream *stream,
        REFGUID format,
        const WAVEFORMATEX *wave) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBaseStream(
        IStream **stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE BindToFile(
        LPCWSTR filename,
        SPFILEMODE mode,
        const GUID *format,
        const WAVEFORMATEX *wave,
        ULONGLONG interest) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpStream, 0x12e3cca9, 0x7518, 0x44c5, 0xa5,0xe7, 0xba,0x5a,0x79,0xcb,0x92,0x9e)
#endif
#else
typedef struct ISpStreamVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISequentialStream methods ***/
    HRESULT (STDMETHODCALLTYPE *Read)(
        ISpStream *This,
        void *pv,
        ULONG cb,
        ULONG *pcbRead);

    HRESULT (STDMETHODCALLTYPE *Write)(
        ISpStream *This,
        const void *pv,
        ULONG cb,
        ULONG *pcbWritten);

    /*** IStream methods ***/
    HRESULT (STDMETHODCALLTYPE *Seek)(
        ISpStream *This,
        LARGE_INTEGER dlibMove,
        DWORD dwOrigin,
        ULARGE_INTEGER *plibNewPosition);

    HRESULT (STDMETHODCALLTYPE *SetSize)(
        ISpStream *This,
        ULARGE_INTEGER libNewSize);

    HRESULT (STDMETHODCALLTYPE *CopyTo)(
        ISpStream *This,
        IStream *pstm,
        ULARGE_INTEGER cb,
        ULARGE_INTEGER *pcbRead,
        ULARGE_INTEGER *pcbWritten);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        ISpStream *This,
        DWORD grfCommitFlags);

    HRESULT (STDMETHODCALLTYPE *Revert)(
        ISpStream *This);

    HRESULT (STDMETHODCALLTYPE *LockRegion)(
        ISpStream *This,
        ULARGE_INTEGER libOffset,
        ULARGE_INTEGER cb,
        DWORD dwLockType);

    HRESULT (STDMETHODCALLTYPE *UnlockRegion)(
        ISpStream *This,
        ULARGE_INTEGER libOffset,
        ULARGE_INTEGER cb,
        DWORD dwLockType);

    HRESULT (STDMETHODCALLTYPE *Stat)(
        ISpStream *This,
        STATSTG *pstatstg,
        DWORD grfStatFlag);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        ISpStream *This,
        IStream **ppstm);

    /*** ISpStreamFormat methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFormat)(
        ISpStream *This,
        GUID *format,
        WAVEFORMATEX **wave);

    /*** ISpStream methods ***/
    HRESULT (STDMETHODCALLTYPE *SetBaseStream)(
        ISpStream *This,
        IStream *stream,
        REFGUID format,
        const WAVEFORMATEX *wave);

    HRESULT (STDMETHODCALLTYPE *GetBaseStream)(
        ISpStream *This,
        IStream **stream);

    HRESULT (STDMETHODCALLTYPE *BindToFile)(
        ISpStream *This,
        LPCWSTR filename,
        SPFILEMODE mode,
        const GUID *format,
        const WAVEFORMATEX *wave,
        ULONGLONG interest);

    HRESULT (STDMETHODCALLTYPE *Close)(
        ISpStream *This);

    END_INTERFACE
} ISpStreamVtbl;

interface ISpStream {
    CONST_VTBL ISpStreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpStream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpStream_Release(This) (This)->lpVtbl->Release(This)
/*** ISequentialStream methods ***/
#define ISpStream_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
#define ISpStream_Write(This,pv,cb,pcbWritten) (This)->lpVtbl->Write(This,pv,cb,pcbWritten)
/*** IStream methods ***/
#define ISpStream_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
#define ISpStream_SetSize(This,libNewSize) (This)->lpVtbl->SetSize(This,libNewSize)
#define ISpStream_CopyTo(This,pstm,cb,pcbRead,pcbWritten) (This)->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten)
#define ISpStream_Commit(This,grfCommitFlags) (This)->lpVtbl->Commit(This,grfCommitFlags)
#define ISpStream_Revert(This) (This)->lpVtbl->Revert(This)
#define ISpStream_LockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->LockRegion(This,libOffset,cb,dwLockType)
#define ISpStream_UnlockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType)
#define ISpStream_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
#define ISpStream_Clone(This,ppstm) (This)->lpVtbl->Clone(This,ppstm)
/*** ISpStreamFormat methods ***/
#define ISpStream_GetFormat(This,format,wave) (This)->lpVtbl->GetFormat(This,format,wave)
/*** ISpStream methods ***/
#define ISpStream_SetBaseStream(This,stream,format,wave) (This)->lpVtbl->SetBaseStream(This,stream,format,wave)
#define ISpStream_GetBaseStream(This,stream) (This)->lpVtbl->GetBaseStream(This,stream)
#define ISpStream_BindToFile(This,filename,mode,format,wave,interest) (This)->lpVtbl->BindToFile(This,filename,mode,format,wave,interest)
#define ISpStream_Close(This) (This)->lpVtbl->Close(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpStream_QueryInterface(ISpStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpStream_AddRef(ISpStream* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpStream_Release(ISpStream* This) {
    return This->lpVtbl->Release(This);
}
/*** ISequentialStream methods ***/
static FORCEINLINE HRESULT ISpStream_Read(ISpStream* This,void *pv,ULONG cb,ULONG *pcbRead) {
    return This->lpVtbl->Read(This,pv,cb,pcbRead);
}
static FORCEINLINE HRESULT ISpStream_Write(ISpStream* This,const void *pv,ULONG cb,ULONG *pcbWritten) {
    return This->lpVtbl->Write(This,pv,cb,pcbWritten);
}
/*** IStream methods ***/
static FORCEINLINE HRESULT ISpStream_Seek(ISpStream* This,LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition) {
    return This->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition);
}
static FORCEINLINE HRESULT ISpStream_SetSize(ISpStream* This,ULARGE_INTEGER libNewSize) {
    return This->lpVtbl->SetSize(This,libNewSize);
}
static FORCEINLINE HRESULT ISpStream_CopyTo(ISpStream* This,IStream *pstm,ULARGE_INTEGER cb,ULARGE_INTEGER *pcbRead,ULARGE_INTEGER *pcbWritten) {
    return This->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten);
}
static FORCEINLINE HRESULT ISpStream_Commit(ISpStream* This,DWORD grfCommitFlags) {
    return This->lpVtbl->Commit(This,grfCommitFlags);
}
static FORCEINLINE HRESULT ISpStream_Revert(ISpStream* This) {
    return This->lpVtbl->Revert(This);
}
static FORCEINLINE HRESULT ISpStream_LockRegion(ISpStream* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->LockRegion(This,libOffset,cb,dwLockType);
}
static FORCEINLINE HRESULT ISpStream_UnlockRegion(ISpStream* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType);
}
static FORCEINLINE HRESULT ISpStream_Stat(ISpStream* This,STATSTG *pstatstg,DWORD grfStatFlag) {
    return This->lpVtbl->Stat(This,pstatstg,grfStatFlag);
}
static FORCEINLINE HRESULT ISpStream_Clone(ISpStream* This,IStream **ppstm) {
    return This->lpVtbl->Clone(This,ppstm);
}
/*** ISpStreamFormat methods ***/
static FORCEINLINE HRESULT ISpStream_GetFormat(ISpStream* This,GUID *format,WAVEFORMATEX **wave) {
    return This->lpVtbl->GetFormat(This,format,wave);
}
/*** ISpStream methods ***/
static FORCEINLINE HRESULT ISpStream_SetBaseStream(ISpStream* This,IStream *stream,REFGUID format,const WAVEFORMATEX *wave) {
    return This->lpVtbl->SetBaseStream(This,stream,format,wave);
}
static FORCEINLINE HRESULT ISpStream_GetBaseStream(ISpStream* This,IStream **stream) {
    return This->lpVtbl->GetBaseStream(This,stream);
}
static FORCEINLINE HRESULT ISpStream_BindToFile(ISpStream* This,LPCWSTR filename,SPFILEMODE mode,const GUID *format,const WAVEFORMATEX *wave,ULONGLONG interest) {
    return This->lpVtbl->BindToFile(This,filename,mode,format,wave,interest);
}
static FORCEINLINE HRESULT ISpStream_Close(ISpStream* This) {
    return This->lpVtbl->Close(This);
}
#endif
#endif

#endif


#endif  /* __ISpStream_INTERFACE_DEFINED__ */


DEFINE_GUID(LIBID_SpeechLib, 0xc866ca3a, 0x32f7, 0x11d2, 0x96,0x02, 0x00,0xc0,0x4f,0x8e,0xe6,0x28);

#ifndef __ISpeechAudioFormat_FWD_DEFINED__
#define __ISpeechAudioFormat_FWD_DEFINED__
typedef interface ISpeechAudioFormat ISpeechAudioFormat;
#ifdef __cplusplus
interface ISpeechAudioFormat;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechGrammarRule_FWD_DEFINED__
#define __ISpeechGrammarRule_FWD_DEFINED__
typedef interface ISpeechGrammarRule ISpeechGrammarRule;
#ifdef __cplusplus
interface ISpeechGrammarRule;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechGrammarRuleState_FWD_DEFINED__
#define __ISpeechGrammarRuleState_FWD_DEFINED__
typedef interface ISpeechGrammarRuleState ISpeechGrammarRuleState;
#ifdef __cplusplus
interface ISpeechGrammarRuleState;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechObjectTokens_FWD_DEFINED__
#define __ISpeechObjectTokens_FWD_DEFINED__
typedef interface ISpeechObjectTokens ISpeechObjectTokens;
#ifdef __cplusplus
interface ISpeechObjectTokens;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseProperties_FWD_DEFINED__
#define __ISpeechPhraseProperties_FWD_DEFINED__
typedef interface ISpeechPhraseProperties ISpeechPhraseProperties;
#ifdef __cplusplus
interface ISpeechPhraseProperties;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhraseRule_FWD_DEFINED__
#define __ISpeechPhraseRule_FWD_DEFINED__
typedef interface ISpeechPhraseRule ISpeechPhraseRule;
#ifdef __cplusplus
interface ISpeechPhraseRule;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechRecognizer_FWD_DEFINED__
#define __ISpeechRecognizer_FWD_DEFINED__
typedef interface ISpeechRecognizer ISpeechRecognizer;
#ifdef __cplusplus
interface ISpeechRecognizer;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechRecoContext_FWD_DEFINED__
#define __ISpeechRecoContext_FWD_DEFINED__
typedef interface ISpeechRecoContext ISpeechRecoContext;
#ifdef __cplusplus
interface ISpeechRecoContext;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechRecoGrammar_FWD_DEFINED__
#define __ISpeechRecoGrammar_FWD_DEFINED__
typedef interface ISpeechRecoGrammar ISpeechRecoGrammar;
#ifdef __cplusplus
interface ISpeechRecoGrammar;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechRecoResult_FWD_DEFINED__
#define __ISpeechRecoResult_FWD_DEFINED__
typedef interface ISpeechRecoResult ISpeechRecoResult;
#ifdef __cplusplus
interface ISpeechRecoResult;
#endif /* __cplusplus */
#endif

typedef LONG SpeechLanguageId;
typedef enum SpeechLoadOption {
    SLOStatic = SPLO_STATIC,
    SLODynamic = SPLO_DYNAMIC
} SpeechLoadOption;
typedef enum SpeechRuleState {
    SGDSInactive = SPRS_INACTIVE,
    SGDSActive = SPRS_ACTIVE,
    SGDSActiveWithAutoPause = SPRS_ACTIVE_WITH_AUTO_PAUSE,
    SGDSActiveUserDelimited = SPRS_ACTIVE_USER_DELIMITED
} SpeechRuleState;
typedef enum SpeechTokenShellFolder {
    STSF_AppData = 0x1a,
    STSF_LocalAppData = 0x1c,
    STSF_CommonAppData = 0x23,
    STSF_FlagCreate = 0x8000
} SpeechTokenShellFolder;
typedef enum SpeechEngineConfidence {
    SECLowConfidence = -1,
    SECNormalConfidence = 0,
    SECHighConfidence = 1
} SpeechEngineConfidence;
typedef enum SpeechAudioState {
    SASClosed = SPAS_CLOSED,
    SASStop = SPAS_STOP,
    SASPause = SPAS_PAUSE,
    SASRun = SPAS_RUN
} SpeechAudioState;
typedef enum SpeechRunState {
    SRSEDone = SPRS_DONE,
    SRSEIsSpeaking = SPRS_IS_SPEAKING
} SpeechRunState;
typedef enum SpeechDiscardType {
    SDTProperty = SPDF_PROPERTY,
    SDTReplacement = SPDF_REPLACEMENT,
    SDTRule = SPDF_RULE,
    SDTDisplayText = SPDF_DISPLAYTEXT,
    SDTLexicalForm = SPDF_LEXICALFORM,
    SDTPronunciation = SPDF_PRONUNCIATION,
    SDTAudio = SPDF_AUDIO,
    SDTAlternates = SPDF_ALTERNATES,
    SDTAll = SPDF_ALL
} SpeechDiscardType;
typedef enum SpeechRecognizerState {
    SRSInactive = SPRST_INACTIVE,
    SRSActive = SPRST_ACTIVE,
    SRSActiveAlways = SPRST_ACTIVE_ALWAYS,
    SRSInactiveWithPurge = SPRST_INACTIVE_WITH_PURGE
} SpeechRecognizerState;
typedef enum SpeechDisplayAttributes {
    SDA_No_Trailing_Space = 0,
    SDA_One_Trailing_Space = SPAF_ONE_TRAILING_SPACE,
    SDA_Two_Trailing_Spaces = SPAF_TWO_TRAILING_SPACES,
    SDA_Consume_Leading_Spaces = SPAF_CONSUME_LEADING_SPACES
} SpeechDisplayAttributes;
typedef enum SpeechFormatType {
    SFTInput = SPWF_INPUT,
    SFTSREngine = SPWF_SRENGINE
} SpeechFormatType;
typedef enum SpeechGrammarState {
    SGSEnabled = SPGS_ENABLED,
    SGSDisabled = SPGS_DISABLED,
    SGSExclusive = SPGS_EXCLUSIVE
} SpeechGrammarState;
typedef enum SpeechRuleAttributes {
    SRATopLevel = SPRAF_TopLevel,
    SRADefaultToActive = SPRAF_Active,
    SRAExport = SPRAF_Export,
    SRAImport = SPRAF_Import,
    SRAInterpreter = SPRAF_Interpreter,
    SRADynamic = SPRAF_Dynamic,
    SRARoot = SPRAF_Root
} SpeechRuleAttributes;
typedef enum SpeechWordPronounceable {
    SWPUnknownWordUnpronounceable = SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE,
    SWPUnknownWordPronounceable = SPWP_UNKNOWN_WORD_PRONOUNCEABLE,
    SWPKnownWordPronounceable = SPWP_KNOWN_WORD_PRONOUNCEABLE
} SpeechWordPronounceable;
typedef enum SpeechSpecialTransitionType {
    SSTTWildcard = 1,
    SSTTDictation = 2,
    SSTTTextBuffer = 3
} SpeechSpecialTransitionType;
typedef enum DISPID_SpeechRecoContext {
    DISPID_SRCRecognizer = 1,
    DISPID_SRCAudioInInterferenceStatus = 2,
    DISPID_SRCRequestedUIType = 3,
    DISPID_SRCVoice = 4,
    DISPID_SRAllowVoiceFormatMatchingOnNextSet = 5,
    DISPID_SRCVoicePurgeEvent = 6,
    DISPID_SRCEventInterests = 7,
    DISPID_SRCCmdMaxAlternates = 8,
    DISPID_SRCState = 9,
    DISPID_SRCRetainedAudio = 10,
    DISPID_SRCRetainedAudioFormat = 11,
    DISPID_SRCPause = 12,
    DISPID_SRCResume = 13,
    DISPID_SRCCreateGrammar = 14,
    DISPID_SRCCreateResultFromMemory = 15,
    DISPID_SRCBookmark = 16,
    DISPID_SRCSetAdaptationData = 17
} DISPID_SpeechRecoContext;
typedef enum DISPID_SpeechDataKey {
    DISPID_SDKSetBinaryValue = 1,
    DISPID_SDKGetBinaryValue = 2,
    DISPID_SDKSetStringValue = 3,
    DISPID_SDKGetStringValue = 4,
    DISPID_SDKSetLongValue = 5,
    DISPID_SDKGetlongValue = 6,
    DISPID_SDKOpenKey = 7,
    DISPID_SDKCreateKey = 8,
    DISPID_SDKDeleteKey = 9,
    DISPID_SDKDeleteValue = 10,
    DISPID_SDKEnumKeys = 11,
    DISPID_SDKEnumValues = 12
} DISPID_SpeechDataKey;
typedef enum DISPIDSPRG {
    DISPID_SRGId = 1,
    DISPID_SRGRecoContext = 2,
    DISPID_SRGState = 3,
    DISPID_SRGRules = 4,
    DISPID_SRGReset = 5,
    DISPID_SRGCommit = 6,
    DISPID_SRGCmdLoadFromFile = 7,
    DISPID_SRGCmdLoadFromObject = 8,
    DISPID_SRGCmdLoadFromResource = 9,
    DISPID_SRGCmdLoadFromMemory = 10,
    DISPID_SRGCmdLoadFromProprietaryGrammar = 11,
    DISPID_SRGCmdSetRuleState = 12,
    DISPID_SRGCmdSetRuleIdState = 13,
    DISPID_SRGDictationLoad = 14,
    DISPID_SRGDictationUnload = 15,
    DISPID_SRGDictationSetState = 16,
    DISPID_SRGSetWordSequenceData = 17,
    DISPID_SRGSetTextSelection = 18,
    DISPID_SRGIsPronounceable = 19
} DISPIDSPRG;
typedef enum SpeechInterference {
    SINone = SPINTERFERENCE_NONE,
    SINoise = SPINTERFERENCE_NOISE,
    SINoSignal = SPINTERFERENCE_NOSIGNAL,
    SITooLoud = SPINTERFERENCE_TOOLOUD,
    SITooQuiet = SPINTERFERENCE_TOOQUIET,
    SITooFast = SPINTERFERENCE_TOOFAST,
    SITooSlow = SPINTERFERENCE_TOOSLOW
} SpeechInterference;
typedef enum SpeechVoiceEvents {
    SVEStartInputStream = 1 << 1,
    SVEEndInputStream = 1 << 2,
    SVEVoiceChange = 1 << 3,
    SVEBookmark = 1 << 4,
    SVEWordBoundary = 1 << 5,
    SVEPhoneme = 1 << 6,
    SVESentenceBoundary = 1 << 7,
    SVEViseme = 1 << 8,
    SVEAudioLevel = 1 << 9,
    SVEPrivate = 1 << 15,
    SVEAllEvents = 0x83fe
} SpeechVoiceEvents;
typedef enum SpeechVoiceSpeakFlags {
    SVSFDefault = SPF_DEFAULT,
    SVSFlagsAsync = SPF_ASYNC,
    SVSFPurgeBeforeSpeak = SPF_PURGEBEFORESPEAK,
    SVSFIsFilename = SPF_IS_FILENAME,
    SVSFIsXML = SPF_IS_XML,
    SVSFIsNotXML = SPF_IS_NOT_XML,
    SVSFPersistXML = SPF_PERSIST_XML,
    SVSFNLPSpeakPunc = SPF_NLP_SPEAK_PUNC,
    SVSFParseSapi = SPF_PARSE_SAPI,
    SVSFParseSsml = SPF_PARSE_SSML,
    SVSFParseAutodetect = SPF_PARSE_AUTODETECT,
    SVSFNLPMask = SPF_NLP_MASK,
    SVSFParseMask = SPF_PARSE_MASK,
    SVSFVoiceMask = SPF_VOICE_MASK,
    SVSFUnusedFlags = SPF_UNUSED_FLAGS
} SpeechVoiceSpeakFlags;
typedef enum SpeechGrammarWordType {
    SGDisplay = SPWT_DISPLAY,
    SGLexical = SPWT_LEXICAL,
    SGPronounciation = SPWT_PRONUNCIATION,
    SGLexicalNoSpecialChars = SPWT_LEXICAL_NO_SPECIAL_CHARS
} SpeechGrammarWordType;
typedef enum SpeechRecoEvents {
    SREStreamEnd = 1 << 0,
    SRESoundStart = 1 << 1,
    SRESoundEnd = 1 << 2,
    SREPhraseStart = 1 << 3,
    SRERecognition = 1 << 4,
    SREHypothesis = 1 << 5,
    SREBookmark = 1 << 6,
    SREPropertyNumChange = 1 << 7,
    SREPropertyStringChange = 1 << 8,
    SREFalseRecognition = 1 << 9,
    SREInterference = 1 << 10,
    SRERequestUI = 1 << 11,
    SREStateChange = 1 << 12,
    SREAdaptation = 1 << 13,
    SREStreamStart = 1 << 14,
    SRERecoOtherContext = 1 << 15,
    SREAudioLevel = 1 << 16,
    SREPrivate = 1 << 18,
    SREAllEvents = 0x5ffff
} SpeechRecoEvents;
typedef enum SpeechRecoContextState {
    SRCS_Disabled = SPCS_DISABLED,
    SRCS_Enabled = SPCS_ENABLED
} SpeechRecoContextState;
typedef enum SpeechRetainedAudioOptions {
    SRAONone = SPAO_NONE,
    SRAORetainAudio = SPAO_RETAIN_AUDIO
} SpeechRetainedAudioOptions;
typedef enum SpeechVoicePriority {
    SVPNormal = SPVPRI_NORMAL,
    SVPAlert = SPVPRI_ALERT,
    SVPOver = SPVPRI_OVER
} SpeechVoicePriority;
/*****************************************************************************
 * ISpeechDataKey interface
 */
#ifndef __ISpeechDataKey_INTERFACE_DEFINED__
#define __ISpeechDataKey_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechDataKey, 0xce17c09b, 0x4efa, 0x44d5, 0xa4,0xc9, 0x59,0xd9,0x58,0x5a,0xb0,0xcd);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ce17c09b-4efa-44d5-a4c9-59d9585ab0cd")
ISpeechDataKey : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE SetBinaryValue(
        const BSTR name,
        VARIANT value) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBinaryValue(
        const BSTR name,
        VARIANT *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStringValue(
        const BSTR name,
        const BSTR value) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStringValue(
        const BSTR name,
        BSTR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetLongValue(
        const BSTR name,
        LONG value) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLongValue(
        const BSTR name,
        LONG *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE OpenKey(
        const BSTR name,
        ISpeechDataKey **key) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateKey(
        const BSTR name,
        ISpeechDataKey **key) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteKey(
        const BSTR name) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteValue(
        const BSTR name) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumKeys(
        LONG index,
        BSTR *name) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumValues(
        LONG Index,
        BSTR *value) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechDataKey, 0xce17c09b, 0x4efa, 0x44d5, 0xa4,0xc9, 0x59,0xd9,0x58,0x5a,0xb0,0xcd)
#endif
#else
typedef struct ISpeechDataKeyVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechDataKey *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechDataKey *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechDataKey *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechDataKey *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechDataKey methods ***/
    HRESULT (STDMETHODCALLTYPE *SetBinaryValue)(
        ISpeechDataKey *This,
        const BSTR name,
        VARIANT value);

    HRESULT (STDMETHODCALLTYPE *GetBinaryValue)(
        ISpeechDataKey *This,
        const BSTR name,
        VARIANT *value);

    HRESULT (STDMETHODCALLTYPE *SetStringValue)(
        ISpeechDataKey *This,
        const BSTR name,
        const BSTR value);

    HRESULT (STDMETHODCALLTYPE *GetStringValue)(
        ISpeechDataKey *This,
        const BSTR name,
        BSTR *value);

    HRESULT (STDMETHODCALLTYPE *SetLongValue)(
        ISpeechDataKey *This,
        const BSTR name,
        LONG value);

    HRESULT (STDMETHODCALLTYPE *GetLongValue)(
        ISpeechDataKey *This,
        const BSTR name,
        LONG *value);

    HRESULT (STDMETHODCALLTYPE *OpenKey)(
        ISpeechDataKey *This,
        const BSTR name,
        ISpeechDataKey **key);

    HRESULT (STDMETHODCALLTYPE *CreateKey)(
        ISpeechDataKey *This,
        const BSTR name,
        ISpeechDataKey **key);

    HRESULT (STDMETHODCALLTYPE *DeleteKey)(
        ISpeechDataKey *This,
        const BSTR name);

    HRESULT (STDMETHODCALLTYPE *DeleteValue)(
        ISpeechDataKey *This,
        const BSTR name);

    HRESULT (STDMETHODCALLTYPE *EnumKeys)(
        ISpeechDataKey *This,
        LONG index,
        BSTR *name);

    HRESULT (STDMETHODCALLTYPE *EnumValues)(
        ISpeechDataKey *This,
        LONG Index,
        BSTR *value);

    END_INTERFACE
} ISpeechDataKeyVtbl;

interface ISpeechDataKey {
    CONST_VTBL ISpeechDataKeyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechDataKey_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechDataKey_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechDataKey_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechDataKey_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechDataKey_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechDataKey_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechDataKey_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechDataKey methods ***/
#define ISpeechDataKey_SetBinaryValue(This,name,value) (This)->lpVtbl->SetBinaryValue(This,name,value)
#define ISpeechDataKey_GetBinaryValue(This,name,value) (This)->lpVtbl->GetBinaryValue(This,name,value)
#define ISpeechDataKey_SetStringValue(This,name,value) (This)->lpVtbl->SetStringValue(This,name,value)
#define ISpeechDataKey_GetStringValue(This,name,value) (This)->lpVtbl->GetStringValue(This,name,value)
#define ISpeechDataKey_SetLongValue(This,name,value) (This)->lpVtbl->SetLongValue(This,name,value)
#define ISpeechDataKey_GetLongValue(This,name,value) (This)->lpVtbl->GetLongValue(This,name,value)
#define ISpeechDataKey_OpenKey(This,name,key) (This)->lpVtbl->OpenKey(This,name,key)
#define ISpeechDataKey_CreateKey(This,name,key) (This)->lpVtbl->CreateKey(This,name,key)
#define ISpeechDataKey_DeleteKey(This,name) (This)->lpVtbl->DeleteKey(This,name)
#define ISpeechDataKey_DeleteValue(This,name) (This)->lpVtbl->DeleteValue(This,name)
#define ISpeechDataKey_EnumKeys(This,index,name) (This)->lpVtbl->EnumKeys(This,index,name)
#define ISpeechDataKey_EnumValues(This,Index,value) (This)->lpVtbl->EnumValues(This,Index,value)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechDataKey_QueryInterface(ISpeechDataKey* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechDataKey_AddRef(ISpeechDataKey* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechDataKey_Release(ISpeechDataKey* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechDataKey_GetTypeInfoCount(ISpeechDataKey* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechDataKey_GetTypeInfo(ISpeechDataKey* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechDataKey_GetIDsOfNames(ISpeechDataKey* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechDataKey_Invoke(ISpeechDataKey* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechDataKey methods ***/
static FORCEINLINE HRESULT ISpeechDataKey_SetBinaryValue(ISpeechDataKey* This,const BSTR name,VARIANT value) {
    return This->lpVtbl->SetBinaryValue(This,name,value);
}
static FORCEINLINE HRESULT ISpeechDataKey_GetBinaryValue(ISpeechDataKey* This,const BSTR name,VARIANT *value) {
    return This->lpVtbl->GetBinaryValue(This,name,value);
}
static FORCEINLINE HRESULT ISpeechDataKey_SetStringValue(ISpeechDataKey* This,const BSTR name,const BSTR value) {
    return This->lpVtbl->SetStringValue(This,name,value);
}
static FORCEINLINE HRESULT ISpeechDataKey_GetStringValue(ISpeechDataKey* This,const BSTR name,BSTR *value) {
    return This->lpVtbl->GetStringValue(This,name,value);
}
static FORCEINLINE HRESULT ISpeechDataKey_SetLongValue(ISpeechDataKey* This,const BSTR name,LONG value) {
    return This->lpVtbl->SetLongValue(This,name,value);
}
static FORCEINLINE HRESULT ISpeechDataKey_GetLongValue(ISpeechDataKey* This,const BSTR name,LONG *value) {
    return This->lpVtbl->GetLongValue(This,name,value);
}
static FORCEINLINE HRESULT ISpeechDataKey_OpenKey(ISpeechDataKey* This,const BSTR name,ISpeechDataKey **key) {
    return This->lpVtbl->OpenKey(This,name,key);
}
static FORCEINLINE HRESULT ISpeechDataKey_CreateKey(ISpeechDataKey* This,const BSTR name,ISpeechDataKey **key) {
    return This->lpVtbl->CreateKey(This,name,key);
}
static FORCEINLINE HRESULT ISpeechDataKey_DeleteKey(ISpeechDataKey* This,const BSTR name) {
    return This->lpVtbl->DeleteKey(This,name);
}
static FORCEINLINE HRESULT ISpeechDataKey_DeleteValue(ISpeechDataKey* This,const BSTR name) {
    return This->lpVtbl->DeleteValue(This,name);
}
static FORCEINLINE HRESULT ISpeechDataKey_EnumKeys(ISpeechDataKey* This,LONG index,BSTR *name) {
    return This->lpVtbl->EnumKeys(This,index,name);
}
static FORCEINLINE HRESULT ISpeechDataKey_EnumValues(ISpeechDataKey* This,LONG Index,BSTR *value) {
    return This->lpVtbl->EnumValues(This,Index,value);
}
#endif
#endif

#endif


#endif  /* __ISpeechDataKey_INTERFACE_DEFINED__ */

typedef enum SpeechDataKeyLocation {
    SDKLDefaultLocation = 0,
    SDKLCurrentUser = 1,
    SDKLLocalMachine = 2,
    SDKLCurrentConfig = 5
} SpeechDataKeyLocation;
typedef enum SpeechBookmarkOptions {
    SBONone = SPBO_NONE,
    SBOPause = SPBO_PAUSE
} SpeechBookmarkOptions;
typedef enum SpeechTokenContext {
    STCInprocServer = CLSCTX_INPROC_SERVER,
    STCInprocHandler = CLSCTX_INPROC_HANDLER,
    STCLocalServer = CLSCTX_LOCAL_SERVER,
    STCRemoteServer = CLSCTX_REMOTE_SERVER,
    STCAll = ((CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER) | CLSCTX_LOCAL_SERVER) | CLSCTX_REMOTE_SERVER
} SpeechTokenContext;
typedef enum DISPID_SpeechObjectTokenCategory {
    DISPID_SOTCId = 1,
    DISPID_SOTCDefault = 2,
    DISPID_SOTCSetId = 3,
    DISPID_SOTCGetDataKey = 4,
    DISPID_SOTCEnumerateTokens = 5
} DISPID_SpeechObjectTokenCategory;
/*****************************************************************************
 * ISpeechObjectTokenCategory interface
 */
#ifndef __ISpeechObjectTokenCategory_INTERFACE_DEFINED__
#define __ISpeechObjectTokenCategory_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechObjectTokenCategory, 0xca7eac50, 0x2d01, 0x4145, 0x86,0xd4, 0x5a,0xe7,0xd7,0x0f,0x44,0x69);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ca7eac50-2d01-4145-86d4-5ae7d70f4469")
ISpeechObjectTokenCategory : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Id(
        BSTR *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Default(
        const BSTR token) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Default(
        BSTR *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetId(
        const BSTR id,
        VARIANT_BOOL created = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDataKey(
        SpeechDataKeyLocation location,
        ISpeechDataKey **key) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumerateTokens(
        BSTR required,
        BSTR optional,
        ISpeechObjectTokens **tokens) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechObjectTokenCategory, 0xca7eac50, 0x2d01, 0x4145, 0x86,0xd4, 0x5a,0xe7,0xd7,0x0f,0x44,0x69)
#endif
#else
typedef struct ISpeechObjectTokenCategoryVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechObjectTokenCategory *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechObjectTokenCategory *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechObjectTokenCategory *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechObjectTokenCategory *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechObjectTokenCategory methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Id)(
        ISpeechObjectTokenCategory *This,
        BSTR *id);

    HRESULT (STDMETHODCALLTYPE *put_Default)(
        ISpeechObjectTokenCategory *This,
        const BSTR token);

    HRESULT (STDMETHODCALLTYPE *get_Default)(
        ISpeechObjectTokenCategory *This,
        BSTR *token);

    HRESULT (STDMETHODCALLTYPE *SetId)(
        ISpeechObjectTokenCategory *This,
        const BSTR id,
        VARIANT_BOOL created);

    HRESULT (STDMETHODCALLTYPE *GetDataKey)(
        ISpeechObjectTokenCategory *This,
        SpeechDataKeyLocation location,
        ISpeechDataKey **key);

    HRESULT (STDMETHODCALLTYPE *EnumerateTokens)(
        ISpeechObjectTokenCategory *This,
        BSTR required,
        BSTR optional,
        ISpeechObjectTokens **tokens);

    END_INTERFACE
} ISpeechObjectTokenCategoryVtbl;

interface ISpeechObjectTokenCategory {
    CONST_VTBL ISpeechObjectTokenCategoryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechObjectTokenCategory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechObjectTokenCategory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechObjectTokenCategory_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechObjectTokenCategory_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechObjectTokenCategory_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechObjectTokenCategory_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechObjectTokenCategory_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechObjectTokenCategory methods ***/
#define ISpeechObjectTokenCategory_get_Id(This,id) (This)->lpVtbl->get_Id(This,id)
#define ISpeechObjectTokenCategory_put_Default(This,token) (This)->lpVtbl->put_Default(This,token)
#define ISpeechObjectTokenCategory_get_Default(This,token) (This)->lpVtbl->get_Default(This,token)
#define ISpeechObjectTokenCategory_SetId(This,id,created) (This)->lpVtbl->SetId(This,id,created)
#define ISpeechObjectTokenCategory_GetDataKey(This,location,key) (This)->lpVtbl->GetDataKey(This,location,key)
#define ISpeechObjectTokenCategory_EnumerateTokens(This,required,optional,tokens) (This)->lpVtbl->EnumerateTokens(This,required,optional,tokens)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechObjectTokenCategory_QueryInterface(ISpeechObjectTokenCategory* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechObjectTokenCategory_AddRef(ISpeechObjectTokenCategory* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechObjectTokenCategory_Release(ISpeechObjectTokenCategory* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechObjectTokenCategory_GetTypeInfoCount(ISpeechObjectTokenCategory* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechObjectTokenCategory_GetTypeInfo(ISpeechObjectTokenCategory* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechObjectTokenCategory_GetIDsOfNames(ISpeechObjectTokenCategory* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechObjectTokenCategory_Invoke(ISpeechObjectTokenCategory* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechObjectTokenCategory methods ***/
static FORCEINLINE HRESULT ISpeechObjectTokenCategory_get_Id(ISpeechObjectTokenCategory* This,BSTR *id) {
    return This->lpVtbl->get_Id(This,id);
}
static FORCEINLINE HRESULT ISpeechObjectTokenCategory_put_Default(ISpeechObjectTokenCategory* This,const BSTR token) {
    return This->lpVtbl->put_Default(This,token);
}
static FORCEINLINE HRESULT ISpeechObjectTokenCategory_get_Default(ISpeechObjectTokenCategory* This,BSTR *token) {
    return This->lpVtbl->get_Default(This,token);
}
static FORCEINLINE HRESULT ISpeechObjectTokenCategory_SetId(ISpeechObjectTokenCategory* This,const BSTR id,VARIANT_BOOL created) {
    return This->lpVtbl->SetId(This,id,created);
}
static FORCEINLINE HRESULT ISpeechObjectTokenCategory_GetDataKey(ISpeechObjectTokenCategory* This,SpeechDataKeyLocation location,ISpeechDataKey **key) {
    return This->lpVtbl->GetDataKey(This,location,key);
}
static FORCEINLINE HRESULT ISpeechObjectTokenCategory_EnumerateTokens(ISpeechObjectTokenCategory* This,BSTR required,BSTR optional,ISpeechObjectTokens **tokens) {
    return This->lpVtbl->EnumerateTokens(This,required,optional,tokens);
}
#endif
#endif

#endif


#endif  /* __ISpeechObjectTokenCategory_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechObjectToken {
    DISPID_SOTId = 1,
    DISPID_SOTDataKey = 2,
    DISPID_SOTCategory = 3,
    DISPID_SOTGetDescription = 4,
    DISPID_SOTSetId = 5,
    DISPID_SOTGetAttribute = 6,
    DISPID_SOTCreateInstance = 7,
    DISPID_SOTRemove = 8,
    DISPID_SOTGetStorageFileName = 9,
    DISPID_SOTRemoveStorageFileName = 10,
    DISPID_SOTIsUISupported = 11,
    DISPID_SOTDisplayUI = 12,
    DISPID_SOTMatchesAttributes = 13
} DISPID_SpeechObjectToken;
/*****************************************************************************
 * ISpeechObjectToken interface
 */
#ifndef __ISpeechObjectToken_INTERFACE_DEFINED__
#define __ISpeechObjectToken_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechObjectToken, 0xc74a3adc, 0xb727, 0x4500, 0xa8,0x4a, 0xb5,0x26,0x72,0x1c,0x8b,0x8c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c74a3adc-b727-4500-a84a-b526721c8b8c")
ISpeechObjectToken : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Id(
        BSTR *object) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DataKey(
        ISpeechDataKey **key) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Category(
        ISpeechObjectTokenCategory **category) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDescription(
        LONG locale,
        BSTR *description) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetId(
        BSTR id,
        BSTR category = L"",
        VARIANT_BOOL create = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAttribute(
        BSTR name,
        BSTR *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateInstance(
        IUnknown *outer,
        SpeechTokenContext spcontext,
        IUnknown **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE Remove(
        BSTR clsid) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStorageFileName(
        BSTR clsid,
        BSTR key,
        BSTR name,
        SpeechTokenShellFolder folder,
        BSTR *path) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveStorageFileName(
        BSTR clsid,
        BSTR key,
        VARIANT_BOOL delete) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsUISupported(
        const BSTR type,
        const VARIANT *data,
        IUnknown *object,
        VARIANT_BOOL *supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisplayUI(
        LONG hwnd,
        BSTR title,
        const BSTR type,
        const VARIANT *data = 0,
        IUnknown *object = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE MatchesAttributes(
        BSTR attributes,
        VARIANT_BOOL *matches) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechObjectToken, 0xc74a3adc, 0xb727, 0x4500, 0xa8,0x4a, 0xb5,0x26,0x72,0x1c,0x8b,0x8c)
#endif
#else
typedef struct ISpeechObjectTokenVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechObjectToken *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechObjectToken *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechObjectToken *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechObjectToken *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechObjectToken methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Id)(
        ISpeechObjectToken *This,
        BSTR *object);

    HRESULT (STDMETHODCALLTYPE *get_DataKey)(
        ISpeechObjectToken *This,
        ISpeechDataKey **key);

    HRESULT (STDMETHODCALLTYPE *get_Category)(
        ISpeechObjectToken *This,
        ISpeechObjectTokenCategory **category);

    HRESULT (STDMETHODCALLTYPE *GetDescription)(
        ISpeechObjectToken *This,
        LONG locale,
        BSTR *description);

    HRESULT (STDMETHODCALLTYPE *SetId)(
        ISpeechObjectToken *This,
        BSTR id,
        BSTR category,
        VARIANT_BOOL create);

    HRESULT (STDMETHODCALLTYPE *GetAttribute)(
        ISpeechObjectToken *This,
        BSTR name,
        BSTR *value);

    HRESULT (STDMETHODCALLTYPE *CreateInstance)(
        ISpeechObjectToken *This,
        IUnknown *outer,
        SpeechTokenContext spcontext,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *Remove)(
        ISpeechObjectToken *This,
        BSTR clsid);

    HRESULT (STDMETHODCALLTYPE *GetStorageFileName)(
        ISpeechObjectToken *This,
        BSTR clsid,
        BSTR key,
        BSTR name,
        SpeechTokenShellFolder folder,
        BSTR *path);

    HRESULT (STDMETHODCALLTYPE *RemoveStorageFileName)(
        ISpeechObjectToken *This,
        BSTR clsid,
        BSTR key,
        VARIANT_BOOL delete);

    HRESULT (STDMETHODCALLTYPE *IsUISupported)(
        ISpeechObjectToken *This,
        const BSTR type,
        const VARIANT *data,
        IUnknown *object,
        VARIANT_BOOL *supported);

    HRESULT (STDMETHODCALLTYPE *DisplayUI)(
        ISpeechObjectToken *This,
        LONG hwnd,
        BSTR title,
        const BSTR type,
        const VARIANT *data,
        IUnknown *object);

    HRESULT (STDMETHODCALLTYPE *MatchesAttributes)(
        ISpeechObjectToken *This,
        BSTR attributes,
        VARIANT_BOOL *matches);

    END_INTERFACE
} ISpeechObjectTokenVtbl;

interface ISpeechObjectToken {
    CONST_VTBL ISpeechObjectTokenVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechObjectToken_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechObjectToken_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechObjectToken_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechObjectToken_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechObjectToken_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechObjectToken_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechObjectToken_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechObjectToken methods ***/
#define ISpeechObjectToken_get_Id(This,object) (This)->lpVtbl->get_Id(This,object)
#define ISpeechObjectToken_get_DataKey(This,key) (This)->lpVtbl->get_DataKey(This,key)
#define ISpeechObjectToken_get_Category(This,category) (This)->lpVtbl->get_Category(This,category)
#define ISpeechObjectToken_GetDescription(This,locale,description) (This)->lpVtbl->GetDescription(This,locale,description)
#define ISpeechObjectToken_SetId(This,id,category,create) (This)->lpVtbl->SetId(This,id,category,create)
#define ISpeechObjectToken_GetAttribute(This,name,value) (This)->lpVtbl->GetAttribute(This,name,value)
#define ISpeechObjectToken_CreateInstance(This,outer,spcontext,object) (This)->lpVtbl->CreateInstance(This,outer,spcontext,object)
#define ISpeechObjectToken_Remove(This,clsid) (This)->lpVtbl->Remove(This,clsid)
#define ISpeechObjectToken_GetStorageFileName(This,clsid,key,name,folder,path) (This)->lpVtbl->GetStorageFileName(This,clsid,key,name,folder,path)
#define ISpeechObjectToken_RemoveStorageFileName(This,clsid,key,delete) (This)->lpVtbl->RemoveStorageFileName(This,clsid,key,delete)
#define ISpeechObjectToken_IsUISupported(This,type,data,object,supported) (This)->lpVtbl->IsUISupported(This,type,data,object,supported)
#define ISpeechObjectToken_DisplayUI(This,hwnd,title,type,data,object) (This)->lpVtbl->DisplayUI(This,hwnd,title,type,data,object)
#define ISpeechObjectToken_MatchesAttributes(This,attributes,matches) (This)->lpVtbl->MatchesAttributes(This,attributes,matches)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechObjectToken_QueryInterface(ISpeechObjectToken* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechObjectToken_AddRef(ISpeechObjectToken* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechObjectToken_Release(ISpeechObjectToken* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechObjectToken_GetTypeInfoCount(ISpeechObjectToken* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechObjectToken_GetTypeInfo(ISpeechObjectToken* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechObjectToken_GetIDsOfNames(ISpeechObjectToken* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechObjectToken_Invoke(ISpeechObjectToken* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechObjectToken methods ***/
static FORCEINLINE HRESULT ISpeechObjectToken_get_Id(ISpeechObjectToken* This,BSTR *object) {
    return This->lpVtbl->get_Id(This,object);
}
static FORCEINLINE HRESULT ISpeechObjectToken_get_DataKey(ISpeechObjectToken* This,ISpeechDataKey **key) {
    return This->lpVtbl->get_DataKey(This,key);
}
static FORCEINLINE HRESULT ISpeechObjectToken_get_Category(ISpeechObjectToken* This,ISpeechObjectTokenCategory **category) {
    return This->lpVtbl->get_Category(This,category);
}
static FORCEINLINE HRESULT ISpeechObjectToken_GetDescription(ISpeechObjectToken* This,LONG locale,BSTR *description) {
    return This->lpVtbl->GetDescription(This,locale,description);
}
static FORCEINLINE HRESULT ISpeechObjectToken_SetId(ISpeechObjectToken* This,BSTR id,BSTR category,VARIANT_BOOL create) {
    return This->lpVtbl->SetId(This,id,category,create);
}
static FORCEINLINE HRESULT ISpeechObjectToken_GetAttribute(ISpeechObjectToken* This,BSTR name,BSTR *value) {
    return This->lpVtbl->GetAttribute(This,name,value);
}
static FORCEINLINE HRESULT ISpeechObjectToken_CreateInstance(ISpeechObjectToken* This,IUnknown *outer,SpeechTokenContext spcontext,IUnknown **object) {
    return This->lpVtbl->CreateInstance(This,outer,spcontext,object);
}
static FORCEINLINE HRESULT ISpeechObjectToken_Remove(ISpeechObjectToken* This,BSTR clsid) {
    return This->lpVtbl->Remove(This,clsid);
}
static FORCEINLINE HRESULT ISpeechObjectToken_GetStorageFileName(ISpeechObjectToken* This,BSTR clsid,BSTR key,BSTR name,SpeechTokenShellFolder folder,BSTR *path) {
    return This->lpVtbl->GetStorageFileName(This,clsid,key,name,folder,path);
}
static FORCEINLINE HRESULT ISpeechObjectToken_RemoveStorageFileName(ISpeechObjectToken* This,BSTR clsid,BSTR key,VARIANT_BOOL delete) {
    return This->lpVtbl->RemoveStorageFileName(This,clsid,key,delete);
}
static FORCEINLINE HRESULT ISpeechObjectToken_IsUISupported(ISpeechObjectToken* This,const BSTR type,const VARIANT *data,IUnknown *object,VARIANT_BOOL *supported) {
    return This->lpVtbl->IsUISupported(This,type,data,object,supported);
}
static FORCEINLINE HRESULT ISpeechObjectToken_DisplayUI(ISpeechObjectToken* This,LONG hwnd,BSTR title,const BSTR type,const VARIANT *data,IUnknown *object) {
    return This->lpVtbl->DisplayUI(This,hwnd,title,type,data,object);
}
static FORCEINLINE HRESULT ISpeechObjectToken_MatchesAttributes(ISpeechObjectToken* This,BSTR attributes,VARIANT_BOOL *matches) {
    return This->lpVtbl->MatchesAttributes(This,attributes,matches);
}
#endif
#endif

#endif


#endif  /* __ISpeechObjectToken_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechObjectTokens {
    DISPID_SOTsCount = 1,
    DISPID_SOTsItem = DISPID_VALUE,
    DISPID_SOTs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechObjectTokens;
/*****************************************************************************
 * ISpeechObjectTokens interface
 */
#ifndef __ISpeechObjectTokens_INTERFACE_DEFINED__
#define __ISpeechObjectTokens_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechObjectTokens, 0x9285b776, 0x2e7b, 0x4bc0, 0xb5,0x3e, 0x58,0x0e,0xb6,0xfa,0x96,0x7f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9285b776-2e7b-4bc0-b53e-580eb6fa967f")
ISpeechObjectTokens : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        LONG index,
        ISpeechObjectToken **token) = 0;

    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
        IUnknown **ppenum) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechObjectTokens, 0x9285b776, 0x2e7b, 0x4bc0, 0xb5,0x3e, 0x58,0x0e,0xb6,0xfa,0x96,0x7f)
#endif
#else
typedef struct ISpeechObjectTokensVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechObjectTokens *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechObjectTokens *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechObjectTokens *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechObjectTokens *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechObjectTokens methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        ISpeechObjectTokens *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *Item)(
        ISpeechObjectTokens *This,
        LONG index,
        ISpeechObjectToken **token);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechObjectTokens *This,
        IUnknown **ppenum);

    END_INTERFACE
} ISpeechObjectTokensVtbl;

interface ISpeechObjectTokens {
    CONST_VTBL ISpeechObjectTokensVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechObjectTokens_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechObjectTokens_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechObjectTokens_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechObjectTokens_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechObjectTokens_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechObjectTokens_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechObjectTokens_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechObjectTokens methods ***/
#define ISpeechObjectTokens_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define ISpeechObjectTokens_Item(This,index,token) (This)->lpVtbl->Item(This,index,token)
#define ISpeechObjectTokens_get__NewEnum(This,ppenum) (This)->lpVtbl->get__NewEnum(This,ppenum)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechObjectTokens_QueryInterface(ISpeechObjectTokens* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechObjectTokens_AddRef(ISpeechObjectTokens* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechObjectTokens_Release(ISpeechObjectTokens* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechObjectTokens_GetTypeInfoCount(ISpeechObjectTokens* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechObjectTokens_GetTypeInfo(ISpeechObjectTokens* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechObjectTokens_GetIDsOfNames(ISpeechObjectTokens* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechObjectTokens_Invoke(ISpeechObjectTokens* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechObjectTokens methods ***/
static FORCEINLINE HRESULT ISpeechObjectTokens_get_Count(ISpeechObjectTokens* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static FORCEINLINE HRESULT ISpeechObjectTokens_Item(ISpeechObjectTokens* This,LONG index,ISpeechObjectToken **token) {
    return This->lpVtbl->Item(This,index,token);
}
static FORCEINLINE HRESULT ISpeechObjectTokens_get__NewEnum(ISpeechObjectTokens* This,IUnknown **ppenum) {
    return This->lpVtbl->get__NewEnum(This,ppenum);
}
#endif
#endif

#endif


#endif  /* __ISpeechObjectTokens_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechWaveFormatEx {
    DISPID_SWFEFormatTag = 1,
    DISPID_SWFEChannels = 2,
    DISPID_SWFESamplesPerSec = 3,
    DISPID_SWFEAvgBytesPerSec = 4,
    DISPID_SWFEBlockAlign = 5,
    DISPID_SWFEBitsPerSample = 6,
    DISPID_SWFEExtraData = 7
} DISPID_SpeechWaveFormatEx;
/*****************************************************************************
 * ISpeechWaveFormatEx interface
 */
#ifndef __ISpeechWaveFormatEx_INTERFACE_DEFINED__
#define __ISpeechWaveFormatEx_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechWaveFormatEx, 0x7a1ef0d5, 0x1581, 0x4741, 0x88,0xe4, 0x20,0x9a,0x49,0xf1,0x1a,0x10);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7a1ef0d5-1581-4741-88e4-209a49f11a10")
ISpeechWaveFormatEx : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_FormatTag(
        short *tag) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_FormatTag(
        short tag) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Channels(
        short *channels) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Channels(
        short channels) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_SamplesPerSec(
        LONG *samples) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_SamplesPerSec(
        LONG samples) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AvgBytesPerSec(
        LONG *average) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_AvgBytesPerSec(
        LONG average) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_BlockAlign(
        short *alignment) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_BlockAlign(
        short alignment) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_BitsPerSample(
        short *bits) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_BitsPerSample(
        short bits) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ExtraData(
        VARIANT *data) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ExtraData(
        VARIANT data) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechWaveFormatEx, 0x7a1ef0d5, 0x1581, 0x4741, 0x88,0xe4, 0x20,0x9a,0x49,0xf1,0x1a,0x10)
#endif
#else
typedef struct ISpeechWaveFormatExVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechWaveFormatEx *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechWaveFormatEx *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechWaveFormatEx *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechWaveFormatEx *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechWaveFormatEx methods ***/
    HRESULT (STDMETHODCALLTYPE *get_FormatTag)(
        ISpeechWaveFormatEx *This,
        short *tag);

    HRESULT (STDMETHODCALLTYPE *put_FormatTag)(
        ISpeechWaveFormatEx *This,
        short tag);

    HRESULT (STDMETHODCALLTYPE *get_Channels)(
        ISpeechWaveFormatEx *This,
        short *channels);

    HRESULT (STDMETHODCALLTYPE *put_Channels)(
        ISpeechWaveFormatEx *This,
        short channels);

    HRESULT (STDMETHODCALLTYPE *get_SamplesPerSec)(
        ISpeechWaveFormatEx *This,
        LONG *samples);

    HRESULT (STDMETHODCALLTYPE *put_SamplesPerSec)(
        ISpeechWaveFormatEx *This,
        LONG samples);

    HRESULT (STDMETHODCALLTYPE *get_AvgBytesPerSec)(
        ISpeechWaveFormatEx *This,
        LONG *average);

    HRESULT (STDMETHODCALLTYPE *put_AvgBytesPerSec)(
        ISpeechWaveFormatEx *This,
        LONG average);

    HRESULT (STDMETHODCALLTYPE *get_BlockAlign)(
        ISpeechWaveFormatEx *This,
        short *alignment);

    HRESULT (STDMETHODCALLTYPE *put_BlockAlign)(
        ISpeechWaveFormatEx *This,
        short alignment);

    HRESULT (STDMETHODCALLTYPE *get_BitsPerSample)(
        ISpeechWaveFormatEx *This,
        short *bits);

    HRESULT (STDMETHODCALLTYPE *put_BitsPerSample)(
        ISpeechWaveFormatEx *This,
        short bits);

    HRESULT (STDMETHODCALLTYPE *get_ExtraData)(
        ISpeechWaveFormatEx *This,
        VARIANT *data);

    HRESULT (STDMETHODCALLTYPE *put_ExtraData)(
        ISpeechWaveFormatEx *This,
        VARIANT data);

    END_INTERFACE
} ISpeechWaveFormatExVtbl;

interface ISpeechWaveFormatEx {
    CONST_VTBL ISpeechWaveFormatExVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechWaveFormatEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechWaveFormatEx_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechWaveFormatEx_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechWaveFormatEx_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechWaveFormatEx_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechWaveFormatEx_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechWaveFormatEx_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechWaveFormatEx methods ***/
#define ISpeechWaveFormatEx_get_FormatTag(This,tag) (This)->lpVtbl->get_FormatTag(This,tag)
#define ISpeechWaveFormatEx_put_FormatTag(This,tag) (This)->lpVtbl->put_FormatTag(This,tag)
#define ISpeechWaveFormatEx_get_Channels(This,channels) (This)->lpVtbl->get_Channels(This,channels)
#define ISpeechWaveFormatEx_put_Channels(This,channels) (This)->lpVtbl->put_Channels(This,channels)
#define ISpeechWaveFormatEx_get_SamplesPerSec(This,samples) (This)->lpVtbl->get_SamplesPerSec(This,samples)
#define ISpeechWaveFormatEx_put_SamplesPerSec(This,samples) (This)->lpVtbl->put_SamplesPerSec(This,samples)
#define ISpeechWaveFormatEx_get_AvgBytesPerSec(This,average) (This)->lpVtbl->get_AvgBytesPerSec(This,average)
#define ISpeechWaveFormatEx_put_AvgBytesPerSec(This,average) (This)->lpVtbl->put_AvgBytesPerSec(This,average)
#define ISpeechWaveFormatEx_get_BlockAlign(This,alignment) (This)->lpVtbl->get_BlockAlign(This,alignment)
#define ISpeechWaveFormatEx_put_BlockAlign(This,alignment) (This)->lpVtbl->put_BlockAlign(This,alignment)
#define ISpeechWaveFormatEx_get_BitsPerSample(This,bits) (This)->lpVtbl->get_BitsPerSample(This,bits)
#define ISpeechWaveFormatEx_put_BitsPerSample(This,bits) (This)->lpVtbl->put_BitsPerSample(This,bits)
#define ISpeechWaveFormatEx_get_ExtraData(This,data) (This)->lpVtbl->get_ExtraData(This,data)
#define ISpeechWaveFormatEx_put_ExtraData(This,data) (This)->lpVtbl->put_ExtraData(This,data)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechWaveFormatEx_QueryInterface(ISpeechWaveFormatEx* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechWaveFormatEx_AddRef(ISpeechWaveFormatEx* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechWaveFormatEx_Release(ISpeechWaveFormatEx* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechWaveFormatEx_GetTypeInfoCount(ISpeechWaveFormatEx* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_GetTypeInfo(ISpeechWaveFormatEx* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_GetIDsOfNames(ISpeechWaveFormatEx* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_Invoke(ISpeechWaveFormatEx* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechWaveFormatEx methods ***/
static FORCEINLINE HRESULT ISpeechWaveFormatEx_get_FormatTag(ISpeechWaveFormatEx* This,short *tag) {
    return This->lpVtbl->get_FormatTag(This,tag);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_put_FormatTag(ISpeechWaveFormatEx* This,short tag) {
    return This->lpVtbl->put_FormatTag(This,tag);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_get_Channels(ISpeechWaveFormatEx* This,short *channels) {
    return This->lpVtbl->get_Channels(This,channels);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_put_Channels(ISpeechWaveFormatEx* This,short channels) {
    return This->lpVtbl->put_Channels(This,channels);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_get_SamplesPerSec(ISpeechWaveFormatEx* This,LONG *samples) {
    return This->lpVtbl->get_SamplesPerSec(This,samples);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_put_SamplesPerSec(ISpeechWaveFormatEx* This,LONG samples) {
    return This->lpVtbl->put_SamplesPerSec(This,samples);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_get_AvgBytesPerSec(ISpeechWaveFormatEx* This,LONG *average) {
    return This->lpVtbl->get_AvgBytesPerSec(This,average);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_put_AvgBytesPerSec(ISpeechWaveFormatEx* This,LONG average) {
    return This->lpVtbl->put_AvgBytesPerSec(This,average);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_get_BlockAlign(ISpeechWaveFormatEx* This,short *alignment) {
    return This->lpVtbl->get_BlockAlign(This,alignment);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_put_BlockAlign(ISpeechWaveFormatEx* This,short alignment) {
    return This->lpVtbl->put_BlockAlign(This,alignment);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_get_BitsPerSample(ISpeechWaveFormatEx* This,short *bits) {
    return This->lpVtbl->get_BitsPerSample(This,bits);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_put_BitsPerSample(ISpeechWaveFormatEx* This,short bits) {
    return This->lpVtbl->put_BitsPerSample(This,bits);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_get_ExtraData(ISpeechWaveFormatEx* This,VARIANT *data) {
    return This->lpVtbl->get_ExtraData(This,data);
}
static FORCEINLINE HRESULT ISpeechWaveFormatEx_put_ExtraData(ISpeechWaveFormatEx* This,VARIANT data) {
    return This->lpVtbl->put_ExtraData(This,data);
}
#endif
#endif

#endif


#endif  /* __ISpeechWaveFormatEx_INTERFACE_DEFINED__ */

typedef enum SpeechAudioFormatType {
    SAFTDefault = -1,
    SAFTNoAssignedFormat = 0,
    SAFTText = 1,
    SAFTNonStandardFormat = 2,
    SAFTExtendedAudioFormat = 3,
    SAFT8kHz8BitMono = 4,
    SAFT8kHz8BitStereo = 5,
    SAFT8kHz16BitMono = 6,
    SAFT8kHz16BitStereo = 7,
    SAFT11kHz8BitMono = 8,
    SAFT11kHz8BitStereo = 9,
    SAFT11kHz16BitMono = 10,
    SAFT11kHz16BitStereo = 11,
    SAFT12kHz8BitMono = 12,
    SAFT12kHz8BitStereo = 13,
    SAFT12kHz16BitMono = 14,
    SAFT12kHz16BitStereo = 15,
    SAFT16kHz8BitMono = 16,
    SAFT16kHz8BitStereo = 17,
    SAFT16kHz16BitMono = 18,
    SAFT16kHz16BitStereo = 19,
    SAFT22kHz8BitMono = 20,
    SAFT22kHz8BitStereo = 21,
    SAFT22kHz16BitMono = 22,
    SAFT22kHz16BitStereo = 23,
    SAFT24kHz8BitMono = 24,
    SAFT24kHz8BitStereo = 25,
    SAFT24kHz16BitMono = 26,
    SAFT24kHz16BitStereo = 27,
    SAFT32kHz8BitMono = 28,
    SAFT32kHz8BitStereo = 29,
    SAFT32kHz16BitMono = 30,
    SAFT32kHz16BitStereo = 31,
    SAFT44kHz8BitMono = 32,
    SAFT44kHz8BitStereo = 33,
    SAFT44kHz16BitMono = 34,
    SAFT44kHz16BitStereo = 35,
    SAFT48kHz8BitMono = 36,
    SAFT48kHz8BitStereo = 37,
    SAFT48kHz16BitMono = 38,
    SAFT48kHz16BitStereo = 39,
    SAFTTrueSpeech_8kHz1BitMono = 40,
    SAFTCCITT_ALaw_8kHzMono = 41,
    SAFTCCITT_ALaw_8kHzStereo = 42,
    SAFTCCITT_ALaw_11kHzMono = 43,
    SAFTCCITT_ALaw_11kHzStereo = 44,
    SAFTCCITT_ALaw_22kHzMono = 45,
    SAFTCCITT_ALaw_22kHzStereo = 46,
    SAFTCCITT_ALaw_44kHzMono = 47,
    SAFTCCITT_ALaw_44kHzStereo = 48,
    SAFTCCITT_uLaw_8kHzMono = 49,
    SAFTCCITT_uLaw_8kHzStereo = 50,
    SAFTCCITT_uLaw_11kHzMono = 51,
    SAFTCCITT_uLaw_11kHzStereo = 52,
    SAFTCCITT_uLaw_22kHzMono = 53,
    SAFTCCITT_uLaw_22kHzStereo = 54,
    SAFTCCITT_uLaw_44kHzMono = 55,
    SAFTCCITT_uLaw_44kHzStereo = 56,
    SAFTADPCM_8kHzMono = 57,
    SAFTADPCM_8kHzStereo = 58,
    SAFTADPCM_11kHzMono = 59,
    SAFTADPCM_11kHzStereo = 60,
    SAFTADPCM_22kHzMono = 61,
    SAFTADPCM_22kHzStereo = 62,
    SAFTADPCM_44kHzMono = 63,
    SAFTADPCM_44kHzStereo = 64,
    SAFTGSM610_8kHzMono = 65,
    SAFTGSM610_11kHzMono = 66,
    SAFTGSM610_22kHzMono = 67,
    SAFTGSM610_44kHzMono = 68
} SpeechAudioFormatType;
typedef enum DISPID_SpeechAudioFormat {
    DISPID_SAFType = 1,
    DISPID_SAFGuid = 2,
    DISPID_SAFGetWaveFormatEx = 3,
    DISPID_SAFSetWaveFormatEx = 4
} DISPID_SpeechAudioFormat;
/*****************************************************************************
 * ISpeechAudioFormat interface
 */
#ifndef __ISpeechAudioFormat_INTERFACE_DEFINED__
#define __ISpeechAudioFormat_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechAudioFormat, 0xe6e9c590, 0x3e18, 0x40e3, 0x82,0x99, 0x06,0x1f,0x98,0xbd,0xe7,0xc7);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e6e9c590-3e18-40e3-8299-061f98bde7c7")
ISpeechAudioFormat : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Type(
        SpeechAudioFormatType *format) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Type(
        SpeechAudioFormatType format) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Guid(
        BSTR *guid) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Guid(
        BSTR guid) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetWaveFormatEx(
        ISpeechWaveFormatEx **speechwave) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetWaveFormatEx(
        ISpeechWaveFormatEx *speechwave) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechAudioFormat, 0xe6e9c590, 0x3e18, 0x40e3, 0x82,0x99, 0x06,0x1f,0x98,0xbd,0xe7,0xc7)
#endif
#else
typedef struct ISpeechAudioFormatVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechAudioFormat *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechAudioFormat *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechAudioFormat *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechAudioFormat *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechAudioFormat methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Type)(
        ISpeechAudioFormat *This,
        SpeechAudioFormatType *format);

    HRESULT (STDMETHODCALLTYPE *put_Type)(
        ISpeechAudioFormat *This,
        SpeechAudioFormatType format);

    HRESULT (STDMETHODCALLTYPE *get_Guid)(
        ISpeechAudioFormat *This,
        BSTR *guid);

    HRESULT (STDMETHODCALLTYPE *put_Guid)(
        ISpeechAudioFormat *This,
        BSTR guid);

    HRESULT (STDMETHODCALLTYPE *GetWaveFormatEx)(
        ISpeechAudioFormat *This,
        ISpeechWaveFormatEx **speechwave);

    HRESULT (STDMETHODCALLTYPE *SetWaveFormatEx)(
        ISpeechAudioFormat *This,
        ISpeechWaveFormatEx *speechwave);

    END_INTERFACE
} ISpeechAudioFormatVtbl;

interface ISpeechAudioFormat {
    CONST_VTBL ISpeechAudioFormatVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechAudioFormat_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechAudioFormat_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechAudioFormat_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechAudioFormat_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechAudioFormat_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechAudioFormat_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechAudioFormat_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechAudioFormat methods ***/
#define ISpeechAudioFormat_get_Type(This,format) (This)->lpVtbl->get_Type(This,format)
#define ISpeechAudioFormat_put_Type(This,format) (This)->lpVtbl->put_Type(This,format)
#define ISpeechAudioFormat_get_Guid(This,guid) (This)->lpVtbl->get_Guid(This,guid)
#define ISpeechAudioFormat_put_Guid(This,guid) (This)->lpVtbl->put_Guid(This,guid)
#define ISpeechAudioFormat_GetWaveFormatEx(This,speechwave) (This)->lpVtbl->GetWaveFormatEx(This,speechwave)
#define ISpeechAudioFormat_SetWaveFormatEx(This,speechwave) (This)->lpVtbl->SetWaveFormatEx(This,speechwave)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechAudioFormat_QueryInterface(ISpeechAudioFormat* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechAudioFormat_AddRef(ISpeechAudioFormat* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechAudioFormat_Release(ISpeechAudioFormat* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechAudioFormat_GetTypeInfoCount(ISpeechAudioFormat* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechAudioFormat_GetTypeInfo(ISpeechAudioFormat* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechAudioFormat_GetIDsOfNames(ISpeechAudioFormat* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechAudioFormat_Invoke(ISpeechAudioFormat* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechAudioFormat methods ***/
static FORCEINLINE HRESULT ISpeechAudioFormat_get_Type(ISpeechAudioFormat* This,SpeechAudioFormatType *format) {
    return This->lpVtbl->get_Type(This,format);
}
static FORCEINLINE HRESULT ISpeechAudioFormat_put_Type(ISpeechAudioFormat* This,SpeechAudioFormatType format) {
    return This->lpVtbl->put_Type(This,format);
}
static FORCEINLINE HRESULT ISpeechAudioFormat_get_Guid(ISpeechAudioFormat* This,BSTR *guid) {
    return This->lpVtbl->get_Guid(This,guid);
}
static FORCEINLINE HRESULT ISpeechAudioFormat_put_Guid(ISpeechAudioFormat* This,BSTR guid) {
    return This->lpVtbl->put_Guid(This,guid);
}
static FORCEINLINE HRESULT ISpeechAudioFormat_GetWaveFormatEx(ISpeechAudioFormat* This,ISpeechWaveFormatEx **speechwave) {
    return This->lpVtbl->GetWaveFormatEx(This,speechwave);
}
static FORCEINLINE HRESULT ISpeechAudioFormat_SetWaveFormatEx(ISpeechAudioFormat* This,ISpeechWaveFormatEx *speechwave) {
    return This->lpVtbl->SetWaveFormatEx(This,speechwave);
}
#endif
#endif

#endif


#endif  /* __ISpeechAudioFormat_INTERFACE_DEFINED__ */

typedef enum SpeechStreamSeekPositionType {
    SSSPTRelativeToStart = STREAM_SEEK_SET,
    SSSPTRelativeToCurrentPosition = STREAM_SEEK_CUR,
    SSSPTRelativeToEnd = STREAM_SEEK_END
} SpeechStreamSeekPositionType;
typedef enum DISPID_SpeechBaseStream {
    DISPID_SBSFormat = 1,
    DISPID_SBSRead = 2,
    DISPID_SBSWrite = 3,
    DISPID_SBSSeek = 4
} DISPID_SpeechBaseStream;
/*****************************************************************************
 * ISpeechBaseStream interface
 */
#ifndef __ISpeechBaseStream_INTERFACE_DEFINED__
#define __ISpeechBaseStream_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechBaseStream, 0x6450336f, 0x7d49, 0x4ced, 0x80,0x97, 0x49,0xd6,0xde,0xe3,0x72,0x94);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6450336f-7d49-4ced-8097-49d6dee37294")
ISpeechBaseStream : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Format(
        ISpeechAudioFormat **format) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_Format(
        ISpeechAudioFormat *format) = 0;

    virtual HRESULT STDMETHODCALLTYPE Read(
        VARIANT *buffer,
        LONG written,
        LONG *read) = 0;

    virtual HRESULT STDMETHODCALLTYPE Write(
        VARIANT buffer,
        LONG *written) = 0;

    virtual HRESULT STDMETHODCALLTYPE Seek(
        VARIANT position,
        SpeechStreamSeekPositionType origin,
        VARIANT *pos) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechBaseStream, 0x6450336f, 0x7d49, 0x4ced, 0x80,0x97, 0x49,0xd6,0xde,0xe3,0x72,0x94)
#endif
#else
typedef struct ISpeechBaseStreamVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechBaseStream *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechBaseStream *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechBaseStream *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechBaseStream *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechBaseStream methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Format)(
        ISpeechBaseStream *This,
        ISpeechAudioFormat **format);

    HRESULT (STDMETHODCALLTYPE *putref_Format)(
        ISpeechBaseStream *This,
        ISpeechAudioFormat *format);

    HRESULT (STDMETHODCALLTYPE *Read)(
        ISpeechBaseStream *This,
        VARIANT *buffer,
        LONG written,
        LONG *read);

    HRESULT (STDMETHODCALLTYPE *Write)(
        ISpeechBaseStream *This,
        VARIANT buffer,
        LONG *written);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        ISpeechBaseStream *This,
        VARIANT position,
        SpeechStreamSeekPositionType origin,
        VARIANT *pos);

    END_INTERFACE
} ISpeechBaseStreamVtbl;

interface ISpeechBaseStream {
    CONST_VTBL ISpeechBaseStreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechBaseStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechBaseStream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechBaseStream_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechBaseStream_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechBaseStream_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechBaseStream_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechBaseStream_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechBaseStream methods ***/
#define ISpeechBaseStream_get_Format(This,format) (This)->lpVtbl->get_Format(This,format)
#define ISpeechBaseStream_putref_Format(This,format) (This)->lpVtbl->putref_Format(This,format)
#define ISpeechBaseStream_Read(This,buffer,written,read) (This)->lpVtbl->Read(This,buffer,written,read)
#define ISpeechBaseStream_Write(This,buffer,written) (This)->lpVtbl->Write(This,buffer,written)
#define ISpeechBaseStream_Seek(This,position,origin,pos) (This)->lpVtbl->Seek(This,position,origin,pos)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechBaseStream_QueryInterface(ISpeechBaseStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechBaseStream_AddRef(ISpeechBaseStream* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechBaseStream_Release(ISpeechBaseStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechBaseStream_GetTypeInfoCount(ISpeechBaseStream* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechBaseStream_GetTypeInfo(ISpeechBaseStream* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechBaseStream_GetIDsOfNames(ISpeechBaseStream* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechBaseStream_Invoke(ISpeechBaseStream* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechBaseStream methods ***/
static FORCEINLINE HRESULT ISpeechBaseStream_get_Format(ISpeechBaseStream* This,ISpeechAudioFormat **format) {
    return This->lpVtbl->get_Format(This,format);
}
static FORCEINLINE HRESULT ISpeechBaseStream_putref_Format(ISpeechBaseStream* This,ISpeechAudioFormat *format) {
    return This->lpVtbl->putref_Format(This,format);
}
static FORCEINLINE HRESULT ISpeechBaseStream_Read(ISpeechBaseStream* This,VARIANT *buffer,LONG written,LONG *read) {
    return This->lpVtbl->Read(This,buffer,written,read);
}
static FORCEINLINE HRESULT ISpeechBaseStream_Write(ISpeechBaseStream* This,VARIANT buffer,LONG *written) {
    return This->lpVtbl->Write(This,buffer,written);
}
static FORCEINLINE HRESULT ISpeechBaseStream_Seek(ISpeechBaseStream* This,VARIANT position,SpeechStreamSeekPositionType origin,VARIANT *pos) {
    return This->lpVtbl->Seek(This,position,origin,pos);
}
#endif
#endif

#endif


#endif  /* __ISpeechBaseStream_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechAudioStatus {
    DISPID_SASFreeBufferSpace = 1,
    DISPID_SASNonBlockingIO = 2,
    DISPID_SASState = 3,
    DISPID_SASCurrentSeekPosition = 4,
    DISPID_SASCurrentDevicePosition = 5
} DISPID_SpeechAudioStatus;
/*****************************************************************************
 * ISpeechAudioStatus interface
 */
#ifndef __ISpeechAudioStatus_INTERFACE_DEFINED__
#define __ISpeechAudioStatus_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechAudioStatus, 0xc62d9c91, 0x7458, 0x47f6, 0x86,0x2d, 0x1e,0xf8,0x6f,0xb0,0xb2,0x78);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c62d9c91-7458-47f6-862d-1ef86fb0b278")
ISpeechAudioStatus : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_FreeBufferSpace(
        LONG *space) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NonBlockingIO(
        LONG *nonblocking) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_State(
        SpeechAudioState *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CurrentSeekPosition(
        VARIANT *position) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CurrentDevicePosition(
        VARIANT *position) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechAudioStatus, 0xc62d9c91, 0x7458, 0x47f6, 0x86,0x2d, 0x1e,0xf8,0x6f,0xb0,0xb2,0x78)
#endif
#else
typedef struct ISpeechAudioStatusVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechAudioStatus *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechAudioStatus *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechAudioStatus *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechAudioStatus *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechAudioStatus methods ***/
    HRESULT (STDMETHODCALLTYPE *get_FreeBufferSpace)(
        ISpeechAudioStatus *This,
        LONG *space);

    HRESULT (STDMETHODCALLTYPE *get_NonBlockingIO)(
        ISpeechAudioStatus *This,
        LONG *nonblocking);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        ISpeechAudioStatus *This,
        SpeechAudioState *state);

    HRESULT (STDMETHODCALLTYPE *get_CurrentSeekPosition)(
        ISpeechAudioStatus *This,
        VARIANT *position);

    HRESULT (STDMETHODCALLTYPE *get_CurrentDevicePosition)(
        ISpeechAudioStatus *This,
        VARIANT *position);

    END_INTERFACE
} ISpeechAudioStatusVtbl;

interface ISpeechAudioStatus {
    CONST_VTBL ISpeechAudioStatusVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechAudioStatus_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechAudioStatus_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechAudioStatus_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechAudioStatus_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechAudioStatus_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechAudioStatus_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechAudioStatus_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechAudioStatus methods ***/
#define ISpeechAudioStatus_get_FreeBufferSpace(This,space) (This)->lpVtbl->get_FreeBufferSpace(This,space)
#define ISpeechAudioStatus_get_NonBlockingIO(This,nonblocking) (This)->lpVtbl->get_NonBlockingIO(This,nonblocking)
#define ISpeechAudioStatus_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define ISpeechAudioStatus_get_CurrentSeekPosition(This,position) (This)->lpVtbl->get_CurrentSeekPosition(This,position)
#define ISpeechAudioStatus_get_CurrentDevicePosition(This,position) (This)->lpVtbl->get_CurrentDevicePosition(This,position)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechAudioStatus_QueryInterface(ISpeechAudioStatus* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechAudioStatus_AddRef(ISpeechAudioStatus* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechAudioStatus_Release(ISpeechAudioStatus* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechAudioStatus_GetTypeInfoCount(ISpeechAudioStatus* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechAudioStatus_GetTypeInfo(ISpeechAudioStatus* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechAudioStatus_GetIDsOfNames(ISpeechAudioStatus* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechAudioStatus_Invoke(ISpeechAudioStatus* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechAudioStatus methods ***/
static FORCEINLINE HRESULT ISpeechAudioStatus_get_FreeBufferSpace(ISpeechAudioStatus* This,LONG *space) {
    return This->lpVtbl->get_FreeBufferSpace(This,space);
}
static FORCEINLINE HRESULT ISpeechAudioStatus_get_NonBlockingIO(ISpeechAudioStatus* This,LONG *nonblocking) {
    return This->lpVtbl->get_NonBlockingIO(This,nonblocking);
}
static FORCEINLINE HRESULT ISpeechAudioStatus_get_State(ISpeechAudioStatus* This,SpeechAudioState *state) {
    return This->lpVtbl->get_State(This,state);
}
static FORCEINLINE HRESULT ISpeechAudioStatus_get_CurrentSeekPosition(ISpeechAudioStatus* This,VARIANT *position) {
    return This->lpVtbl->get_CurrentSeekPosition(This,position);
}
static FORCEINLINE HRESULT ISpeechAudioStatus_get_CurrentDevicePosition(ISpeechAudioStatus* This,VARIANT *position) {
    return This->lpVtbl->get_CurrentDevicePosition(This,position);
}
#endif
#endif

#endif


#endif  /* __ISpeechAudioStatus_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechRecognizerStatus {
    DISPID_SRSAudioStatus = 1,
    DISPID_SRSCurrentStreamPosition = 2,
    DISPID_SRSCurrentStreamNumber = 3,
    DISPID_SRSNumberOfActiveRules = 4,
    DISPID_SRSClsidEngine = 5,
    DISPID_SRSSupportedLanguages = 6
} DISPID_SpeechRecognizerStatus;
/*****************************************************************************
 * ISpeechRecognizerStatus interface
 */
#ifndef __ISpeechRecognizerStatus_INTERFACE_DEFINED__
#define __ISpeechRecognizerStatus_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechRecognizerStatus, 0xbff9e781, 0x53ec, 0x484e, 0xbb,0x8a, 0x0e,0x1b,0x55,0x51,0xe3,0x5c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bff9e781-53ec-484e-bb8a-0e1b5551e35c")
ISpeechRecognizerStatus : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_AudioStatus(
        ISpeechAudioStatus **audio) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CurrentStreamPosition(
        VARIANT *pos) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CurrentStreamNumber(
        LONG *number) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumberOfActiveRules(
        LONG *rules) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ClsidEngine(
        BSTR *clsid) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_SupportedLanguages(
        VARIANT *languages) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechRecognizerStatus, 0xbff9e781, 0x53ec, 0x484e, 0xbb,0x8a, 0x0e,0x1b,0x55,0x51,0xe3,0x5c)
#endif
#else
typedef struct ISpeechRecognizerStatusVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechRecognizerStatus *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechRecognizerStatus *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechRecognizerStatus *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechRecognizerStatus *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechRecognizerStatus methods ***/
    HRESULT (STDMETHODCALLTYPE *get_AudioStatus)(
        ISpeechRecognizerStatus *This,
        ISpeechAudioStatus **audio);

    HRESULT (STDMETHODCALLTYPE *get_CurrentStreamPosition)(
        ISpeechRecognizerStatus *This,
        VARIANT *pos);

    HRESULT (STDMETHODCALLTYPE *get_CurrentStreamNumber)(
        ISpeechRecognizerStatus *This,
        LONG *number);

    HRESULT (STDMETHODCALLTYPE *get_NumberOfActiveRules)(
        ISpeechRecognizerStatus *This,
        LONG *rules);

    HRESULT (STDMETHODCALLTYPE *get_ClsidEngine)(
        ISpeechRecognizerStatus *This,
        BSTR *clsid);

    HRESULT (STDMETHODCALLTYPE *get_SupportedLanguages)(
        ISpeechRecognizerStatus *This,
        VARIANT *languages);

    END_INTERFACE
} ISpeechRecognizerStatusVtbl;

interface ISpeechRecognizerStatus {
    CONST_VTBL ISpeechRecognizerStatusVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechRecognizerStatus_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechRecognizerStatus_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechRecognizerStatus_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechRecognizerStatus_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechRecognizerStatus_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechRecognizerStatus_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechRecognizerStatus_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechRecognizerStatus methods ***/
#define ISpeechRecognizerStatus_get_AudioStatus(This,audio) (This)->lpVtbl->get_AudioStatus(This,audio)
#define ISpeechRecognizerStatus_get_CurrentStreamPosition(This,pos) (This)->lpVtbl->get_CurrentStreamPosition(This,pos)
#define ISpeechRecognizerStatus_get_CurrentStreamNumber(This,number) (This)->lpVtbl->get_CurrentStreamNumber(This,number)
#define ISpeechRecognizerStatus_get_NumberOfActiveRules(This,rules) (This)->lpVtbl->get_NumberOfActiveRules(This,rules)
#define ISpeechRecognizerStatus_get_ClsidEngine(This,clsid) (This)->lpVtbl->get_ClsidEngine(This,clsid)
#define ISpeechRecognizerStatus_get_SupportedLanguages(This,languages) (This)->lpVtbl->get_SupportedLanguages(This,languages)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechRecognizerStatus_QueryInterface(ISpeechRecognizerStatus* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechRecognizerStatus_AddRef(ISpeechRecognizerStatus* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechRecognizerStatus_Release(ISpeechRecognizerStatus* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechRecognizerStatus_GetTypeInfoCount(ISpeechRecognizerStatus* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechRecognizerStatus_GetTypeInfo(ISpeechRecognizerStatus* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechRecognizerStatus_GetIDsOfNames(ISpeechRecognizerStatus* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechRecognizerStatus_Invoke(ISpeechRecognizerStatus* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechRecognizerStatus methods ***/
static FORCEINLINE HRESULT ISpeechRecognizerStatus_get_AudioStatus(ISpeechRecognizerStatus* This,ISpeechAudioStatus **audio) {
    return This->lpVtbl->get_AudioStatus(This,audio);
}
static FORCEINLINE HRESULT ISpeechRecognizerStatus_get_CurrentStreamPosition(ISpeechRecognizerStatus* This,VARIANT *pos) {
    return This->lpVtbl->get_CurrentStreamPosition(This,pos);
}
static FORCEINLINE HRESULT ISpeechRecognizerStatus_get_CurrentStreamNumber(ISpeechRecognizerStatus* This,LONG *number) {
    return This->lpVtbl->get_CurrentStreamNumber(This,number);
}
static FORCEINLINE HRESULT ISpeechRecognizerStatus_get_NumberOfActiveRules(ISpeechRecognizerStatus* This,LONG *rules) {
    return This->lpVtbl->get_NumberOfActiveRules(This,rules);
}
static FORCEINLINE HRESULT ISpeechRecognizerStatus_get_ClsidEngine(ISpeechRecognizerStatus* This,BSTR *clsid) {
    return This->lpVtbl->get_ClsidEngine(This,clsid);
}
static FORCEINLINE HRESULT ISpeechRecognizerStatus_get_SupportedLanguages(ISpeechRecognizerStatus* This,VARIANT *languages) {
    return This->lpVtbl->get_SupportedLanguages(This,languages);
}
#endif
#endif

#endif


#endif  /* __ISpeechRecognizerStatus_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechVoiceStatus {
    DISPID_SVSCurrentStreamNumber = 1,
    DISPID_SVSLastStreamNumberQueued = 2,
    DISPID_SVSLastResult = 3,
    DISPID_SVSRunningState = 4,
    DISPID_SVSInputWordPosition = 5,
    DISPID_SVSInputWordLength = 6,
    DISPID_SVSInputSentencePosition = 7,
    DISPID_SVSInputSentenceLength = 8,
    DISPID_SVSLastBookmark = 9,
    DISPID_SVSLastBookmarkId = 10,
    DISPID_SVSPhonemeId = 11,
    DISPID_SVSVisemeId = 12
} DISPID_SpeechVoiceStatus;
/*****************************************************************************
 * ISpeechVoiceStatus interface
 */
#ifndef __ISpeechVoiceStatus_INTERFACE_DEFINED__
#define __ISpeechVoiceStatus_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechVoiceStatus, 0x8be47b07, 0x57f6, 0x11d2, 0x9e,0xee, 0x00,0xc0,0x4f,0x79,0x73,0x96);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8be47b07-57f6-11d2-9eee-00c04f797396")
ISpeechVoiceStatus : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_CurrentStreamNumber(
        LONG *number) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LastStreamNumberQueued(
        LONG *number) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LastHResult(
        LONG *result) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RunningState(
        SpeechRunState *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_InputWordPosition(
        LONG *position) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_InputWordLength(
        LONG *length) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_InputSentencePosition(
        LONG *position) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_InputSentenceLength(
        LONG *length) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LastBookmark(
        BSTR *bookmark) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LastBookmarkId(
        LONG *bookmark) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PhonemeId(
        short *phone) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_VisemeId(
        short *id) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechVoiceStatus, 0x8be47b07, 0x57f6, 0x11d2, 0x9e,0xee, 0x00,0xc0,0x4f,0x79,0x73,0x96)
#endif
#else
typedef struct ISpeechVoiceStatusVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechVoiceStatus *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechVoiceStatus *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechVoiceStatus *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechVoiceStatus *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechVoiceStatus methods ***/
    HRESULT (STDMETHODCALLTYPE *get_CurrentStreamNumber)(
        ISpeechVoiceStatus *This,
        LONG *number);

    HRESULT (STDMETHODCALLTYPE *get_LastStreamNumberQueued)(
        ISpeechVoiceStatus *This,
        LONG *number);

    HRESULT (STDMETHODCALLTYPE *get_LastHResult)(
        ISpeechVoiceStatus *This,
        LONG *result);

    HRESULT (STDMETHODCALLTYPE *get_RunningState)(
        ISpeechVoiceStatus *This,
        SpeechRunState *state);

    HRESULT (STDMETHODCALLTYPE *get_InputWordPosition)(
        ISpeechVoiceStatus *This,
        LONG *position);

    HRESULT (STDMETHODCALLTYPE *get_InputWordLength)(
        ISpeechVoiceStatus *This,
        LONG *length);

    HRESULT (STDMETHODCALLTYPE *get_InputSentencePosition)(
        ISpeechVoiceStatus *This,
        LONG *position);

    HRESULT (STDMETHODCALLTYPE *get_InputSentenceLength)(
        ISpeechVoiceStatus *This,
        LONG *length);

    HRESULT (STDMETHODCALLTYPE *get_LastBookmark)(
        ISpeechVoiceStatus *This,
        BSTR *bookmark);

    HRESULT (STDMETHODCALLTYPE *get_LastBookmarkId)(
        ISpeechVoiceStatus *This,
        LONG *bookmark);

    HRESULT (STDMETHODCALLTYPE *get_PhonemeId)(
        ISpeechVoiceStatus *This,
        short *phone);

    HRESULT (STDMETHODCALLTYPE *get_VisemeId)(
        ISpeechVoiceStatus *This,
        short *id);

    END_INTERFACE
} ISpeechVoiceStatusVtbl;

interface ISpeechVoiceStatus {
    CONST_VTBL ISpeechVoiceStatusVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechVoiceStatus_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechVoiceStatus_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechVoiceStatus_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechVoiceStatus_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechVoiceStatus_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechVoiceStatus_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechVoiceStatus_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechVoiceStatus methods ***/
#define ISpeechVoiceStatus_get_CurrentStreamNumber(This,number) (This)->lpVtbl->get_CurrentStreamNumber(This,number)
#define ISpeechVoiceStatus_get_LastStreamNumberQueued(This,number) (This)->lpVtbl->get_LastStreamNumberQueued(This,number)
#define ISpeechVoiceStatus_get_LastHResult(This,result) (This)->lpVtbl->get_LastHResult(This,result)
#define ISpeechVoiceStatus_get_RunningState(This,state) (This)->lpVtbl->get_RunningState(This,state)
#define ISpeechVoiceStatus_get_InputWordPosition(This,position) (This)->lpVtbl->get_InputWordPosition(This,position)
#define ISpeechVoiceStatus_get_InputWordLength(This,length) (This)->lpVtbl->get_InputWordLength(This,length)
#define ISpeechVoiceStatus_get_InputSentencePosition(This,position) (This)->lpVtbl->get_InputSentencePosition(This,position)
#define ISpeechVoiceStatus_get_InputSentenceLength(This,length) (This)->lpVtbl->get_InputSentenceLength(This,length)
#define ISpeechVoiceStatus_get_LastBookmark(This,bookmark) (This)->lpVtbl->get_LastBookmark(This,bookmark)
#define ISpeechVoiceStatus_get_LastBookmarkId(This,bookmark) (This)->lpVtbl->get_LastBookmarkId(This,bookmark)
#define ISpeechVoiceStatus_get_PhonemeId(This,phone) (This)->lpVtbl->get_PhonemeId(This,phone)
#define ISpeechVoiceStatus_get_VisemeId(This,id) (This)->lpVtbl->get_VisemeId(This,id)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechVoiceStatus_QueryInterface(ISpeechVoiceStatus* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechVoiceStatus_AddRef(ISpeechVoiceStatus* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechVoiceStatus_Release(ISpeechVoiceStatus* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechVoiceStatus_GetTypeInfoCount(ISpeechVoiceStatus* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_GetTypeInfo(ISpeechVoiceStatus* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_GetIDsOfNames(ISpeechVoiceStatus* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_Invoke(ISpeechVoiceStatus* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechVoiceStatus methods ***/
static FORCEINLINE HRESULT ISpeechVoiceStatus_get_CurrentStreamNumber(ISpeechVoiceStatus* This,LONG *number) {
    return This->lpVtbl->get_CurrentStreamNumber(This,number);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_get_LastStreamNumberQueued(ISpeechVoiceStatus* This,LONG *number) {
    return This->lpVtbl->get_LastStreamNumberQueued(This,number);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_get_LastHResult(ISpeechVoiceStatus* This,LONG *result) {
    return This->lpVtbl->get_LastHResult(This,result);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_get_RunningState(ISpeechVoiceStatus* This,SpeechRunState *state) {
    return This->lpVtbl->get_RunningState(This,state);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_get_InputWordPosition(ISpeechVoiceStatus* This,LONG *position) {
    return This->lpVtbl->get_InputWordPosition(This,position);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_get_InputWordLength(ISpeechVoiceStatus* This,LONG *length) {
    return This->lpVtbl->get_InputWordLength(This,length);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_get_InputSentencePosition(ISpeechVoiceStatus* This,LONG *position) {
    return This->lpVtbl->get_InputSentencePosition(This,position);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_get_InputSentenceLength(ISpeechVoiceStatus* This,LONG *length) {
    return This->lpVtbl->get_InputSentenceLength(This,length);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_get_LastBookmark(ISpeechVoiceStatus* This,BSTR *bookmark) {
    return This->lpVtbl->get_LastBookmark(This,bookmark);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_get_LastBookmarkId(ISpeechVoiceStatus* This,LONG *bookmark) {
    return This->lpVtbl->get_LastBookmarkId(This,bookmark);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_get_PhonemeId(ISpeechVoiceStatus* This,short *phone) {
    return This->lpVtbl->get_PhonemeId(This,phone);
}
static FORCEINLINE HRESULT ISpeechVoiceStatus_get_VisemeId(ISpeechVoiceStatus* This,short *id) {
    return This->lpVtbl->get_VisemeId(This,id);
}
#endif
#endif

#endif


#endif  /* __ISpeechVoiceStatus_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechVoice {
    DISPID_SVStatus = 1,
    DISPID_SVVoice = 2,
    DISPID_SVAudioOutput = 3,
    DISPID_SVAudioOutputStream = 4,
    DISPID_SVRate = 5,
    DISPID_SVVolume = 6,
    DISPID_SVAllowAudioOuputFormatChangesOnNextSet = 7,
    DISPID_SVEventInterests = 8,
    DISPID_SVPriority = 9,
    DISPID_SVAlertBoundary = 10,
    DISPID_SVSyncronousSpeakTimeout = 11,
    DISPID_SVSpeak = 12,
    DISPID_SVSpeakStream = 13,
    DISPID_SVPause = 14,
    DISPID_SVResume = 15,
    DISPID_SVSkip = 16,
    DISPID_SVGetVoices = 17,
    DISPID_SVGetAudioOutputs = 18,
    DISPID_SVWaitUntilDone = 19,
    DISPID_SVSpeakCompleteEvent = 20,
    DISPID_SVIsUISupported = 21,
    DISPID_SVDisplayUI = 22
} DISPID_SpeechVoice;
/*****************************************************************************
 * ISpeechVoice interface
 */
#ifndef __ISpeechVoice_INTERFACE_DEFINED__
#define __ISpeechVoice_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechVoice, 0x269316d8, 0x57bd, 0x11d2, 0x9e,0xee, 0x00,0xc0,0x4f,0x79,0x73,0x96);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("269316d8-57bd-11d2-9eee-00c04f797396")
ISpeechVoice : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Status(
        ISpeechVoiceStatus **Status) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Voice(
        ISpeechObjectToken **voice) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_Voice(
        ISpeechObjectToken *voice) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioOutput(
        ISpeechObjectToken **output) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_AudioOutput(
        ISpeechObjectToken *output) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioOutputStream(
        ISpeechBaseStream **output) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_AudioOutputStream(
        ISpeechBaseStream *output) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Rate(
        LONG *rate) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Rate(
        LONG rate) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Volume(
        LONG *volume) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Volume(
        LONG volume) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_AllowAudioOutputFormatChangesOnNextSet(
        VARIANT_BOOL allow) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AllowAudioOutputFormatChangesOnNextSet(
        VARIANT_BOOL *allow) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EventInterests(
        SpeechVoiceEvents *flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_EventInterests(
        SpeechVoiceEvents flags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Priority(
        SpeechVoicePriority vpriority) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Priority(
        SpeechVoicePriority *vpriority) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_AlertBoundary(
        SpeechVoiceEvents boundary) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AlertBoundary(
        SpeechVoiceEvents *boundary) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_SynchronousSpeakTimeout(
        LONG timeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_SynchronousSpeakTimeout(
        LONG *timeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE Speak(
        BSTR text,
        SpeechVoiceSpeakFlags flags,
        LONG *number) = 0;

    virtual HRESULT STDMETHODCALLTYPE SpeakStream(
        ISpeechBaseStream *stream,
        SpeechVoiceSpeakFlags flags,
        LONG *number) = 0;

    virtual HRESULT STDMETHODCALLTYPE Pause(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        const BSTR type,
        LONG items,
        LONG *skipped) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVoices(
        BSTR required,
        BSTR optional,
        ISpeechObjectTokens **tokens) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAudioOutputs(
        BSTR required,
        BSTR optional,
        ISpeechObjectTokens **tokens) = 0;

    virtual HRESULT STDMETHODCALLTYPE WaitUntilDone(
        LONG msTimeout,
        VARIANT_BOOL *done) = 0;

    virtual HRESULT STDMETHODCALLTYPE SpeakCompleteEvent(
        LONG *handle) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsUISupported(
        const BSTR typeui,
        const VARIANT *data,
        VARIANT_BOOL *supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisplayUI(
        LONG hwnd,
        BSTR title,
        const BSTR typeui,
        const VARIANT *data = 0) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechVoice, 0x269316d8, 0x57bd, 0x11d2, 0x9e,0xee, 0x00,0xc0,0x4f,0x79,0x73,0x96)
#endif
#else
typedef struct ISpeechVoiceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechVoice *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechVoice *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechVoice *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechVoice *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechVoice methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Status)(
        ISpeechVoice *This,
        ISpeechVoiceStatus **Status);

    HRESULT (STDMETHODCALLTYPE *get_Voice)(
        ISpeechVoice *This,
        ISpeechObjectToken **voice);

    HRESULT (STDMETHODCALLTYPE *putref_Voice)(
        ISpeechVoice *This,
        ISpeechObjectToken *voice);

    HRESULT (STDMETHODCALLTYPE *get_AudioOutput)(
        ISpeechVoice *This,
        ISpeechObjectToken **output);

    HRESULT (STDMETHODCALLTYPE *putref_AudioOutput)(
        ISpeechVoice *This,
        ISpeechObjectToken *output);

    HRESULT (STDMETHODCALLTYPE *get_AudioOutputStream)(
        ISpeechVoice *This,
        ISpeechBaseStream **output);

    HRESULT (STDMETHODCALLTYPE *putref_AudioOutputStream)(
        ISpeechVoice *This,
        ISpeechBaseStream *output);

    HRESULT (STDMETHODCALLTYPE *get_Rate)(
        ISpeechVoice *This,
        LONG *rate);

    HRESULT (STDMETHODCALLTYPE *put_Rate)(
        ISpeechVoice *This,
        LONG rate);

    HRESULT (STDMETHODCALLTYPE *get_Volume)(
        ISpeechVoice *This,
        LONG *volume);

    HRESULT (STDMETHODCALLTYPE *put_Volume)(
        ISpeechVoice *This,
        LONG volume);

    HRESULT (STDMETHODCALLTYPE *put_AllowAudioOutputFormatChangesOnNextSet)(
        ISpeechVoice *This,
        VARIANT_BOOL allow);

    HRESULT (STDMETHODCALLTYPE *get_AllowAudioOutputFormatChangesOnNextSet)(
        ISpeechVoice *This,
        VARIANT_BOOL *allow);

    HRESULT (STDMETHODCALLTYPE *get_EventInterests)(
        ISpeechVoice *This,
        SpeechVoiceEvents *flags);

    HRESULT (STDMETHODCALLTYPE *put_EventInterests)(
        ISpeechVoice *This,
        SpeechVoiceEvents flags);

    HRESULT (STDMETHODCALLTYPE *put_Priority)(
        ISpeechVoice *This,
        SpeechVoicePriority vpriority);

    HRESULT (STDMETHODCALLTYPE *get_Priority)(
        ISpeechVoice *This,
        SpeechVoicePriority *vpriority);

    HRESULT (STDMETHODCALLTYPE *put_AlertBoundary)(
        ISpeechVoice *This,
        SpeechVoiceEvents boundary);

    HRESULT (STDMETHODCALLTYPE *get_AlertBoundary)(
        ISpeechVoice *This,
        SpeechVoiceEvents *boundary);

    HRESULT (STDMETHODCALLTYPE *put_SynchronousSpeakTimeout)(
        ISpeechVoice *This,
        LONG timeout);

    HRESULT (STDMETHODCALLTYPE *get_SynchronousSpeakTimeout)(
        ISpeechVoice *This,
        LONG *timeout);

    HRESULT (STDMETHODCALLTYPE *Speak)(
        ISpeechVoice *This,
        BSTR text,
        SpeechVoiceSpeakFlags flags,
        LONG *number);

    HRESULT (STDMETHODCALLTYPE *SpeakStream)(
        ISpeechVoice *This,
        ISpeechBaseStream *stream,
        SpeechVoiceSpeakFlags flags,
        LONG *number);

    HRESULT (STDMETHODCALLTYPE *Pause)(
        ISpeechVoice *This);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        ISpeechVoice *This);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        ISpeechVoice *This,
        const BSTR type,
        LONG items,
        LONG *skipped);

    HRESULT (STDMETHODCALLTYPE *GetVoices)(
        ISpeechVoice *This,
        BSTR required,
        BSTR optional,
        ISpeechObjectTokens **tokens);

    HRESULT (STDMETHODCALLTYPE *GetAudioOutputs)(
        ISpeechVoice *This,
        BSTR required,
        BSTR optional,
        ISpeechObjectTokens **tokens);

    HRESULT (STDMETHODCALLTYPE *WaitUntilDone)(
        ISpeechVoice *This,
        LONG msTimeout,
        VARIANT_BOOL *done);

    HRESULT (STDMETHODCALLTYPE *SpeakCompleteEvent)(
        ISpeechVoice *This,
        LONG *handle);

    HRESULT (STDMETHODCALLTYPE *IsUISupported)(
        ISpeechVoice *This,
        const BSTR typeui,
        const VARIANT *data,
        VARIANT_BOOL *supported);

    HRESULT (STDMETHODCALLTYPE *DisplayUI)(
        ISpeechVoice *This,
        LONG hwnd,
        BSTR title,
        const BSTR typeui,
        const VARIANT *data);

    END_INTERFACE
} ISpeechVoiceVtbl;

interface ISpeechVoice {
    CONST_VTBL ISpeechVoiceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechVoice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechVoice_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechVoice_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechVoice_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechVoice_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechVoice_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechVoice_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechVoice methods ***/
#define ISpeechVoice_get_Status(This,Status) (This)->lpVtbl->get_Status(This,Status)
#define ISpeechVoice_get_Voice(This,voice) (This)->lpVtbl->get_Voice(This,voice)
#define ISpeechVoice_putref_Voice(This,voice) (This)->lpVtbl->putref_Voice(This,voice)
#define ISpeechVoice_get_AudioOutput(This,output) (This)->lpVtbl->get_AudioOutput(This,output)
#define ISpeechVoice_putref_AudioOutput(This,output) (This)->lpVtbl->putref_AudioOutput(This,output)
#define ISpeechVoice_get_AudioOutputStream(This,output) (This)->lpVtbl->get_AudioOutputStream(This,output)
#define ISpeechVoice_putref_AudioOutputStream(This,output) (This)->lpVtbl->putref_AudioOutputStream(This,output)
#define ISpeechVoice_get_Rate(This,rate) (This)->lpVtbl->get_Rate(This,rate)
#define ISpeechVoice_put_Rate(This,rate) (This)->lpVtbl->put_Rate(This,rate)
#define ISpeechVoice_get_Volume(This,volume) (This)->lpVtbl->get_Volume(This,volume)
#define ISpeechVoice_put_Volume(This,volume) (This)->lpVtbl->put_Volume(This,volume)
#define ISpeechVoice_put_AllowAudioOutputFormatChangesOnNextSet(This,allow) (This)->lpVtbl->put_AllowAudioOutputFormatChangesOnNextSet(This,allow)
#define ISpeechVoice_get_AllowAudioOutputFormatChangesOnNextSet(This,allow) (This)->lpVtbl->get_AllowAudioOutputFormatChangesOnNextSet(This,allow)
#define ISpeechVoice_get_EventInterests(This,flags) (This)->lpVtbl->get_EventInterests(This,flags)
#define ISpeechVoice_put_EventInterests(This,flags) (This)->lpVtbl->put_EventInterests(This,flags)
#define ISpeechVoice_put_Priority(This,vpriority) (This)->lpVtbl->put_Priority(This,vpriority)
#define ISpeechVoice_get_Priority(This,vpriority) (This)->lpVtbl->get_Priority(This,vpriority)
#define ISpeechVoice_put_AlertBoundary(This,boundary) (This)->lpVtbl->put_AlertBoundary(This,boundary)
#define ISpeechVoice_get_AlertBoundary(This,boundary) (This)->lpVtbl->get_AlertBoundary(This,boundary)
#define ISpeechVoice_put_SynchronousSpeakTimeout(This,timeout) (This)->lpVtbl->put_SynchronousSpeakTimeout(This,timeout)
#define ISpeechVoice_get_SynchronousSpeakTimeout(This,timeout) (This)->lpVtbl->get_SynchronousSpeakTimeout(This,timeout)
#define ISpeechVoice_Speak(This,text,flags,number) (This)->lpVtbl->Speak(This,text,flags,number)
#define ISpeechVoice_SpeakStream(This,stream,flags,number) (This)->lpVtbl->SpeakStream(This,stream,flags,number)
#define ISpeechVoice_Pause(This) (This)->lpVtbl->Pause(This)
#define ISpeechVoice_Resume(This) (This)->lpVtbl->Resume(This)
#define ISpeechVoice_Skip(This,type,items,skipped) (This)->lpVtbl->Skip(This,type,items,skipped)
#define ISpeechVoice_GetVoices(This,required,optional,tokens) (This)->lpVtbl->GetVoices(This,required,optional,tokens)
#define ISpeechVoice_GetAudioOutputs(This,required,optional,tokens) (This)->lpVtbl->GetAudioOutputs(This,required,optional,tokens)
#define ISpeechVoice_WaitUntilDone(This,msTimeout,done) (This)->lpVtbl->WaitUntilDone(This,msTimeout,done)
#define ISpeechVoice_SpeakCompleteEvent(This,handle) (This)->lpVtbl->SpeakCompleteEvent(This,handle)
#define ISpeechVoice_IsUISupported(This,typeui,data,supported) (This)->lpVtbl->IsUISupported(This,typeui,data,supported)
#define ISpeechVoice_DisplayUI(This,hwnd,title,typeui,data) (This)->lpVtbl->DisplayUI(This,hwnd,title,typeui,data)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechVoice_QueryInterface(ISpeechVoice* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechVoice_AddRef(ISpeechVoice* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechVoice_Release(ISpeechVoice* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechVoice_GetTypeInfoCount(ISpeechVoice* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechVoice_GetTypeInfo(ISpeechVoice* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechVoice_GetIDsOfNames(ISpeechVoice* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechVoice_Invoke(ISpeechVoice* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechVoice methods ***/
static FORCEINLINE HRESULT ISpeechVoice_get_Status(ISpeechVoice* This,ISpeechVoiceStatus **Status) {
    return This->lpVtbl->get_Status(This,Status);
}
static FORCEINLINE HRESULT ISpeechVoice_get_Voice(ISpeechVoice* This,ISpeechObjectToken **voice) {
    return This->lpVtbl->get_Voice(This,voice);
}
static FORCEINLINE HRESULT ISpeechVoice_putref_Voice(ISpeechVoice* This,ISpeechObjectToken *voice) {
    return This->lpVtbl->putref_Voice(This,voice);
}
static FORCEINLINE HRESULT ISpeechVoice_get_AudioOutput(ISpeechVoice* This,ISpeechObjectToken **output) {
    return This->lpVtbl->get_AudioOutput(This,output);
}
static FORCEINLINE HRESULT ISpeechVoice_putref_AudioOutput(ISpeechVoice* This,ISpeechObjectToken *output) {
    return This->lpVtbl->putref_AudioOutput(This,output);
}
static FORCEINLINE HRESULT ISpeechVoice_get_AudioOutputStream(ISpeechVoice* This,ISpeechBaseStream **output) {
    return This->lpVtbl->get_AudioOutputStream(This,output);
}
static FORCEINLINE HRESULT ISpeechVoice_putref_AudioOutputStream(ISpeechVoice* This,ISpeechBaseStream *output) {
    return This->lpVtbl->putref_AudioOutputStream(This,output);
}
static FORCEINLINE HRESULT ISpeechVoice_get_Rate(ISpeechVoice* This,LONG *rate) {
    return This->lpVtbl->get_Rate(This,rate);
}
static FORCEINLINE HRESULT ISpeechVoice_put_Rate(ISpeechVoice* This,LONG rate) {
    return This->lpVtbl->put_Rate(This,rate);
}
static FORCEINLINE HRESULT ISpeechVoice_get_Volume(ISpeechVoice* This,LONG *volume) {
    return This->lpVtbl->get_Volume(This,volume);
}
static FORCEINLINE HRESULT ISpeechVoice_put_Volume(ISpeechVoice* This,LONG volume) {
    return This->lpVtbl->put_Volume(This,volume);
}
static FORCEINLINE HRESULT ISpeechVoice_put_AllowAudioOutputFormatChangesOnNextSet(ISpeechVoice* This,VARIANT_BOOL allow) {
    return This->lpVtbl->put_AllowAudioOutputFormatChangesOnNextSet(This,allow);
}
static FORCEINLINE HRESULT ISpeechVoice_get_AllowAudioOutputFormatChangesOnNextSet(ISpeechVoice* This,VARIANT_BOOL *allow) {
    return This->lpVtbl->get_AllowAudioOutputFormatChangesOnNextSet(This,allow);
}
static FORCEINLINE HRESULT ISpeechVoice_get_EventInterests(ISpeechVoice* This,SpeechVoiceEvents *flags) {
    return This->lpVtbl->get_EventInterests(This,flags);
}
static FORCEINLINE HRESULT ISpeechVoice_put_EventInterests(ISpeechVoice* This,SpeechVoiceEvents flags) {
    return This->lpVtbl->put_EventInterests(This,flags);
}
static FORCEINLINE HRESULT ISpeechVoice_put_Priority(ISpeechVoice* This,SpeechVoicePriority vpriority) {
    return This->lpVtbl->put_Priority(This,vpriority);
}
static FORCEINLINE HRESULT ISpeechVoice_get_Priority(ISpeechVoice* This,SpeechVoicePriority *vpriority) {
    return This->lpVtbl->get_Priority(This,vpriority);
}
static FORCEINLINE HRESULT ISpeechVoice_put_AlertBoundary(ISpeechVoice* This,SpeechVoiceEvents boundary) {
    return This->lpVtbl->put_AlertBoundary(This,boundary);
}
static FORCEINLINE HRESULT ISpeechVoice_get_AlertBoundary(ISpeechVoice* This,SpeechVoiceEvents *boundary) {
    return This->lpVtbl->get_AlertBoundary(This,boundary);
}
static FORCEINLINE HRESULT ISpeechVoice_put_SynchronousSpeakTimeout(ISpeechVoice* This,LONG timeout) {
    return This->lpVtbl->put_SynchronousSpeakTimeout(This,timeout);
}
static FORCEINLINE HRESULT ISpeechVoice_get_SynchronousSpeakTimeout(ISpeechVoice* This,LONG *timeout) {
    return This->lpVtbl->get_SynchronousSpeakTimeout(This,timeout);
}
static FORCEINLINE HRESULT ISpeechVoice_Speak(ISpeechVoice* This,BSTR text,SpeechVoiceSpeakFlags flags,LONG *number) {
    return This->lpVtbl->Speak(This,text,flags,number);
}
static FORCEINLINE HRESULT ISpeechVoice_SpeakStream(ISpeechVoice* This,ISpeechBaseStream *stream,SpeechVoiceSpeakFlags flags,LONG *number) {
    return This->lpVtbl->SpeakStream(This,stream,flags,number);
}
static FORCEINLINE HRESULT ISpeechVoice_Pause(ISpeechVoice* This) {
    return This->lpVtbl->Pause(This);
}
static FORCEINLINE HRESULT ISpeechVoice_Resume(ISpeechVoice* This) {
    return This->lpVtbl->Resume(This);
}
static FORCEINLINE HRESULT ISpeechVoice_Skip(ISpeechVoice* This,const BSTR type,LONG items,LONG *skipped) {
    return This->lpVtbl->Skip(This,type,items,skipped);
}
static FORCEINLINE HRESULT ISpeechVoice_GetVoices(ISpeechVoice* This,BSTR required,BSTR optional,ISpeechObjectTokens **tokens) {
    return This->lpVtbl->GetVoices(This,required,optional,tokens);
}
static FORCEINLINE HRESULT ISpeechVoice_GetAudioOutputs(ISpeechVoice* This,BSTR required,BSTR optional,ISpeechObjectTokens **tokens) {
    return This->lpVtbl->GetAudioOutputs(This,required,optional,tokens);
}
static FORCEINLINE HRESULT ISpeechVoice_WaitUntilDone(ISpeechVoice* This,LONG msTimeout,VARIANT_BOOL *done) {
    return This->lpVtbl->WaitUntilDone(This,msTimeout,done);
}
static FORCEINLINE HRESULT ISpeechVoice_SpeakCompleteEvent(ISpeechVoice* This,LONG *handle) {
    return This->lpVtbl->SpeakCompleteEvent(This,handle);
}
static FORCEINLINE HRESULT ISpeechVoice_IsUISupported(ISpeechVoice* This,const BSTR typeui,const VARIANT *data,VARIANT_BOOL *supported) {
    return This->lpVtbl->IsUISupported(This,typeui,data,supported);
}
static FORCEINLINE HRESULT ISpeechVoice_DisplayUI(ISpeechVoice* This,LONG hwnd,BSTR title,const BSTR typeui,const VARIANT *data) {
    return This->lpVtbl->DisplayUI(This,hwnd,title,typeui,data);
}
#endif
#endif

#endif


#endif  /* __ISpeechVoice_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechRecoResultTimes {
    DISPID_SRRTStreamTime = 1,
    DISPID_SRRTLength = 2,
    DISPID_SRRTTickCount = 3,
    DISPID_SRRTOffsetFromStart = 4
} DISPID_SpeechRecoResultTimes;
/*****************************************************************************
 * ISpeechRecoResultTimes interface
 */
#ifndef __ISpeechRecoResultTimes_INTERFACE_DEFINED__
#define __ISpeechRecoResultTimes_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechRecoResultTimes, 0x62b3b8fb, 0xf6e7, 0x41be, 0xbd,0xcb, 0x05,0x6b,0x1c,0x29,0xef,0xc0);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("62b3b8fb-f6e7-41be-bdcb-056b1c29efc0")
ISpeechRecoResultTimes : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_StreamTime(
        VARIANT *streamtime) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Length(
        VARIANT *length) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_TickCount(
        LONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_OffsetFromStart(
        VARIANT *offset) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechRecoResultTimes, 0x62b3b8fb, 0xf6e7, 0x41be, 0xbd,0xcb, 0x05,0x6b,0x1c,0x29,0xef,0xc0)
#endif
#else
typedef struct ISpeechRecoResultTimesVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechRecoResultTimes *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechRecoResultTimes *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechRecoResultTimes *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechRecoResultTimes *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechRecoResultTimes methods ***/
    HRESULT (STDMETHODCALLTYPE *get_StreamTime)(
        ISpeechRecoResultTimes *This,
        VARIANT *streamtime);

    HRESULT (STDMETHODCALLTYPE *get_Length)(
        ISpeechRecoResultTimes *This,
        VARIANT *length);

    HRESULT (STDMETHODCALLTYPE *get_TickCount)(
        ISpeechRecoResultTimes *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *get_OffsetFromStart)(
        ISpeechRecoResultTimes *This,
        VARIANT *offset);

    END_INTERFACE
} ISpeechRecoResultTimesVtbl;

interface ISpeechRecoResultTimes {
    CONST_VTBL ISpeechRecoResultTimesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechRecoResultTimes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechRecoResultTimes_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechRecoResultTimes_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechRecoResultTimes_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechRecoResultTimes_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechRecoResultTimes_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechRecoResultTimes_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechRecoResultTimes methods ***/
#define ISpeechRecoResultTimes_get_StreamTime(This,streamtime) (This)->lpVtbl->get_StreamTime(This,streamtime)
#define ISpeechRecoResultTimes_get_Length(This,length) (This)->lpVtbl->get_Length(This,length)
#define ISpeechRecoResultTimes_get_TickCount(This,count) (This)->lpVtbl->get_TickCount(This,count)
#define ISpeechRecoResultTimes_get_OffsetFromStart(This,offset) (This)->lpVtbl->get_OffsetFromStart(This,offset)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechRecoResultTimes_QueryInterface(ISpeechRecoResultTimes* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechRecoResultTimes_AddRef(ISpeechRecoResultTimes* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechRecoResultTimes_Release(ISpeechRecoResultTimes* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechRecoResultTimes_GetTypeInfoCount(ISpeechRecoResultTimes* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechRecoResultTimes_GetTypeInfo(ISpeechRecoResultTimes* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechRecoResultTimes_GetIDsOfNames(ISpeechRecoResultTimes* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechRecoResultTimes_Invoke(ISpeechRecoResultTimes* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechRecoResultTimes methods ***/
static FORCEINLINE HRESULT ISpeechRecoResultTimes_get_StreamTime(ISpeechRecoResultTimes* This,VARIANT *streamtime) {
    return This->lpVtbl->get_StreamTime(This,streamtime);
}
static FORCEINLINE HRESULT ISpeechRecoResultTimes_get_Length(ISpeechRecoResultTimes* This,VARIANT *length) {
    return This->lpVtbl->get_Length(This,length);
}
static FORCEINLINE HRESULT ISpeechRecoResultTimes_get_TickCount(ISpeechRecoResultTimes* This,LONG *count) {
    return This->lpVtbl->get_TickCount(This,count);
}
static FORCEINLINE HRESULT ISpeechRecoResultTimes_get_OffsetFromStart(ISpeechRecoResultTimes* This,VARIANT *offset) {
    return This->lpVtbl->get_OffsetFromStart(This,offset);
}
#endif
#endif

#endif


#endif  /* __ISpeechRecoResultTimes_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechPhraseRules {
    DISPID_SPRulesCount = 1,
    DISPID_SPRulesItem = DISPID_VALUE,
    DISPID_SPRules_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseRules;
/*****************************************************************************
 * ISpeechPhraseRules interface
 */
#ifndef __ISpeechPhraseRules_INTERFACE_DEFINED__
#define __ISpeechPhraseRules_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhraseRules, 0x9047d593, 0x01dd, 0x4b72, 0x81,0xa3, 0xe4,0xa0,0xca,0x69,0xf4,0x07);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9047d593-01dd-4b72-81a3-e4a0ca69f407")
ISpeechPhraseRules : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        LONG index,
        ISpeechPhraseRule **rule) = 0;

    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
        IUnknown **obj) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhraseRules, 0x9047d593, 0x01dd, 0x4b72, 0x81,0xa3, 0xe4,0xa0,0xca,0x69,0xf4,0x07)
#endif
#else
typedef struct ISpeechPhraseRulesVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechPhraseRules *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechPhraseRules *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechPhraseRules *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechPhraseRules *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechPhraseRules methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        ISpeechPhraseRules *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *Item)(
        ISpeechPhraseRules *This,
        LONG index,
        ISpeechPhraseRule **rule);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechPhraseRules *This,
        IUnknown **obj);

    END_INTERFACE
} ISpeechPhraseRulesVtbl;

interface ISpeechPhraseRules {
    CONST_VTBL ISpeechPhraseRulesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhraseRules_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhraseRules_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhraseRules_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhraseRules_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhraseRules_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhraseRules_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhraseRules_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhraseRules methods ***/
#define ISpeechPhraseRules_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define ISpeechPhraseRules_Item(This,index,rule) (This)->lpVtbl->Item(This,index,rule)
#define ISpeechPhraseRules_get__NewEnum(This,obj) (This)->lpVtbl->get__NewEnum(This,obj)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechPhraseRules_QueryInterface(ISpeechPhraseRules* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechPhraseRules_AddRef(ISpeechPhraseRules* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechPhraseRules_Release(ISpeechPhraseRules* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechPhraseRules_GetTypeInfoCount(ISpeechPhraseRules* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechPhraseRules_GetTypeInfo(ISpeechPhraseRules* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechPhraseRules_GetIDsOfNames(ISpeechPhraseRules* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechPhraseRules_Invoke(ISpeechPhraseRules* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechPhraseRules methods ***/
static FORCEINLINE HRESULT ISpeechPhraseRules_get_Count(ISpeechPhraseRules* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static FORCEINLINE HRESULT ISpeechPhraseRules_Item(ISpeechPhraseRules* This,LONG index,ISpeechPhraseRule **rule) {
    return This->lpVtbl->Item(This,index,rule);
}
static FORCEINLINE HRESULT ISpeechPhraseRules_get__NewEnum(ISpeechPhraseRules* This,IUnknown **obj) {
    return This->lpVtbl->get__NewEnum(This,obj);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseRules_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechPhraseRule {
    DISPID_SPRuleName = 1,
    DISPID_SPRuleId = 2,
    DISPID_SPRuleFirstElement = 3,
    DISPID_SPRuleNumberOfElements = 4,
    DISPID_SPRuleParent = 5,
    DISPID_SPRuleChildren = 6,
    DISPID_SPRuleConfidence = 7,
    DISPID_SPRuleEngineConfidence = 8
} DISPID_SpeechPhraseRule;
/*****************************************************************************
 * ISpeechPhraseRule interface
 */
#ifndef __ISpeechPhraseRule_INTERFACE_DEFINED__
#define __ISpeechPhraseRule_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhraseRule, 0xa7bfe112, 0xa4a0, 0x48d9, 0xb6,0x02, 0xc3,0x13,0x84,0x3f,0x69,0x64);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a7bfe112-a4a0-48d9-b602-c313843f6964")
ISpeechPhraseRule : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Name(
        BSTR *name) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Id(
        LONG *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_FirstElement(
        LONG *element) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumberOfElements(
        LONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Parent(
        ISpeechPhraseRule **parent) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Children(
        ISpeechPhraseRules **children) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Confidence(
        SpeechEngineConfidence *confidence) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EngineConfidence(
        float *confidence) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhraseRule, 0xa7bfe112, 0xa4a0, 0x48d9, 0xb6,0x02, 0xc3,0x13,0x84,0x3f,0x69,0x64)
#endif
#else
typedef struct ISpeechPhraseRuleVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechPhraseRule *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechPhraseRule *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechPhraseRule *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechPhraseRule *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechPhraseRule methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Name)(
        ISpeechPhraseRule *This,
        BSTR *name);

    HRESULT (STDMETHODCALLTYPE *get_Id)(
        ISpeechPhraseRule *This,
        LONG *id);

    HRESULT (STDMETHODCALLTYPE *get_FirstElement)(
        ISpeechPhraseRule *This,
        LONG *element);

    HRESULT (STDMETHODCALLTYPE *get_NumberOfElements)(
        ISpeechPhraseRule *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *get_Parent)(
        ISpeechPhraseRule *This,
        ISpeechPhraseRule **parent);

    HRESULT (STDMETHODCALLTYPE *get_Children)(
        ISpeechPhraseRule *This,
        ISpeechPhraseRules **children);

    HRESULT (STDMETHODCALLTYPE *get_Confidence)(
        ISpeechPhraseRule *This,
        SpeechEngineConfidence *confidence);

    HRESULT (STDMETHODCALLTYPE *get_EngineConfidence)(
        ISpeechPhraseRule *This,
        float *confidence);

    END_INTERFACE
} ISpeechPhraseRuleVtbl;

interface ISpeechPhraseRule {
    CONST_VTBL ISpeechPhraseRuleVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhraseRule_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhraseRule_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhraseRule_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhraseRule_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhraseRule_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhraseRule_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhraseRule_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhraseRule methods ***/
#define ISpeechPhraseRule_get_Name(This,name) (This)->lpVtbl->get_Name(This,name)
#define ISpeechPhraseRule_get_Id(This,id) (This)->lpVtbl->get_Id(This,id)
#define ISpeechPhraseRule_get_FirstElement(This,element) (This)->lpVtbl->get_FirstElement(This,element)
#define ISpeechPhraseRule_get_NumberOfElements(This,count) (This)->lpVtbl->get_NumberOfElements(This,count)
#define ISpeechPhraseRule_get_Parent(This,parent) (This)->lpVtbl->get_Parent(This,parent)
#define ISpeechPhraseRule_get_Children(This,children) (This)->lpVtbl->get_Children(This,children)
#define ISpeechPhraseRule_get_Confidence(This,confidence) (This)->lpVtbl->get_Confidence(This,confidence)
#define ISpeechPhraseRule_get_EngineConfidence(This,confidence) (This)->lpVtbl->get_EngineConfidence(This,confidence)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechPhraseRule_QueryInterface(ISpeechPhraseRule* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechPhraseRule_AddRef(ISpeechPhraseRule* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechPhraseRule_Release(ISpeechPhraseRule* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechPhraseRule_GetTypeInfoCount(ISpeechPhraseRule* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechPhraseRule_GetTypeInfo(ISpeechPhraseRule* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechPhraseRule_GetIDsOfNames(ISpeechPhraseRule* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechPhraseRule_Invoke(ISpeechPhraseRule* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechPhraseRule methods ***/
static FORCEINLINE HRESULT ISpeechPhraseRule_get_Name(ISpeechPhraseRule* This,BSTR *name) {
    return This->lpVtbl->get_Name(This,name);
}
static FORCEINLINE HRESULT ISpeechPhraseRule_get_Id(ISpeechPhraseRule* This,LONG *id) {
    return This->lpVtbl->get_Id(This,id);
}
static FORCEINLINE HRESULT ISpeechPhraseRule_get_FirstElement(ISpeechPhraseRule* This,LONG *element) {
    return This->lpVtbl->get_FirstElement(This,element);
}
static FORCEINLINE HRESULT ISpeechPhraseRule_get_NumberOfElements(ISpeechPhraseRule* This,LONG *count) {
    return This->lpVtbl->get_NumberOfElements(This,count);
}
static FORCEINLINE HRESULT ISpeechPhraseRule_get_Parent(ISpeechPhraseRule* This,ISpeechPhraseRule **parent) {
    return This->lpVtbl->get_Parent(This,parent);
}
static FORCEINLINE HRESULT ISpeechPhraseRule_get_Children(ISpeechPhraseRule* This,ISpeechPhraseRules **children) {
    return This->lpVtbl->get_Children(This,children);
}
static FORCEINLINE HRESULT ISpeechPhraseRule_get_Confidence(ISpeechPhraseRule* This,SpeechEngineConfidence *confidence) {
    return This->lpVtbl->get_Confidence(This,confidence);
}
static FORCEINLINE HRESULT ISpeechPhraseRule_get_EngineConfidence(ISpeechPhraseRule* This,float *confidence) {
    return This->lpVtbl->get_EngineConfidence(This,confidence);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseRule_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechPhraseProperty {
    DISPID_SPPName = 1,
    DISPID_SPPId = 2,
    DISPID_SPPValue = 3,
    DISPID_SPPFirstElement = 4,
    DISPID_SPPNumberOfElements = 5,
    DISPID_SPPEngineConfidence = 6,
    DISPID_SPPConfidence = 7,
    DISPID_SPPParent = 8,
    DISPID_SPPChildren = 9
} DISPID_SpeechPhraseProperty;
/*****************************************************************************
 * ISpeechPhraseProperty interface
 */
#ifndef __ISpeechPhraseProperty_INTERFACE_DEFINED__
#define __ISpeechPhraseProperty_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhraseProperty, 0xce563d48, 0x961e, 0x4732, 0xa2,0xe1, 0x37,0x8a,0x42,0xb4,0x30,0xbe);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ce563d48-961e-4732-a2e1-378a42b430be")
ISpeechPhraseProperty : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Name(
        BSTR *name) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Id(
        LONG *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Value(
        VARIANT *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_FirstElement(
        LONG *element) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumberOfElements(
        LONG *elements) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EngineConfidence(
        float *confidence) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Confidence(
        SpeechEngineConfidence *Confidence) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Parent(
        ISpeechPhraseProperty **parent) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Children(
        ISpeechPhraseProperties **children) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhraseProperty, 0xce563d48, 0x961e, 0x4732, 0xa2,0xe1, 0x37,0x8a,0x42,0xb4,0x30,0xbe)
#endif
#else
typedef struct ISpeechPhrasePropertyVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechPhraseProperty *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechPhraseProperty *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechPhraseProperty *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechPhraseProperty *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechPhraseProperty methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Name)(
        ISpeechPhraseProperty *This,
        BSTR *name);

    HRESULT (STDMETHODCALLTYPE *get_Id)(
        ISpeechPhraseProperty *This,
        LONG *id);

    HRESULT (STDMETHODCALLTYPE *get_Value)(
        ISpeechPhraseProperty *This,
        VARIANT *value);

    HRESULT (STDMETHODCALLTYPE *get_FirstElement)(
        ISpeechPhraseProperty *This,
        LONG *element);

    HRESULT (STDMETHODCALLTYPE *get_NumberOfElements)(
        ISpeechPhraseProperty *This,
        LONG *elements);

    HRESULT (STDMETHODCALLTYPE *get_EngineConfidence)(
        ISpeechPhraseProperty *This,
        float *confidence);

    HRESULT (STDMETHODCALLTYPE *get_Confidence)(
        ISpeechPhraseProperty *This,
        SpeechEngineConfidence *Confidence);

    HRESULT (STDMETHODCALLTYPE *get_Parent)(
        ISpeechPhraseProperty *This,
        ISpeechPhraseProperty **parent);

    HRESULT (STDMETHODCALLTYPE *get_Children)(
        ISpeechPhraseProperty *This,
        ISpeechPhraseProperties **children);

    END_INTERFACE
} ISpeechPhrasePropertyVtbl;

interface ISpeechPhraseProperty {
    CONST_VTBL ISpeechPhrasePropertyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhraseProperty_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhraseProperty_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhraseProperty_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhraseProperty_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhraseProperty_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhraseProperty_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhraseProperty_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhraseProperty methods ***/
#define ISpeechPhraseProperty_get_Name(This,name) (This)->lpVtbl->get_Name(This,name)
#define ISpeechPhraseProperty_get_Id(This,id) (This)->lpVtbl->get_Id(This,id)
#define ISpeechPhraseProperty_get_Value(This,value) (This)->lpVtbl->get_Value(This,value)
#define ISpeechPhraseProperty_get_FirstElement(This,element) (This)->lpVtbl->get_FirstElement(This,element)
#define ISpeechPhraseProperty_get_NumberOfElements(This,elements) (This)->lpVtbl->get_NumberOfElements(This,elements)
#define ISpeechPhraseProperty_get_EngineConfidence(This,confidence) (This)->lpVtbl->get_EngineConfidence(This,confidence)
#define ISpeechPhraseProperty_get_Confidence(This,Confidence) (This)->lpVtbl->get_Confidence(This,Confidence)
#define ISpeechPhraseProperty_get_Parent(This,parent) (This)->lpVtbl->get_Parent(This,parent)
#define ISpeechPhraseProperty_get_Children(This,children) (This)->lpVtbl->get_Children(This,children)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechPhraseProperty_QueryInterface(ISpeechPhraseProperty* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechPhraseProperty_AddRef(ISpeechPhraseProperty* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechPhraseProperty_Release(ISpeechPhraseProperty* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechPhraseProperty_GetTypeInfoCount(ISpeechPhraseProperty* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechPhraseProperty_GetTypeInfo(ISpeechPhraseProperty* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechPhraseProperty_GetIDsOfNames(ISpeechPhraseProperty* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechPhraseProperty_Invoke(ISpeechPhraseProperty* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechPhraseProperty methods ***/
static FORCEINLINE HRESULT ISpeechPhraseProperty_get_Name(ISpeechPhraseProperty* This,BSTR *name) {
    return This->lpVtbl->get_Name(This,name);
}
static FORCEINLINE HRESULT ISpeechPhraseProperty_get_Id(ISpeechPhraseProperty* This,LONG *id) {
    return This->lpVtbl->get_Id(This,id);
}
static FORCEINLINE HRESULT ISpeechPhraseProperty_get_Value(ISpeechPhraseProperty* This,VARIANT *value) {
    return This->lpVtbl->get_Value(This,value);
}
static FORCEINLINE HRESULT ISpeechPhraseProperty_get_FirstElement(ISpeechPhraseProperty* This,LONG *element) {
    return This->lpVtbl->get_FirstElement(This,element);
}
static FORCEINLINE HRESULT ISpeechPhraseProperty_get_NumberOfElements(ISpeechPhraseProperty* This,LONG *elements) {
    return This->lpVtbl->get_NumberOfElements(This,elements);
}
static FORCEINLINE HRESULT ISpeechPhraseProperty_get_EngineConfidence(ISpeechPhraseProperty* This,float *confidence) {
    return This->lpVtbl->get_EngineConfidence(This,confidence);
}
static FORCEINLINE HRESULT ISpeechPhraseProperty_get_Confidence(ISpeechPhraseProperty* This,SpeechEngineConfidence *Confidence) {
    return This->lpVtbl->get_Confidence(This,Confidence);
}
static FORCEINLINE HRESULT ISpeechPhraseProperty_get_Parent(ISpeechPhraseProperty* This,ISpeechPhraseProperty **parent) {
    return This->lpVtbl->get_Parent(This,parent);
}
static FORCEINLINE HRESULT ISpeechPhraseProperty_get_Children(ISpeechPhraseProperty* This,ISpeechPhraseProperties **children) {
    return This->lpVtbl->get_Children(This,children);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseProperty_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechPhraseProperties {
    DISPID_SPPsCount = 1,
    DISPID_SPPsItem = DISPID_VALUE,
    DISPID_SPPs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseProperties;
/*****************************************************************************
 * ISpeechPhraseProperties interface
 */
#ifndef __ISpeechPhraseProperties_INTERFACE_DEFINED__
#define __ISpeechPhraseProperties_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhraseProperties, 0x08166b47, 0x102e, 0x4b23, 0xa5,0x99, 0xbd,0xb9,0x8d,0xbf,0xd1,0xf4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("08166b47-102e-4b23-a599-bdb98dbfd1f4")
ISpeechPhraseProperties : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        LONG index,
        ISpeechPhraseProperty **obj) = 0;

    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
        IUnknown **obj) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhraseProperties, 0x08166b47, 0x102e, 0x4b23, 0xa5,0x99, 0xbd,0xb9,0x8d,0xbf,0xd1,0xf4)
#endif
#else
typedef struct ISpeechPhrasePropertiesVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechPhraseProperties *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechPhraseProperties *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechPhraseProperties *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechPhraseProperties *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechPhraseProperties methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        ISpeechPhraseProperties *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *Item)(
        ISpeechPhraseProperties *This,
        LONG index,
        ISpeechPhraseProperty **obj);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechPhraseProperties *This,
        IUnknown **obj);

    END_INTERFACE
} ISpeechPhrasePropertiesVtbl;

interface ISpeechPhraseProperties {
    CONST_VTBL ISpeechPhrasePropertiesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhraseProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhraseProperties_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhraseProperties_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhraseProperties_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhraseProperties_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhraseProperties_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhraseProperties_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhraseProperties methods ***/
#define ISpeechPhraseProperties_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define ISpeechPhraseProperties_Item(This,index,obj) (This)->lpVtbl->Item(This,index,obj)
#define ISpeechPhraseProperties_get__NewEnum(This,obj) (This)->lpVtbl->get__NewEnum(This,obj)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechPhraseProperties_QueryInterface(ISpeechPhraseProperties* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechPhraseProperties_AddRef(ISpeechPhraseProperties* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechPhraseProperties_Release(ISpeechPhraseProperties* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechPhraseProperties_GetTypeInfoCount(ISpeechPhraseProperties* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechPhraseProperties_GetTypeInfo(ISpeechPhraseProperties* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechPhraseProperties_GetIDsOfNames(ISpeechPhraseProperties* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechPhraseProperties_Invoke(ISpeechPhraseProperties* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechPhraseProperties methods ***/
static FORCEINLINE HRESULT ISpeechPhraseProperties_get_Count(ISpeechPhraseProperties* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static FORCEINLINE HRESULT ISpeechPhraseProperties_Item(ISpeechPhraseProperties* This,LONG index,ISpeechPhraseProperty **obj) {
    return This->lpVtbl->Item(This,index,obj);
}
static FORCEINLINE HRESULT ISpeechPhraseProperties_get__NewEnum(ISpeechPhraseProperties* This,IUnknown **obj) {
    return This->lpVtbl->get__NewEnum(This,obj);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseProperties_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechPhraseElement {
    DISPID_SPEAudioTimeOffset = 1,
    DISPID_SPEAudioSizeTime = 2,
    DISPID_SPEAudioStreamOffset = 3,
    DISPID_SPEAudioSizeBytes = 4,
    DISPID_SPERetainedStreamOffset = 5,
    DISPID_SPERetainedSizeBytes = 6,
    DISPID_SPEDisplayText = 7,
    DISPID_SPELexicalForm = 8,
    DISPID_SPEPronunciation = 9,
    DISPID_SPEDisplayAttributes = 10,
    DISPID_SPERequiredConfidence = 11,
    DISPID_SPEActualConfidence = 12,
    DISPID_SPEEngineConfidence = 13
} DISPID_SpeechPhraseElement;
/*****************************************************************************
 * ISpeechPhraseElement interface
 */
#ifndef __ISpeechPhraseElement_INTERFACE_DEFINED__
#define __ISpeechPhraseElement_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhraseElement, 0xe6176f96, 0xe373, 0x4801, 0xb2,0x23, 0x3b,0x62,0xc0,0x68,0xc0,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e6176f96-e373-4801-b223-3b62c068c0b4")
ISpeechPhraseElement : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_AudioTimeOffset(
        LONG *offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioSizeTime(
        LONG *audiotime) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioStreamOffset(
        LONG *offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioSizeBytes(
        LONG *bytes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RetainedStreamOffset(
        LONG *offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RetainedSizeBytes(
        LONG *retained) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DisplayText(
        BSTR *display) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LexicalForm(
        BSTR *lexical) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Pronunciation(
        VARIANT *pronunciation) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DisplayAttributes(
        SpeechDisplayAttributes *attributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RequiredConfidence(
        SpeechEngineConfidence *confidence) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ActualConfidence(
        SpeechEngineConfidence *confidence) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EngineConfidence(
        float *confidence) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhraseElement, 0xe6176f96, 0xe373, 0x4801, 0xb2,0x23, 0x3b,0x62,0xc0,0x68,0xc0,0xb4)
#endif
#else
typedef struct ISpeechPhraseElementVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechPhraseElement *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechPhraseElement *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechPhraseElement *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechPhraseElement *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechPhraseElement methods ***/
    HRESULT (STDMETHODCALLTYPE *get_AudioTimeOffset)(
        ISpeechPhraseElement *This,
        LONG *offset);

    HRESULT (STDMETHODCALLTYPE *get_AudioSizeTime)(
        ISpeechPhraseElement *This,
        LONG *audiotime);

    HRESULT (STDMETHODCALLTYPE *get_AudioStreamOffset)(
        ISpeechPhraseElement *This,
        LONG *offset);

    HRESULT (STDMETHODCALLTYPE *get_AudioSizeBytes)(
        ISpeechPhraseElement *This,
        LONG *bytes);

    HRESULT (STDMETHODCALLTYPE *get_RetainedStreamOffset)(
        ISpeechPhraseElement *This,
        LONG *offset);

    HRESULT (STDMETHODCALLTYPE *get_RetainedSizeBytes)(
        ISpeechPhraseElement *This,
        LONG *retained);

    HRESULT (STDMETHODCALLTYPE *get_DisplayText)(
        ISpeechPhraseElement *This,
        BSTR *display);

    HRESULT (STDMETHODCALLTYPE *get_LexicalForm)(
        ISpeechPhraseElement *This,
        BSTR *lexical);

    HRESULT (STDMETHODCALLTYPE *get_Pronunciation)(
        ISpeechPhraseElement *This,
        VARIANT *pronunciation);

    HRESULT (STDMETHODCALLTYPE *get_DisplayAttributes)(
        ISpeechPhraseElement *This,
        SpeechDisplayAttributes *attributes);

    HRESULT (STDMETHODCALLTYPE *get_RequiredConfidence)(
        ISpeechPhraseElement *This,
        SpeechEngineConfidence *confidence);

    HRESULT (STDMETHODCALLTYPE *get_ActualConfidence)(
        ISpeechPhraseElement *This,
        SpeechEngineConfidence *confidence);

    HRESULT (STDMETHODCALLTYPE *get_EngineConfidence)(
        ISpeechPhraseElement *This,
        float *confidence);

    END_INTERFACE
} ISpeechPhraseElementVtbl;

interface ISpeechPhraseElement {
    CONST_VTBL ISpeechPhraseElementVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhraseElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhraseElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhraseElement_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhraseElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhraseElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhraseElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhraseElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhraseElement methods ***/
#define ISpeechPhraseElement_get_AudioTimeOffset(This,offset) (This)->lpVtbl->get_AudioTimeOffset(This,offset)
#define ISpeechPhraseElement_get_AudioSizeTime(This,audiotime) (This)->lpVtbl->get_AudioSizeTime(This,audiotime)
#define ISpeechPhraseElement_get_AudioStreamOffset(This,offset) (This)->lpVtbl->get_AudioStreamOffset(This,offset)
#define ISpeechPhraseElement_get_AudioSizeBytes(This,bytes) (This)->lpVtbl->get_AudioSizeBytes(This,bytes)
#define ISpeechPhraseElement_get_RetainedStreamOffset(This,offset) (This)->lpVtbl->get_RetainedStreamOffset(This,offset)
#define ISpeechPhraseElement_get_RetainedSizeBytes(This,retained) (This)->lpVtbl->get_RetainedSizeBytes(This,retained)
#define ISpeechPhraseElement_get_DisplayText(This,display) (This)->lpVtbl->get_DisplayText(This,display)
#define ISpeechPhraseElement_get_LexicalForm(This,lexical) (This)->lpVtbl->get_LexicalForm(This,lexical)
#define ISpeechPhraseElement_get_Pronunciation(This,pronunciation) (This)->lpVtbl->get_Pronunciation(This,pronunciation)
#define ISpeechPhraseElement_get_DisplayAttributes(This,attributes) (This)->lpVtbl->get_DisplayAttributes(This,attributes)
#define ISpeechPhraseElement_get_RequiredConfidence(This,confidence) (This)->lpVtbl->get_RequiredConfidence(This,confidence)
#define ISpeechPhraseElement_get_ActualConfidence(This,confidence) (This)->lpVtbl->get_ActualConfidence(This,confidence)
#define ISpeechPhraseElement_get_EngineConfidence(This,confidence) (This)->lpVtbl->get_EngineConfidence(This,confidence)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechPhraseElement_QueryInterface(ISpeechPhraseElement* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechPhraseElement_AddRef(ISpeechPhraseElement* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechPhraseElement_Release(ISpeechPhraseElement* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechPhraseElement_GetTypeInfoCount(ISpeechPhraseElement* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_GetTypeInfo(ISpeechPhraseElement* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_GetIDsOfNames(ISpeechPhraseElement* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_Invoke(ISpeechPhraseElement* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechPhraseElement methods ***/
static FORCEINLINE HRESULT ISpeechPhraseElement_get_AudioTimeOffset(ISpeechPhraseElement* This,LONG *offset) {
    return This->lpVtbl->get_AudioTimeOffset(This,offset);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_get_AudioSizeTime(ISpeechPhraseElement* This,LONG *audiotime) {
    return This->lpVtbl->get_AudioSizeTime(This,audiotime);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_get_AudioStreamOffset(ISpeechPhraseElement* This,LONG *offset) {
    return This->lpVtbl->get_AudioStreamOffset(This,offset);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_get_AudioSizeBytes(ISpeechPhraseElement* This,LONG *bytes) {
    return This->lpVtbl->get_AudioSizeBytes(This,bytes);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_get_RetainedStreamOffset(ISpeechPhraseElement* This,LONG *offset) {
    return This->lpVtbl->get_RetainedStreamOffset(This,offset);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_get_RetainedSizeBytes(ISpeechPhraseElement* This,LONG *retained) {
    return This->lpVtbl->get_RetainedSizeBytes(This,retained);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_get_DisplayText(ISpeechPhraseElement* This,BSTR *display) {
    return This->lpVtbl->get_DisplayText(This,display);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_get_LexicalForm(ISpeechPhraseElement* This,BSTR *lexical) {
    return This->lpVtbl->get_LexicalForm(This,lexical);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_get_Pronunciation(ISpeechPhraseElement* This,VARIANT *pronunciation) {
    return This->lpVtbl->get_Pronunciation(This,pronunciation);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_get_DisplayAttributes(ISpeechPhraseElement* This,SpeechDisplayAttributes *attributes) {
    return This->lpVtbl->get_DisplayAttributes(This,attributes);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_get_RequiredConfidence(ISpeechPhraseElement* This,SpeechEngineConfidence *confidence) {
    return This->lpVtbl->get_RequiredConfidence(This,confidence);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_get_ActualConfidence(ISpeechPhraseElement* This,SpeechEngineConfidence *confidence) {
    return This->lpVtbl->get_ActualConfidence(This,confidence);
}
static FORCEINLINE HRESULT ISpeechPhraseElement_get_EngineConfidence(ISpeechPhraseElement* This,float *confidence) {
    return This->lpVtbl->get_EngineConfidence(This,confidence);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseElement_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechPhraseElements {
    DISPID_SPEsCount = 1,
    DISPID_SPEsItem = DISPID_VALUE,
    DISPID_SPEs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseElements;
/*****************************************************************************
 * ISpeechPhraseElements interface
 */
#ifndef __ISpeechPhraseElements_INTERFACE_DEFINED__
#define __ISpeechPhraseElements_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhraseElements, 0x0626b328, 0x3478, 0x467d, 0xa0,0xb3, 0xd0,0x85,0x3b,0x93,0xdd,0xa3);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0626b328-3478-467d-a0b3-d0853b93dda3")
ISpeechPhraseElements : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        LONG Index,
        ISpeechPhraseElement **element) = 0;

    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
        IUnknown **obj) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhraseElements, 0x0626b328, 0x3478, 0x467d, 0xa0,0xb3, 0xd0,0x85,0x3b,0x93,0xdd,0xa3)
#endif
#else
typedef struct ISpeechPhraseElementsVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechPhraseElements *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechPhraseElements *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechPhraseElements *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechPhraseElements *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechPhraseElements methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        ISpeechPhraseElements *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *Item)(
        ISpeechPhraseElements *This,
        LONG Index,
        ISpeechPhraseElement **element);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechPhraseElements *This,
        IUnknown **obj);

    END_INTERFACE
} ISpeechPhraseElementsVtbl;

interface ISpeechPhraseElements {
    CONST_VTBL ISpeechPhraseElementsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhraseElements_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhraseElements_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhraseElements_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhraseElements_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhraseElements_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhraseElements_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhraseElements_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhraseElements methods ***/
#define ISpeechPhraseElements_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define ISpeechPhraseElements_Item(This,Index,element) (This)->lpVtbl->Item(This,Index,element)
#define ISpeechPhraseElements_get__NewEnum(This,obj) (This)->lpVtbl->get__NewEnum(This,obj)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechPhraseElements_QueryInterface(ISpeechPhraseElements* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechPhraseElements_AddRef(ISpeechPhraseElements* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechPhraseElements_Release(ISpeechPhraseElements* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechPhraseElements_GetTypeInfoCount(ISpeechPhraseElements* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechPhraseElements_GetTypeInfo(ISpeechPhraseElements* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechPhraseElements_GetIDsOfNames(ISpeechPhraseElements* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechPhraseElements_Invoke(ISpeechPhraseElements* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechPhraseElements methods ***/
static FORCEINLINE HRESULT ISpeechPhraseElements_get_Count(ISpeechPhraseElements* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static FORCEINLINE HRESULT ISpeechPhraseElements_Item(ISpeechPhraseElements* This,LONG Index,ISpeechPhraseElement **element) {
    return This->lpVtbl->Item(This,Index,element);
}
static FORCEINLINE HRESULT ISpeechPhraseElements_get__NewEnum(ISpeechPhraseElements* This,IUnknown **obj) {
    return This->lpVtbl->get__NewEnum(This,obj);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseElements_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechPhraseReplacement {
    DISPID_SPRDisplayAttributes = 1,
    DISPID_SPRText = 2,
    DISPID_SPRFirstElement = 3,
    DISPID_SPRNumberOfElements = 4
} DISPID_SpeechPhraseReplacement;
/*****************************************************************************
 * ISpeechPhraseReplacement interface
 */
#ifndef __ISpeechPhraseReplacement_INTERFACE_DEFINED__
#define __ISpeechPhraseReplacement_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhraseReplacement, 0x2890a410, 0x53a7, 0x4fb5, 0x94,0xec, 0x06,0xd4,0x99,0x8e,0x3d,0x02);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2890a410-53a7-4fb5-94ec-06d4998e3d02")
ISpeechPhraseReplacement : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_DisplayAttributes(
        SpeechDisplayAttributes *attributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Text(
        BSTR *text) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_FirstElement(
        LONG *element) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumberOfElements(
        LONG *elements) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhraseReplacement, 0x2890a410, 0x53a7, 0x4fb5, 0x94,0xec, 0x06,0xd4,0x99,0x8e,0x3d,0x02)
#endif
#else
typedef struct ISpeechPhraseReplacementVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechPhraseReplacement *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechPhraseReplacement *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechPhraseReplacement *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechPhraseReplacement *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechPhraseReplacement methods ***/
    HRESULT (STDMETHODCALLTYPE *get_DisplayAttributes)(
        ISpeechPhraseReplacement *This,
        SpeechDisplayAttributes *attributes);

    HRESULT (STDMETHODCALLTYPE *get_Text)(
        ISpeechPhraseReplacement *This,
        BSTR *text);

    HRESULT (STDMETHODCALLTYPE *get_FirstElement)(
        ISpeechPhraseReplacement *This,
        LONG *element);

    HRESULT (STDMETHODCALLTYPE *get_NumberOfElements)(
        ISpeechPhraseReplacement *This,
        LONG *elements);

    END_INTERFACE
} ISpeechPhraseReplacementVtbl;

interface ISpeechPhraseReplacement {
    CONST_VTBL ISpeechPhraseReplacementVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhraseReplacement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhraseReplacement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhraseReplacement_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhraseReplacement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhraseReplacement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhraseReplacement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhraseReplacement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhraseReplacement methods ***/
#define ISpeechPhraseReplacement_get_DisplayAttributes(This,attributes) (This)->lpVtbl->get_DisplayAttributes(This,attributes)
#define ISpeechPhraseReplacement_get_Text(This,text) (This)->lpVtbl->get_Text(This,text)
#define ISpeechPhraseReplacement_get_FirstElement(This,element) (This)->lpVtbl->get_FirstElement(This,element)
#define ISpeechPhraseReplacement_get_NumberOfElements(This,elements) (This)->lpVtbl->get_NumberOfElements(This,elements)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechPhraseReplacement_QueryInterface(ISpeechPhraseReplacement* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechPhraseReplacement_AddRef(ISpeechPhraseReplacement* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechPhraseReplacement_Release(ISpeechPhraseReplacement* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechPhraseReplacement_GetTypeInfoCount(ISpeechPhraseReplacement* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechPhraseReplacement_GetTypeInfo(ISpeechPhraseReplacement* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechPhraseReplacement_GetIDsOfNames(ISpeechPhraseReplacement* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechPhraseReplacement_Invoke(ISpeechPhraseReplacement* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechPhraseReplacement methods ***/
static FORCEINLINE HRESULT ISpeechPhraseReplacement_get_DisplayAttributes(ISpeechPhraseReplacement* This,SpeechDisplayAttributes *attributes) {
    return This->lpVtbl->get_DisplayAttributes(This,attributes);
}
static FORCEINLINE HRESULT ISpeechPhraseReplacement_get_Text(ISpeechPhraseReplacement* This,BSTR *text) {
    return This->lpVtbl->get_Text(This,text);
}
static FORCEINLINE HRESULT ISpeechPhraseReplacement_get_FirstElement(ISpeechPhraseReplacement* This,LONG *element) {
    return This->lpVtbl->get_FirstElement(This,element);
}
static FORCEINLINE HRESULT ISpeechPhraseReplacement_get_NumberOfElements(ISpeechPhraseReplacement* This,LONG *elements) {
    return This->lpVtbl->get_NumberOfElements(This,elements);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseReplacement_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechPhraseReplacements {
    DISPID_SPRsCount = 1,
    DISPID_SPRsItem = DISPID_VALUE,
    DISPID_SPRs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseReplacements;
/*****************************************************************************
 * ISpeechPhraseReplacements interface
 */
#ifndef __ISpeechPhraseReplacements_INTERFACE_DEFINED__
#define __ISpeechPhraseReplacements_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhraseReplacements, 0x38bc662f, 0x2257, 0x4525, 0x95,0x9e, 0x20,0x69,0xd2,0x59,0x6c,0x05);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("38bc662f-2257-4525-959e-2069d2596c05")
ISpeechPhraseReplacements : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        LONG index,
        ISpeechPhraseReplacement **reps) = 0;

    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
        IUnknown **obj) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhraseReplacements, 0x38bc662f, 0x2257, 0x4525, 0x95,0x9e, 0x20,0x69,0xd2,0x59,0x6c,0x05)
#endif
#else
typedef struct ISpeechPhraseReplacementsVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechPhraseReplacements *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechPhraseReplacements *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechPhraseReplacements *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechPhraseReplacements *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechPhraseReplacements methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        ISpeechPhraseReplacements *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *Item)(
        ISpeechPhraseReplacements *This,
        LONG index,
        ISpeechPhraseReplacement **reps);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechPhraseReplacements *This,
        IUnknown **obj);

    END_INTERFACE
} ISpeechPhraseReplacementsVtbl;

interface ISpeechPhraseReplacements {
    CONST_VTBL ISpeechPhraseReplacementsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhraseReplacements_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhraseReplacements_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhraseReplacements_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhraseReplacements_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhraseReplacements_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhraseReplacements_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhraseReplacements_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhraseReplacements methods ***/
#define ISpeechPhraseReplacements_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define ISpeechPhraseReplacements_Item(This,index,reps) (This)->lpVtbl->Item(This,index,reps)
#define ISpeechPhraseReplacements_get__NewEnum(This,obj) (This)->lpVtbl->get__NewEnum(This,obj)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechPhraseReplacements_QueryInterface(ISpeechPhraseReplacements* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechPhraseReplacements_AddRef(ISpeechPhraseReplacements* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechPhraseReplacements_Release(ISpeechPhraseReplacements* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechPhraseReplacements_GetTypeInfoCount(ISpeechPhraseReplacements* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechPhraseReplacements_GetTypeInfo(ISpeechPhraseReplacements* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechPhraseReplacements_GetIDsOfNames(ISpeechPhraseReplacements* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechPhraseReplacements_Invoke(ISpeechPhraseReplacements* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechPhraseReplacements methods ***/
static FORCEINLINE HRESULT ISpeechPhraseReplacements_get_Count(ISpeechPhraseReplacements* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static FORCEINLINE HRESULT ISpeechPhraseReplacements_Item(ISpeechPhraseReplacements* This,LONG index,ISpeechPhraseReplacement **reps) {
    return This->lpVtbl->Item(This,index,reps);
}
static FORCEINLINE HRESULT ISpeechPhraseReplacements_get__NewEnum(ISpeechPhraseReplacements* This,IUnknown **obj) {
    return This->lpVtbl->get__NewEnum(This,obj);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseReplacements_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechPhraseInfo {
    DISPID_SPILanguageId = 1,
    DISPID_SPIGrammarId = 2,
    DISPID_SPIStartTime = 3,
    DISPID_SPIAudioStreamPosition = 4,
    DISPID_SPIAudioSizeBytes = 5,
    DISPID_SPIRetainedSizeBytes = 6,
    DISPID_SPIAudioSizeTime = 7,
    DISPID_SPIRule = 8,
    DISPID_SPIProperties = 9,
    DISPID_SPIElements = 10,
    DISPID_SPIReplacements = 11,
    DISPID_SPIEngineId = 12,
    DISPID_SPIEnginePrivateData = 13,
    DISPID_SPISaveToMemory = 14,
    DISPID_SPIGetText = 15,
    DISPID_SPIGetDisplayAttributes = 16
} DISPID_SpeechPhraseInfo;
/*****************************************************************************
 * ISpeechPhraseInfo interface
 */
#ifndef __ISpeechPhraseInfo_INTERFACE_DEFINED__
#define __ISpeechPhraseInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhraseInfo, 0x961559cf, 0x4e67, 0x4662, 0x8b,0xf0, 0xd9,0x3f,0x1f,0xcd,0x61,0xb3);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("961559cf-4e67-4662-8bf0-d93f1fcd61b3")
ISpeechPhraseInfo : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_LanguageId(
        LONG *language) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_GrammarId(
        VARIANT *grammar) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_StartTime(
        VARIANT *start) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioStreamPosition(
        VARIANT *position) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioSizeBytes(
        LONG *bytes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RetainedSizeBytes(
        LONG *bytes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioSizeTime(
        LONG *audiotime) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Rule(
        ISpeechPhraseRule **rule) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Properties(
        ISpeechPhraseProperties **props) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Elements(
        ISpeechPhraseElements **elements) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Replacements(
        ISpeechPhraseReplacements **replacements) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EngineId(
        BSTR *engine) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EnginePrivateData(
        VARIANT *data) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveToMemory(
        VARIANT *block) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetText(
        LONG start,
        LONG elements,
        VARIANT_BOOL replacements,
        BSTR *text) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDisplayAttributes(
        LONG start,
        LONG elements,
        VARIANT_BOOL replacements,
        SpeechDisplayAttributes *attributes) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhraseInfo, 0x961559cf, 0x4e67, 0x4662, 0x8b,0xf0, 0xd9,0x3f,0x1f,0xcd,0x61,0xb3)
#endif
#else
typedef struct ISpeechPhraseInfoVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechPhraseInfo *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechPhraseInfo *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechPhraseInfo *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechPhraseInfo *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechPhraseInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *get_LanguageId)(
        ISpeechPhraseInfo *This,
        LONG *language);

    HRESULT (STDMETHODCALLTYPE *get_GrammarId)(
        ISpeechPhraseInfo *This,
        VARIANT *grammar);

    HRESULT (STDMETHODCALLTYPE *get_StartTime)(
        ISpeechPhraseInfo *This,
        VARIANT *start);

    HRESULT (STDMETHODCALLTYPE *get_AudioStreamPosition)(
        ISpeechPhraseInfo *This,
        VARIANT *position);

    HRESULT (STDMETHODCALLTYPE *get_AudioSizeBytes)(
        ISpeechPhraseInfo *This,
        LONG *bytes);

    HRESULT (STDMETHODCALLTYPE *get_RetainedSizeBytes)(
        ISpeechPhraseInfo *This,
        LONG *bytes);

    HRESULT (STDMETHODCALLTYPE *get_AudioSizeTime)(
        ISpeechPhraseInfo *This,
        LONG *audiotime);

    HRESULT (STDMETHODCALLTYPE *get_Rule)(
        ISpeechPhraseInfo *This,
        ISpeechPhraseRule **rule);

    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        ISpeechPhraseInfo *This,
        ISpeechPhraseProperties **props);

    HRESULT (STDMETHODCALLTYPE *get_Elements)(
        ISpeechPhraseInfo *This,
        ISpeechPhraseElements **elements);

    HRESULT (STDMETHODCALLTYPE *get_Replacements)(
        ISpeechPhraseInfo *This,
        ISpeechPhraseReplacements **replacements);

    HRESULT (STDMETHODCALLTYPE *get_EngineId)(
        ISpeechPhraseInfo *This,
        BSTR *engine);

    HRESULT (STDMETHODCALLTYPE *get_EnginePrivateData)(
        ISpeechPhraseInfo *This,
        VARIANT *data);

    HRESULT (STDMETHODCALLTYPE *SaveToMemory)(
        ISpeechPhraseInfo *This,
        VARIANT *block);

    HRESULT (STDMETHODCALLTYPE *GetText)(
        ISpeechPhraseInfo *This,
        LONG start,
        LONG elements,
        VARIANT_BOOL replacements,
        BSTR *text);

    HRESULT (STDMETHODCALLTYPE *GetDisplayAttributes)(
        ISpeechPhraseInfo *This,
        LONG start,
        LONG elements,
        VARIANT_BOOL replacements,
        SpeechDisplayAttributes *attributes);

    END_INTERFACE
} ISpeechPhraseInfoVtbl;

interface ISpeechPhraseInfo {
    CONST_VTBL ISpeechPhraseInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhraseInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhraseInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhraseInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhraseInfo_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhraseInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhraseInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhraseInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhraseInfo methods ***/
#define ISpeechPhraseInfo_get_LanguageId(This,language) (This)->lpVtbl->get_LanguageId(This,language)
#define ISpeechPhraseInfo_get_GrammarId(This,grammar) (This)->lpVtbl->get_GrammarId(This,grammar)
#define ISpeechPhraseInfo_get_StartTime(This,start) (This)->lpVtbl->get_StartTime(This,start)
#define ISpeechPhraseInfo_get_AudioStreamPosition(This,position) (This)->lpVtbl->get_AudioStreamPosition(This,position)
#define ISpeechPhraseInfo_get_AudioSizeBytes(This,bytes) (This)->lpVtbl->get_AudioSizeBytes(This,bytes)
#define ISpeechPhraseInfo_get_RetainedSizeBytes(This,bytes) (This)->lpVtbl->get_RetainedSizeBytes(This,bytes)
#define ISpeechPhraseInfo_get_AudioSizeTime(This,audiotime) (This)->lpVtbl->get_AudioSizeTime(This,audiotime)
#define ISpeechPhraseInfo_get_Rule(This,rule) (This)->lpVtbl->get_Rule(This,rule)
#define ISpeechPhraseInfo_get_Properties(This,props) (This)->lpVtbl->get_Properties(This,props)
#define ISpeechPhraseInfo_get_Elements(This,elements) (This)->lpVtbl->get_Elements(This,elements)
#define ISpeechPhraseInfo_get_Replacements(This,replacements) (This)->lpVtbl->get_Replacements(This,replacements)
#define ISpeechPhraseInfo_get_EngineId(This,engine) (This)->lpVtbl->get_EngineId(This,engine)
#define ISpeechPhraseInfo_get_EnginePrivateData(This,data) (This)->lpVtbl->get_EnginePrivateData(This,data)
#define ISpeechPhraseInfo_SaveToMemory(This,block) (This)->lpVtbl->SaveToMemory(This,block)
#define ISpeechPhraseInfo_GetText(This,start,elements,replacements,text) (This)->lpVtbl->GetText(This,start,elements,replacements,text)
#define ISpeechPhraseInfo_GetDisplayAttributes(This,start,elements,replacements,attributes) (This)->lpVtbl->GetDisplayAttributes(This,start,elements,replacements,attributes)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechPhraseInfo_QueryInterface(ISpeechPhraseInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechPhraseInfo_AddRef(ISpeechPhraseInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechPhraseInfo_Release(ISpeechPhraseInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechPhraseInfo_GetTypeInfoCount(ISpeechPhraseInfo* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_GetTypeInfo(ISpeechPhraseInfo* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_GetIDsOfNames(ISpeechPhraseInfo* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_Invoke(ISpeechPhraseInfo* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechPhraseInfo methods ***/
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_LanguageId(ISpeechPhraseInfo* This,LONG *language) {
    return This->lpVtbl->get_LanguageId(This,language);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_GrammarId(ISpeechPhraseInfo* This,VARIANT *grammar) {
    return This->lpVtbl->get_GrammarId(This,grammar);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_StartTime(ISpeechPhraseInfo* This,VARIANT *start) {
    return This->lpVtbl->get_StartTime(This,start);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_AudioStreamPosition(ISpeechPhraseInfo* This,VARIANT *position) {
    return This->lpVtbl->get_AudioStreamPosition(This,position);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_AudioSizeBytes(ISpeechPhraseInfo* This,LONG *bytes) {
    return This->lpVtbl->get_AudioSizeBytes(This,bytes);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_RetainedSizeBytes(ISpeechPhraseInfo* This,LONG *bytes) {
    return This->lpVtbl->get_RetainedSizeBytes(This,bytes);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_AudioSizeTime(ISpeechPhraseInfo* This,LONG *audiotime) {
    return This->lpVtbl->get_AudioSizeTime(This,audiotime);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_Rule(ISpeechPhraseInfo* This,ISpeechPhraseRule **rule) {
    return This->lpVtbl->get_Rule(This,rule);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_Properties(ISpeechPhraseInfo* This,ISpeechPhraseProperties **props) {
    return This->lpVtbl->get_Properties(This,props);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_Elements(ISpeechPhraseInfo* This,ISpeechPhraseElements **elements) {
    return This->lpVtbl->get_Elements(This,elements);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_Replacements(ISpeechPhraseInfo* This,ISpeechPhraseReplacements **replacements) {
    return This->lpVtbl->get_Replacements(This,replacements);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_EngineId(ISpeechPhraseInfo* This,BSTR *engine) {
    return This->lpVtbl->get_EngineId(This,engine);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_get_EnginePrivateData(ISpeechPhraseInfo* This,VARIANT *data) {
    return This->lpVtbl->get_EnginePrivateData(This,data);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_SaveToMemory(ISpeechPhraseInfo* This,VARIANT *block) {
    return This->lpVtbl->SaveToMemory(This,block);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_GetText(ISpeechPhraseInfo* This,LONG start,LONG elements,VARIANT_BOOL replacements,BSTR *text) {
    return This->lpVtbl->GetText(This,start,elements,replacements,text);
}
static FORCEINLINE HRESULT ISpeechPhraseInfo_GetDisplayAttributes(ISpeechPhraseInfo* This,LONG start,LONG elements,VARIANT_BOOL replacements,SpeechDisplayAttributes *attributes) {
    return This->lpVtbl->GetDisplayAttributes(This,start,elements,replacements,attributes);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseInfo_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechPhraseAlternate {
    DISPID_SPARecoResult = 1,
    DISPID_SPAStartElementInResult = 2,
    DISPID_SPANumberOfElementsInResult = 3,
    DISPID_SPAPhraseInfo = 4,
    DISPID_SPACommit = 5
} DISPID_SpeechPhraseAlternate;
/*****************************************************************************
 * ISpeechPhraseAlternate interface
 */
#ifndef __ISpeechPhraseAlternate_INTERFACE_DEFINED__
#define __ISpeechPhraseAlternate_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhraseAlternate, 0x27864a2a, 0x2b9f, 0x4cb8, 0x92,0xd3, 0x0d,0x27,0x22,0xfd,0x1e,0x73);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("27864a2a-2b9f-4cb8-92d3-0d2722fd1e73")
ISpeechPhraseAlternate : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_RecoResult(
        ISpeechRecoResult **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_StartElementInResult(
        LONG *element) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumberOfElementsInResult(
        LONG *elements) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PhraseInfo(
        ISpeechPhraseInfo **PhraseInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE Commit(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhraseAlternate, 0x27864a2a, 0x2b9f, 0x4cb8, 0x92,0xd3, 0x0d,0x27,0x22,0xfd,0x1e,0x73)
#endif
#else
typedef struct ISpeechPhraseAlternateVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechPhraseAlternate *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechPhraseAlternate *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechPhraseAlternate *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechPhraseAlternate *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechPhraseAlternate methods ***/
    HRESULT (STDMETHODCALLTYPE *get_RecoResult)(
        ISpeechPhraseAlternate *This,
        ISpeechRecoResult **result);

    HRESULT (STDMETHODCALLTYPE *get_StartElementInResult)(
        ISpeechPhraseAlternate *This,
        LONG *element);

    HRESULT (STDMETHODCALLTYPE *get_NumberOfElementsInResult)(
        ISpeechPhraseAlternate *This,
        LONG *elements);

    HRESULT (STDMETHODCALLTYPE *get_PhraseInfo)(
        ISpeechPhraseAlternate *This,
        ISpeechPhraseInfo **PhraseInfo);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        ISpeechPhraseAlternate *This);

    END_INTERFACE
} ISpeechPhraseAlternateVtbl;

interface ISpeechPhraseAlternate {
    CONST_VTBL ISpeechPhraseAlternateVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhraseAlternate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhraseAlternate_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhraseAlternate_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhraseAlternate_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhraseAlternate_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhraseAlternate_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhraseAlternate_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhraseAlternate methods ***/
#define ISpeechPhraseAlternate_get_RecoResult(This,result) (This)->lpVtbl->get_RecoResult(This,result)
#define ISpeechPhraseAlternate_get_StartElementInResult(This,element) (This)->lpVtbl->get_StartElementInResult(This,element)
#define ISpeechPhraseAlternate_get_NumberOfElementsInResult(This,elements) (This)->lpVtbl->get_NumberOfElementsInResult(This,elements)
#define ISpeechPhraseAlternate_get_PhraseInfo(This,PhraseInfo) (This)->lpVtbl->get_PhraseInfo(This,PhraseInfo)
#define ISpeechPhraseAlternate_Commit(This) (This)->lpVtbl->Commit(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechPhraseAlternate_QueryInterface(ISpeechPhraseAlternate* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechPhraseAlternate_AddRef(ISpeechPhraseAlternate* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechPhraseAlternate_Release(ISpeechPhraseAlternate* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechPhraseAlternate_GetTypeInfoCount(ISpeechPhraseAlternate* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechPhraseAlternate_GetTypeInfo(ISpeechPhraseAlternate* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechPhraseAlternate_GetIDsOfNames(ISpeechPhraseAlternate* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechPhraseAlternate_Invoke(ISpeechPhraseAlternate* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechPhraseAlternate methods ***/
static FORCEINLINE HRESULT ISpeechPhraseAlternate_get_RecoResult(ISpeechPhraseAlternate* This,ISpeechRecoResult **result) {
    return This->lpVtbl->get_RecoResult(This,result);
}
static FORCEINLINE HRESULT ISpeechPhraseAlternate_get_StartElementInResult(ISpeechPhraseAlternate* This,LONG *element) {
    return This->lpVtbl->get_StartElementInResult(This,element);
}
static FORCEINLINE HRESULT ISpeechPhraseAlternate_get_NumberOfElementsInResult(ISpeechPhraseAlternate* This,LONG *elements) {
    return This->lpVtbl->get_NumberOfElementsInResult(This,elements);
}
static FORCEINLINE HRESULT ISpeechPhraseAlternate_get_PhraseInfo(ISpeechPhraseAlternate* This,ISpeechPhraseInfo **PhraseInfo) {
    return This->lpVtbl->get_PhraseInfo(This,PhraseInfo);
}
static FORCEINLINE HRESULT ISpeechPhraseAlternate_Commit(ISpeechPhraseAlternate* This) {
    return This->lpVtbl->Commit(This);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseAlternate_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechPhraseAlternates {
    DISPID_SPAsCount = 1,
    DISPID_SPAsItem = DISPID_VALUE,
    DISPID_SPAs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseAlternates;
/*****************************************************************************
 * ISpeechPhraseAlternates interface
 */
#ifndef __ISpeechPhraseAlternates_INTERFACE_DEFINED__
#define __ISpeechPhraseAlternates_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhraseAlternates, 0xb238b6d5, 0xf276, 0x4c3d, 0xa6,0xc1, 0x29,0x74,0x80,0x1c,0x3c,0xc2);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b238b6d5-f276-4c3d-a6c1-2974801c3cc2")
ISpeechPhraseAlternates : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        LONG index,
        ISpeechPhraseAlternate **alternate) = 0;

    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
        IUnknown **obj) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhraseAlternates, 0xb238b6d5, 0xf276, 0x4c3d, 0xa6,0xc1, 0x29,0x74,0x80,0x1c,0x3c,0xc2)
#endif
#else
typedef struct ISpeechPhraseAlternatesVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechPhraseAlternates *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechPhraseAlternates *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechPhraseAlternates *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechPhraseAlternates *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechPhraseAlternates methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        ISpeechPhraseAlternates *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *Item)(
        ISpeechPhraseAlternates *This,
        LONG index,
        ISpeechPhraseAlternate **alternate);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechPhraseAlternates *This,
        IUnknown **obj);

    END_INTERFACE
} ISpeechPhraseAlternatesVtbl;

interface ISpeechPhraseAlternates {
    CONST_VTBL ISpeechPhraseAlternatesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhraseAlternates_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhraseAlternates_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhraseAlternates_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhraseAlternates_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhraseAlternates_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhraseAlternates_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhraseAlternates_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhraseAlternates methods ***/
#define ISpeechPhraseAlternates_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define ISpeechPhraseAlternates_Item(This,index,alternate) (This)->lpVtbl->Item(This,index,alternate)
#define ISpeechPhraseAlternates_get__NewEnum(This,obj) (This)->lpVtbl->get__NewEnum(This,obj)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechPhraseAlternates_QueryInterface(ISpeechPhraseAlternates* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechPhraseAlternates_AddRef(ISpeechPhraseAlternates* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechPhraseAlternates_Release(ISpeechPhraseAlternates* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechPhraseAlternates_GetTypeInfoCount(ISpeechPhraseAlternates* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechPhraseAlternates_GetTypeInfo(ISpeechPhraseAlternates* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechPhraseAlternates_GetIDsOfNames(ISpeechPhraseAlternates* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechPhraseAlternates_Invoke(ISpeechPhraseAlternates* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechPhraseAlternates methods ***/
static FORCEINLINE HRESULT ISpeechPhraseAlternates_get_Count(ISpeechPhraseAlternates* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static FORCEINLINE HRESULT ISpeechPhraseAlternates_Item(ISpeechPhraseAlternates* This,LONG index,ISpeechPhraseAlternate **alternate) {
    return This->lpVtbl->Item(This,index,alternate);
}
static FORCEINLINE HRESULT ISpeechPhraseAlternates_get__NewEnum(ISpeechPhraseAlternates* This,IUnknown **obj) {
    return This->lpVtbl->get__NewEnum(This,obj);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseAlternates_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechMemoryStream {
    DISPID_SMSSetData = 100,
    DISPID_SMSGetData = 101
} DISPID_SpeechMemoryStream;
/*****************************************************************************
 * ISpeechMemoryStream interface
 */
#ifndef __ISpeechMemoryStream_INTERFACE_DEFINED__
#define __ISpeechMemoryStream_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechMemoryStream, 0xeeb14b68, 0x808b, 0x4abe, 0xa5,0xea, 0xb5,0x1d,0xa7,0x58,0x80,0x08);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("eeb14b68-808b-4abe-a5ea-b51da7588008")
ISpeechMemoryStream : public ISpeechBaseStream
{
    virtual HRESULT STDMETHODCALLTYPE SetData(
        VARIANT data) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetData(
        VARIANT *data) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechMemoryStream, 0xeeb14b68, 0x808b, 0x4abe, 0xa5,0xea, 0xb5,0x1d,0xa7,0x58,0x80,0x08)
#endif
#else
typedef struct ISpeechMemoryStreamVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechMemoryStream *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechMemoryStream *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechMemoryStream *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechMemoryStream *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechBaseStream methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Format)(
        ISpeechMemoryStream *This,
        ISpeechAudioFormat **format);

    HRESULT (STDMETHODCALLTYPE *putref_Format)(
        ISpeechMemoryStream *This,
        ISpeechAudioFormat *format);

    HRESULT (STDMETHODCALLTYPE *Read)(
        ISpeechMemoryStream *This,
        VARIANT *buffer,
        LONG written,
        LONG *read);

    HRESULT (STDMETHODCALLTYPE *Write)(
        ISpeechMemoryStream *This,
        VARIANT buffer,
        LONG *written);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        ISpeechMemoryStream *This,
        VARIANT position,
        SpeechStreamSeekPositionType origin,
        VARIANT *pos);

    /*** ISpeechMemoryStream methods ***/
    HRESULT (STDMETHODCALLTYPE *SetData)(
        ISpeechMemoryStream *This,
        VARIANT data);

    HRESULT (STDMETHODCALLTYPE *GetData)(
        ISpeechMemoryStream *This,
        VARIANT *data);

    END_INTERFACE
} ISpeechMemoryStreamVtbl;

interface ISpeechMemoryStream {
    CONST_VTBL ISpeechMemoryStreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechMemoryStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechMemoryStream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechMemoryStream_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechMemoryStream_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechMemoryStream_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechMemoryStream_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechMemoryStream_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechBaseStream methods ***/
#define ISpeechMemoryStream_get_Format(This,format) (This)->lpVtbl->get_Format(This,format)
#define ISpeechMemoryStream_putref_Format(This,format) (This)->lpVtbl->putref_Format(This,format)
#define ISpeechMemoryStream_Read(This,buffer,written,read) (This)->lpVtbl->Read(This,buffer,written,read)
#define ISpeechMemoryStream_Write(This,buffer,written) (This)->lpVtbl->Write(This,buffer,written)
#define ISpeechMemoryStream_Seek(This,position,origin,pos) (This)->lpVtbl->Seek(This,position,origin,pos)
/*** ISpeechMemoryStream methods ***/
#define ISpeechMemoryStream_SetData(This,data) (This)->lpVtbl->SetData(This,data)
#define ISpeechMemoryStream_GetData(This,data) (This)->lpVtbl->GetData(This,data)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechMemoryStream_QueryInterface(ISpeechMemoryStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechMemoryStream_AddRef(ISpeechMemoryStream* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechMemoryStream_Release(ISpeechMemoryStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechMemoryStream_GetTypeInfoCount(ISpeechMemoryStream* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechMemoryStream_GetTypeInfo(ISpeechMemoryStream* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechMemoryStream_GetIDsOfNames(ISpeechMemoryStream* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechMemoryStream_Invoke(ISpeechMemoryStream* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechBaseStream methods ***/
static FORCEINLINE HRESULT ISpeechMemoryStream_get_Format(ISpeechMemoryStream* This,ISpeechAudioFormat **format) {
    return This->lpVtbl->get_Format(This,format);
}
static FORCEINLINE HRESULT ISpeechMemoryStream_putref_Format(ISpeechMemoryStream* This,ISpeechAudioFormat *format) {
    return This->lpVtbl->putref_Format(This,format);
}
static FORCEINLINE HRESULT ISpeechMemoryStream_Read(ISpeechMemoryStream* This,VARIANT *buffer,LONG written,LONG *read) {
    return This->lpVtbl->Read(This,buffer,written,read);
}
static FORCEINLINE HRESULT ISpeechMemoryStream_Write(ISpeechMemoryStream* This,VARIANT buffer,LONG *written) {
    return This->lpVtbl->Write(This,buffer,written);
}
static FORCEINLINE HRESULT ISpeechMemoryStream_Seek(ISpeechMemoryStream* This,VARIANT position,SpeechStreamSeekPositionType origin,VARIANT *pos) {
    return This->lpVtbl->Seek(This,position,origin,pos);
}
/*** ISpeechMemoryStream methods ***/
static FORCEINLINE HRESULT ISpeechMemoryStream_SetData(ISpeechMemoryStream* This,VARIANT data) {
    return This->lpVtbl->SetData(This,data);
}
static FORCEINLINE HRESULT ISpeechMemoryStream_GetData(ISpeechMemoryStream* This,VARIANT *data) {
    return This->lpVtbl->GetData(This,data);
}
#endif
#endif

#endif


#endif  /* __ISpeechMemoryStream_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechRecoResult {
    DISPID_SRRRecoContext = 1,
    DISPID_SRRTimes = 2,
    DISPID_SRRAudioFormat = 3,
    DISPID_SRRPhraseInfo = 4,
    DISPID_SRRAlternates = 5,
    DISPID_SRRAudio = 6,
    DISPID_SRRSpeakAudio = 7,
    DISPID_SRRSaveToMemory = 8,
    DISPID_SRRDiscardResultInfo = 9
} DISPID_SpeechRecoResult;
/*****************************************************************************
 * ISpeechRecoResult interface
 */
#ifndef __ISpeechRecoResult_INTERFACE_DEFINED__
#define __ISpeechRecoResult_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechRecoResult, 0xed2879cf, 0xced9, 0x4ee6, 0xa5,0x34, 0xde,0x01,0x91,0xd5,0x46,0x8d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ed2879cf-ced9-4ee6-a534-de0191d5468d")
ISpeechRecoResult : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_RecoContext(
        ISpeechRecoContext **RecoContext) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Times(
        ISpeechRecoResultTimes **times) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_AudioFormat(
        ISpeechAudioFormat *format) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioFormat(
        ISpeechAudioFormat **format) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PhraseInfo(
        ISpeechPhraseInfo **phrase) = 0;

    virtual HRESULT STDMETHODCALLTYPE Alternates(
        LONG count,
        LONG start,
        LONG elements,
        ISpeechPhraseAlternates **alternates) = 0;

    virtual HRESULT STDMETHODCALLTYPE Audio(
        LONG start,
        LONG elements,
        ISpeechMemoryStream **stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE SpeakAudio(
        LONG start,
        LONG elements,
        SpeechVoiceSpeakFlags flags,
        LONG *stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveToMemory(
        VARIANT *block) = 0;

    virtual HRESULT STDMETHODCALLTYPE DiscardResultInfo(
        SpeechDiscardType types) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechRecoResult, 0xed2879cf, 0xced9, 0x4ee6, 0xa5,0x34, 0xde,0x01,0x91,0xd5,0x46,0x8d)
#endif
#else
typedef struct ISpeechRecoResultVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechRecoResult *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechRecoResult *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechRecoResult *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechRecoResult *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechRecoResult methods ***/
    HRESULT (STDMETHODCALLTYPE *get_RecoContext)(
        ISpeechRecoResult *This,
        ISpeechRecoContext **RecoContext);

    HRESULT (STDMETHODCALLTYPE *get_Times)(
        ISpeechRecoResult *This,
        ISpeechRecoResultTimes **times);

    HRESULT (STDMETHODCALLTYPE *putref_AudioFormat)(
        ISpeechRecoResult *This,
        ISpeechAudioFormat *format);

    HRESULT (STDMETHODCALLTYPE *get_AudioFormat)(
        ISpeechRecoResult *This,
        ISpeechAudioFormat **format);

    HRESULT (STDMETHODCALLTYPE *get_PhraseInfo)(
        ISpeechRecoResult *This,
        ISpeechPhraseInfo **phrase);

    HRESULT (STDMETHODCALLTYPE *Alternates)(
        ISpeechRecoResult *This,
        LONG count,
        LONG start,
        LONG elements,
        ISpeechPhraseAlternates **alternates);

    HRESULT (STDMETHODCALLTYPE *Audio)(
        ISpeechRecoResult *This,
        LONG start,
        LONG elements,
        ISpeechMemoryStream **stream);

    HRESULT (STDMETHODCALLTYPE *SpeakAudio)(
        ISpeechRecoResult *This,
        LONG start,
        LONG elements,
        SpeechVoiceSpeakFlags flags,
        LONG *stream);

    HRESULT (STDMETHODCALLTYPE *SaveToMemory)(
        ISpeechRecoResult *This,
        VARIANT *block);

    HRESULT (STDMETHODCALLTYPE *DiscardResultInfo)(
        ISpeechRecoResult *This,
        SpeechDiscardType types);

    END_INTERFACE
} ISpeechRecoResultVtbl;

interface ISpeechRecoResult {
    CONST_VTBL ISpeechRecoResultVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechRecoResult_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechRecoResult_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechRecoResult_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechRecoResult_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechRecoResult_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechRecoResult_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechRecoResult_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechRecoResult methods ***/
#define ISpeechRecoResult_get_RecoContext(This,RecoContext) (This)->lpVtbl->get_RecoContext(This,RecoContext)
#define ISpeechRecoResult_get_Times(This,times) (This)->lpVtbl->get_Times(This,times)
#define ISpeechRecoResult_putref_AudioFormat(This,format) (This)->lpVtbl->putref_AudioFormat(This,format)
#define ISpeechRecoResult_get_AudioFormat(This,format) (This)->lpVtbl->get_AudioFormat(This,format)
#define ISpeechRecoResult_get_PhraseInfo(This,phrase) (This)->lpVtbl->get_PhraseInfo(This,phrase)
#define ISpeechRecoResult_Alternates(This,count,start,elements,alternates) (This)->lpVtbl->Alternates(This,count,start,elements,alternates)
#define ISpeechRecoResult_Audio(This,start,elements,stream) (This)->lpVtbl->Audio(This,start,elements,stream)
#define ISpeechRecoResult_SpeakAudio(This,start,elements,flags,stream) (This)->lpVtbl->SpeakAudio(This,start,elements,flags,stream)
#define ISpeechRecoResult_SaveToMemory(This,block) (This)->lpVtbl->SaveToMemory(This,block)
#define ISpeechRecoResult_DiscardResultInfo(This,types) (This)->lpVtbl->DiscardResultInfo(This,types)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechRecoResult_QueryInterface(ISpeechRecoResult* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechRecoResult_AddRef(ISpeechRecoResult* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechRecoResult_Release(ISpeechRecoResult* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechRecoResult_GetTypeInfoCount(ISpeechRecoResult* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechRecoResult_GetTypeInfo(ISpeechRecoResult* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechRecoResult_GetIDsOfNames(ISpeechRecoResult* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechRecoResult_Invoke(ISpeechRecoResult* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechRecoResult methods ***/
static FORCEINLINE HRESULT ISpeechRecoResult_get_RecoContext(ISpeechRecoResult* This,ISpeechRecoContext **RecoContext) {
    return This->lpVtbl->get_RecoContext(This,RecoContext);
}
static FORCEINLINE HRESULT ISpeechRecoResult_get_Times(ISpeechRecoResult* This,ISpeechRecoResultTimes **times) {
    return This->lpVtbl->get_Times(This,times);
}
static FORCEINLINE HRESULT ISpeechRecoResult_putref_AudioFormat(ISpeechRecoResult* This,ISpeechAudioFormat *format) {
    return This->lpVtbl->putref_AudioFormat(This,format);
}
static FORCEINLINE HRESULT ISpeechRecoResult_get_AudioFormat(ISpeechRecoResult* This,ISpeechAudioFormat **format) {
    return This->lpVtbl->get_AudioFormat(This,format);
}
static FORCEINLINE HRESULT ISpeechRecoResult_get_PhraseInfo(ISpeechRecoResult* This,ISpeechPhraseInfo **phrase) {
    return This->lpVtbl->get_PhraseInfo(This,phrase);
}
static FORCEINLINE HRESULT ISpeechRecoResult_Alternates(ISpeechRecoResult* This,LONG count,LONG start,LONG elements,ISpeechPhraseAlternates **alternates) {
    return This->lpVtbl->Alternates(This,count,start,elements,alternates);
}
static FORCEINLINE HRESULT ISpeechRecoResult_Audio(ISpeechRecoResult* This,LONG start,LONG elements,ISpeechMemoryStream **stream) {
    return This->lpVtbl->Audio(This,start,elements,stream);
}
static FORCEINLINE HRESULT ISpeechRecoResult_SpeakAudio(ISpeechRecoResult* This,LONG start,LONG elements,SpeechVoiceSpeakFlags flags,LONG *stream) {
    return This->lpVtbl->SpeakAudio(This,start,elements,flags,stream);
}
static FORCEINLINE HRESULT ISpeechRecoResult_SaveToMemory(ISpeechRecoResult* This,VARIANT *block) {
    return This->lpVtbl->SaveToMemory(This,block);
}
static FORCEINLINE HRESULT ISpeechRecoResult_DiscardResultInfo(ISpeechRecoResult* This,SpeechDiscardType types) {
    return This->lpVtbl->DiscardResultInfo(This,types);
}
#endif
#endif

#endif


#endif  /* __ISpeechRecoResult_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechGrammarRule {
    DISPID_SGRAttributes = 1,
    DISPID_SGRInitialState = 2,
    DISPID_SGRName = 3,
    DISPID_SGRId = 4,
    DISPID_SGRClear = 5,
    DISPID_SGRAddResource = 6,
    DISPID_SGRAddState = 7
} DISPID_SpeechGrammarRule;
typedef enum DISPID_SpeechGrammarRuleStateTransitions {
    DISPID_SGRSTsCount = 1,
    DISPID_SGRSTsItem = DISPID_VALUE,
    DISPID_SGRSTs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechGrammarRuleStateTransitions;
typedef enum SpeechGrammarRuleStateTransitionType {
    SGRSTTEpsilon = 0,
    SGRSTTWord = 1,
    SGRSTTRule = 2,
    SGRSTTDictation = 3,
    SGRSTTWildcard = 4,
    SGRSTTTextBuffer = 5
} SpeechGrammarRuleStateTransitionType;
typedef enum DISPID_SpeechGrammarRuleStateTransition {
    DISPID_SGRSTType = 1,
    DISPID_SGRSTText = 2,
    DISPID_SGRSTRule = 3,
    DISPID_SGRSTWeight = 4,
    DISPID_SGRSTPropertyName = 5,
    DISPID_SGRSTPropertyId = 6,
    DISPID_SGRSTPropertyValue = 7,
    DISPID_SGRSTNextState = 8
} DISPID_SpeechGrammarRuleStateTransition;
/*****************************************************************************
 * ISpeechGrammarRuleStateTransition interface
 */
#ifndef __ISpeechGrammarRuleStateTransition_INTERFACE_DEFINED__
#define __ISpeechGrammarRuleStateTransition_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechGrammarRuleStateTransition, 0xcafd1db1, 0x41d1, 0x4a06, 0x98,0x63, 0xe2,0xe8,0x1d,0xa1,0x7a,0x9a);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("cafd1db1-41d1-4a06-9863-e2e81da17a9a")
ISpeechGrammarRuleStateTransition : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Type(
        SpeechGrammarRuleStateTransitionType *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Text(
        BSTR *text) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Rule(
        ISpeechGrammarRule **rule) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Weight(
        VARIANT *weight) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PropertyName(
        BSTR *name) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PropertyId(
        LONG *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PropertyValue(
        VARIANT *value) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NextState(
        ISpeechGrammarRuleState **state) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechGrammarRuleStateTransition, 0xcafd1db1, 0x41d1, 0x4a06, 0x98,0x63, 0xe2,0xe8,0x1d,0xa1,0x7a,0x9a)
#endif
#else
typedef struct ISpeechGrammarRuleStateTransitionVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechGrammarRuleStateTransition *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechGrammarRuleStateTransition *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechGrammarRuleStateTransition *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechGrammarRuleStateTransition *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechGrammarRuleStateTransition methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Type)(
        ISpeechGrammarRuleStateTransition *This,
        SpeechGrammarRuleStateTransitionType *type);

    HRESULT (STDMETHODCALLTYPE *get_Text)(
        ISpeechGrammarRuleStateTransition *This,
        BSTR *text);

    HRESULT (STDMETHODCALLTYPE *get_Rule)(
        ISpeechGrammarRuleStateTransition *This,
        ISpeechGrammarRule **rule);

    HRESULT (STDMETHODCALLTYPE *get_Weight)(
        ISpeechGrammarRuleStateTransition *This,
        VARIANT *weight);

    HRESULT (STDMETHODCALLTYPE *get_PropertyName)(
        ISpeechGrammarRuleStateTransition *This,
        BSTR *name);

    HRESULT (STDMETHODCALLTYPE *get_PropertyId)(
        ISpeechGrammarRuleStateTransition *This,
        LONG *id);

    HRESULT (STDMETHODCALLTYPE *get_PropertyValue)(
        ISpeechGrammarRuleStateTransition *This,
        VARIANT *value);

    HRESULT (STDMETHODCALLTYPE *get_NextState)(
        ISpeechGrammarRuleStateTransition *This,
        ISpeechGrammarRuleState **state);

    END_INTERFACE
} ISpeechGrammarRuleStateTransitionVtbl;

interface ISpeechGrammarRuleStateTransition {
    CONST_VTBL ISpeechGrammarRuleStateTransitionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechGrammarRuleStateTransition_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechGrammarRuleStateTransition_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechGrammarRuleStateTransition_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechGrammarRuleStateTransition_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechGrammarRuleStateTransition_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechGrammarRuleStateTransition_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechGrammarRuleStateTransition_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechGrammarRuleStateTransition methods ***/
#define ISpeechGrammarRuleStateTransition_get_Type(This,type) (This)->lpVtbl->get_Type(This,type)
#define ISpeechGrammarRuleStateTransition_get_Text(This,text) (This)->lpVtbl->get_Text(This,text)
#define ISpeechGrammarRuleStateTransition_get_Rule(This,rule) (This)->lpVtbl->get_Rule(This,rule)
#define ISpeechGrammarRuleStateTransition_get_Weight(This,weight) (This)->lpVtbl->get_Weight(This,weight)
#define ISpeechGrammarRuleStateTransition_get_PropertyName(This,name) (This)->lpVtbl->get_PropertyName(This,name)
#define ISpeechGrammarRuleStateTransition_get_PropertyId(This,id) (This)->lpVtbl->get_PropertyId(This,id)
#define ISpeechGrammarRuleStateTransition_get_PropertyValue(This,value) (This)->lpVtbl->get_PropertyValue(This,value)
#define ISpeechGrammarRuleStateTransition_get_NextState(This,state) (This)->lpVtbl->get_NextState(This,state)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_QueryInterface(ISpeechGrammarRuleStateTransition* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechGrammarRuleStateTransition_AddRef(ISpeechGrammarRuleStateTransition* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechGrammarRuleStateTransition_Release(ISpeechGrammarRuleStateTransition* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_GetTypeInfoCount(ISpeechGrammarRuleStateTransition* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_GetTypeInfo(ISpeechGrammarRuleStateTransition* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_GetIDsOfNames(ISpeechGrammarRuleStateTransition* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_Invoke(ISpeechGrammarRuleStateTransition* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechGrammarRuleStateTransition methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_get_Type(ISpeechGrammarRuleStateTransition* This,SpeechGrammarRuleStateTransitionType *type) {
    return This->lpVtbl->get_Type(This,type);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_get_Text(ISpeechGrammarRuleStateTransition* This,BSTR *text) {
    return This->lpVtbl->get_Text(This,text);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_get_Rule(ISpeechGrammarRuleStateTransition* This,ISpeechGrammarRule **rule) {
    return This->lpVtbl->get_Rule(This,rule);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_get_Weight(ISpeechGrammarRuleStateTransition* This,VARIANT *weight) {
    return This->lpVtbl->get_Weight(This,weight);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_get_PropertyName(ISpeechGrammarRuleStateTransition* This,BSTR *name) {
    return This->lpVtbl->get_PropertyName(This,name);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_get_PropertyId(ISpeechGrammarRuleStateTransition* This,LONG *id) {
    return This->lpVtbl->get_PropertyId(This,id);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_get_PropertyValue(ISpeechGrammarRuleStateTransition* This,VARIANT *value) {
    return This->lpVtbl->get_PropertyValue(This,value);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransition_get_NextState(ISpeechGrammarRuleStateTransition* This,ISpeechGrammarRuleState **state) {
    return This->lpVtbl->get_NextState(This,state);
}
#endif
#endif

#endif


#endif  /* __ISpeechGrammarRuleStateTransition_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechGrammarRuleStateTransitions interface
 */
#ifndef __ISpeechGrammarRuleStateTransitions_INTERFACE_DEFINED__
#define __ISpeechGrammarRuleStateTransitions_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechGrammarRuleStateTransitions, 0xeabce657, 0x75bc, 0x44a2, 0xaa,0x7f, 0xc5,0x64,0x76,0x74,0x29,0x63);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("eabce657-75bc-44a2-aa7f-c56476742963")
ISpeechGrammarRuleStateTransitions : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        LONG index,
        ISpeechGrammarRuleStateTransition **transition) = 0;

    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
        IUnknown **enum_var) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechGrammarRuleStateTransitions, 0xeabce657, 0x75bc, 0x44a2, 0xaa,0x7f, 0xc5,0x64,0x76,0x74,0x29,0x63)
#endif
#else
typedef struct ISpeechGrammarRuleStateTransitionsVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechGrammarRuleStateTransitions *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechGrammarRuleStateTransitions *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechGrammarRuleStateTransitions *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechGrammarRuleStateTransitions *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechGrammarRuleStateTransitions methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        ISpeechGrammarRuleStateTransitions *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *Item)(
        ISpeechGrammarRuleStateTransitions *This,
        LONG index,
        ISpeechGrammarRuleStateTransition **transition);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechGrammarRuleStateTransitions *This,
        IUnknown **enum_var);

    END_INTERFACE
} ISpeechGrammarRuleStateTransitionsVtbl;

interface ISpeechGrammarRuleStateTransitions {
    CONST_VTBL ISpeechGrammarRuleStateTransitionsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechGrammarRuleStateTransitions_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechGrammarRuleStateTransitions_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechGrammarRuleStateTransitions_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechGrammarRuleStateTransitions_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechGrammarRuleStateTransitions_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechGrammarRuleStateTransitions_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechGrammarRuleStateTransitions_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechGrammarRuleStateTransitions methods ***/
#define ISpeechGrammarRuleStateTransitions_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define ISpeechGrammarRuleStateTransitions_Item(This,index,transition) (This)->lpVtbl->Item(This,index,transition)
#define ISpeechGrammarRuleStateTransitions_get__NewEnum(This,enum_var) (This)->lpVtbl->get__NewEnum(This,enum_var)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransitions_QueryInterface(ISpeechGrammarRuleStateTransitions* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechGrammarRuleStateTransitions_AddRef(ISpeechGrammarRuleStateTransitions* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechGrammarRuleStateTransitions_Release(ISpeechGrammarRuleStateTransitions* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransitions_GetTypeInfoCount(ISpeechGrammarRuleStateTransitions* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransitions_GetTypeInfo(ISpeechGrammarRuleStateTransitions* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransitions_GetIDsOfNames(ISpeechGrammarRuleStateTransitions* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransitions_Invoke(ISpeechGrammarRuleStateTransitions* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechGrammarRuleStateTransitions methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransitions_get_Count(ISpeechGrammarRuleStateTransitions* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransitions_Item(ISpeechGrammarRuleStateTransitions* This,LONG index,ISpeechGrammarRuleStateTransition **transition) {
    return This->lpVtbl->Item(This,index,transition);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleStateTransitions_get__NewEnum(ISpeechGrammarRuleStateTransitions* This,IUnknown **enum_var) {
    return This->lpVtbl->get__NewEnum(This,enum_var);
}
#endif
#endif

#endif


#endif  /* __ISpeechGrammarRuleStateTransitions_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechGrammarRuleState {
    DISPID_SGRSRule = 1,
    DISPID_SGRSTransitions = 2,
    DISPID_SGRSAddWordTransition = 3,
    DISPID_SGRSAddRuleTransition = 4,
    DISPID_SGRSAddSpecialTransition = 5
} DISPID_SpeechGrammarRuleState;
/*****************************************************************************
 * ISpeechGrammarRuleState interface
 */
#ifndef __ISpeechGrammarRuleState_INTERFACE_DEFINED__
#define __ISpeechGrammarRuleState_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechGrammarRuleState, 0xd4286f2c, 0xee67, 0x45ae, 0xb9,0x28, 0x28,0xd6,0x95,0x36,0x2e,0xda);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d4286f2c-ee67-45ae-b928-28d695362eda")
ISpeechGrammarRuleState : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Rule(
        ISpeechGrammarRule **rule) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Transitions(
        ISpeechGrammarRuleStateTransitions **transitions) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddWordTransition(
        ISpeechGrammarRuleState *state,
        const BSTR Words,
        const BSTR separators = L" ",
        SpeechGrammarWordType type = SGLexical,
        const BSTR name = L"",
        LONG id = 0,
        VARIANT *value = 0,
        float weight = 1) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddRuleTransition(
        ISpeechGrammarRuleState *state,
        ISpeechGrammarRule *rule,
        const BSTR name = L"",
        LONG id = 0,
        VARIANT *value = 0,
        float weight = 1) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddSpecialTransition(
        ISpeechGrammarRuleState *state,
        SpeechSpecialTransitionType type,
        const BSTR name = L"",
        LONG id = 0,
        VARIANT *value = 0,
        float weight = 1) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechGrammarRuleState, 0xd4286f2c, 0xee67, 0x45ae, 0xb9,0x28, 0x28,0xd6,0x95,0x36,0x2e,0xda)
#endif
#else
typedef struct ISpeechGrammarRuleStateVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechGrammarRuleState *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechGrammarRuleState *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechGrammarRuleState *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechGrammarRuleState *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechGrammarRuleState methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Rule)(
        ISpeechGrammarRuleState *This,
        ISpeechGrammarRule **rule);

    HRESULT (STDMETHODCALLTYPE *get_Transitions)(
        ISpeechGrammarRuleState *This,
        ISpeechGrammarRuleStateTransitions **transitions);

    HRESULT (STDMETHODCALLTYPE *AddWordTransition)(
        ISpeechGrammarRuleState *This,
        ISpeechGrammarRuleState *state,
        const BSTR Words,
        const BSTR separators,
        SpeechGrammarWordType type,
        const BSTR name,
        LONG id,
        VARIANT *value,
        float weight);

    HRESULT (STDMETHODCALLTYPE *AddRuleTransition)(
        ISpeechGrammarRuleState *This,
        ISpeechGrammarRuleState *state,
        ISpeechGrammarRule *rule,
        const BSTR name,
        LONG id,
        VARIANT *value,
        float weight);

    HRESULT (STDMETHODCALLTYPE *AddSpecialTransition)(
        ISpeechGrammarRuleState *This,
        ISpeechGrammarRuleState *state,
        SpeechSpecialTransitionType type,
        const BSTR name,
        LONG id,
        VARIANT *value,
        float weight);

    END_INTERFACE
} ISpeechGrammarRuleStateVtbl;

interface ISpeechGrammarRuleState {
    CONST_VTBL ISpeechGrammarRuleStateVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechGrammarRuleState_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechGrammarRuleState_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechGrammarRuleState_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechGrammarRuleState_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechGrammarRuleState_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechGrammarRuleState_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechGrammarRuleState_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechGrammarRuleState methods ***/
#define ISpeechGrammarRuleState_get_Rule(This,rule) (This)->lpVtbl->get_Rule(This,rule)
#define ISpeechGrammarRuleState_get_Transitions(This,transitions) (This)->lpVtbl->get_Transitions(This,transitions)
#define ISpeechGrammarRuleState_AddWordTransition(This,state,Words,separators,type,name,id,value,weight) (This)->lpVtbl->AddWordTransition(This,state,Words,separators,type,name,id,value,weight)
#define ISpeechGrammarRuleState_AddRuleTransition(This,state,rule,name,id,value,weight) (This)->lpVtbl->AddRuleTransition(This,state,rule,name,id,value,weight)
#define ISpeechGrammarRuleState_AddSpecialTransition(This,state,type,name,id,value,weight) (This)->lpVtbl->AddSpecialTransition(This,state,type,name,id,value,weight)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRuleState_QueryInterface(ISpeechGrammarRuleState* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechGrammarRuleState_AddRef(ISpeechGrammarRuleState* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechGrammarRuleState_Release(ISpeechGrammarRuleState* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRuleState_GetTypeInfoCount(ISpeechGrammarRuleState* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleState_GetTypeInfo(ISpeechGrammarRuleState* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleState_GetIDsOfNames(ISpeechGrammarRuleState* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleState_Invoke(ISpeechGrammarRuleState* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechGrammarRuleState methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRuleState_get_Rule(ISpeechGrammarRuleState* This,ISpeechGrammarRule **rule) {
    return This->lpVtbl->get_Rule(This,rule);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleState_get_Transitions(ISpeechGrammarRuleState* This,ISpeechGrammarRuleStateTransitions **transitions) {
    return This->lpVtbl->get_Transitions(This,transitions);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleState_AddWordTransition(ISpeechGrammarRuleState* This,ISpeechGrammarRuleState *state,const BSTR Words,const BSTR separators,SpeechGrammarWordType type,const BSTR name,LONG id,VARIANT *value,float weight) {
    return This->lpVtbl->AddWordTransition(This,state,Words,separators,type,name,id,value,weight);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleState_AddRuleTransition(ISpeechGrammarRuleState* This,ISpeechGrammarRuleState *state,ISpeechGrammarRule *rule,const BSTR name,LONG id,VARIANT *value,float weight) {
    return This->lpVtbl->AddRuleTransition(This,state,rule,name,id,value,weight);
}
static FORCEINLINE HRESULT ISpeechGrammarRuleState_AddSpecialTransition(ISpeechGrammarRuleState* This,ISpeechGrammarRuleState *state,SpeechSpecialTransitionType type,const BSTR name,LONG id,VARIANT *value,float weight) {
    return This->lpVtbl->AddSpecialTransition(This,state,type,name,id,value,weight);
}
#endif
#endif

#endif


#endif  /* __ISpeechGrammarRuleState_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechGrammarRule interface
 */
#ifndef __ISpeechGrammarRule_INTERFACE_DEFINED__
#define __ISpeechGrammarRule_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechGrammarRule, 0xafe719cf, 0x5dd1, 0x44f2, 0x99,0x9c, 0x7a,0x39,0x9f,0x1c,0xfc,0xcc);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("afe719cf-5dd1-44f2-999c-7a399f1cfccc")
ISpeechGrammarRule : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Attributes(
        SpeechRuleAttributes *attributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_InitialState(
        ISpeechGrammarRuleState **state) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Name(
        BSTR *name) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Id(
        LONG *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clear(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddResource(
        const BSTR name,
        const BSTR value) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddState(
        ISpeechGrammarRuleState **state) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechGrammarRule, 0xafe719cf, 0x5dd1, 0x44f2, 0x99,0x9c, 0x7a,0x39,0x9f,0x1c,0xfc,0xcc)
#endif
#else
typedef struct ISpeechGrammarRuleVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechGrammarRule *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechGrammarRule *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechGrammarRule *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechGrammarRule *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechGrammarRule methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Attributes)(
        ISpeechGrammarRule *This,
        SpeechRuleAttributes *attributes);

    HRESULT (STDMETHODCALLTYPE *get_InitialState)(
        ISpeechGrammarRule *This,
        ISpeechGrammarRuleState **state);

    HRESULT (STDMETHODCALLTYPE *get_Name)(
        ISpeechGrammarRule *This,
        BSTR *name);

    HRESULT (STDMETHODCALLTYPE *get_Id)(
        ISpeechGrammarRule *This,
        LONG *id);

    HRESULT (STDMETHODCALLTYPE *Clear)(
        ISpeechGrammarRule *This);

    HRESULT (STDMETHODCALLTYPE *AddResource)(
        ISpeechGrammarRule *This,
        const BSTR name,
        const BSTR value);

    HRESULT (STDMETHODCALLTYPE *AddState)(
        ISpeechGrammarRule *This,
        ISpeechGrammarRuleState **state);

    END_INTERFACE
} ISpeechGrammarRuleVtbl;

interface ISpeechGrammarRule {
    CONST_VTBL ISpeechGrammarRuleVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechGrammarRule_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechGrammarRule_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechGrammarRule_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechGrammarRule_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechGrammarRule_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechGrammarRule_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechGrammarRule_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechGrammarRule methods ***/
#define ISpeechGrammarRule_get_Attributes(This,attributes) (This)->lpVtbl->get_Attributes(This,attributes)
#define ISpeechGrammarRule_get_InitialState(This,state) (This)->lpVtbl->get_InitialState(This,state)
#define ISpeechGrammarRule_get_Name(This,name) (This)->lpVtbl->get_Name(This,name)
#define ISpeechGrammarRule_get_Id(This,id) (This)->lpVtbl->get_Id(This,id)
#define ISpeechGrammarRule_Clear(This) (This)->lpVtbl->Clear(This)
#define ISpeechGrammarRule_AddResource(This,name,value) (This)->lpVtbl->AddResource(This,name,value)
#define ISpeechGrammarRule_AddState(This,state) (This)->lpVtbl->AddState(This,state)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRule_QueryInterface(ISpeechGrammarRule* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechGrammarRule_AddRef(ISpeechGrammarRule* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechGrammarRule_Release(ISpeechGrammarRule* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRule_GetTypeInfoCount(ISpeechGrammarRule* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechGrammarRule_GetTypeInfo(ISpeechGrammarRule* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechGrammarRule_GetIDsOfNames(ISpeechGrammarRule* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechGrammarRule_Invoke(ISpeechGrammarRule* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechGrammarRule methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRule_get_Attributes(ISpeechGrammarRule* This,SpeechRuleAttributes *attributes) {
    return This->lpVtbl->get_Attributes(This,attributes);
}
static FORCEINLINE HRESULT ISpeechGrammarRule_get_InitialState(ISpeechGrammarRule* This,ISpeechGrammarRuleState **state) {
    return This->lpVtbl->get_InitialState(This,state);
}
static FORCEINLINE HRESULT ISpeechGrammarRule_get_Name(ISpeechGrammarRule* This,BSTR *name) {
    return This->lpVtbl->get_Name(This,name);
}
static FORCEINLINE HRESULT ISpeechGrammarRule_get_Id(ISpeechGrammarRule* This,LONG *id) {
    return This->lpVtbl->get_Id(This,id);
}
static FORCEINLINE HRESULT ISpeechGrammarRule_Clear(ISpeechGrammarRule* This) {
    return This->lpVtbl->Clear(This);
}
static FORCEINLINE HRESULT ISpeechGrammarRule_AddResource(ISpeechGrammarRule* This,const BSTR name,const BSTR value) {
    return This->lpVtbl->AddResource(This,name,value);
}
static FORCEINLINE HRESULT ISpeechGrammarRule_AddState(ISpeechGrammarRule* This,ISpeechGrammarRuleState **state) {
    return This->lpVtbl->AddState(This,state);
}
#endif
#endif

#endif


#endif  /* __ISpeechGrammarRule_INTERFACE_DEFINED__ */

typedef enum DISPIDSPTSI {
    DISPIDSPTSI_ActiveOffset = 1,
    DISPIDSPTSI_ActiveLength = 2,
    DISPIDSPTSI_SelectionOffset = 3,
    DISPIDSPTSI_SelectionLength = 4
} DISPIDSPTSI;
/*****************************************************************************
 * ISpeechTextSelectionInformation interface
 */
#ifndef __ISpeechTextSelectionInformation_INTERFACE_DEFINED__
#define __ISpeechTextSelectionInformation_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechTextSelectionInformation, 0x3b9c7e7a, 0x6eee, 0x4ded, 0x90,0x92, 0x11,0x65,0x72,0x79,0xad,0xbe);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3b9c7e7a-6eee-4ded-9092-11657279adbe")
ISpeechTextSelectionInformation : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE put_ActiveOffset(
        LONG offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ActiveOffset(
        LONG *offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ActiveLength(
        LONG length) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ActiveLength(
        LONG *length) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_SelectionOffset(
        LONG offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_SelectionOffset(
        LONG *offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_SelectionLength(
        LONG length) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_SelectionLength(
        LONG *length) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechTextSelectionInformation, 0x3b9c7e7a, 0x6eee, 0x4ded, 0x90,0x92, 0x11,0x65,0x72,0x79,0xad,0xbe)
#endif
#else
typedef struct ISpeechTextSelectionInformationVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechTextSelectionInformation *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechTextSelectionInformation *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechTextSelectionInformation *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechTextSelectionInformation *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechTextSelectionInformation methods ***/
    HRESULT (STDMETHODCALLTYPE *put_ActiveOffset)(
        ISpeechTextSelectionInformation *This,
        LONG offset);

    HRESULT (STDMETHODCALLTYPE *get_ActiveOffset)(
        ISpeechTextSelectionInformation *This,
        LONG *offset);

    HRESULT (STDMETHODCALLTYPE *put_ActiveLength)(
        ISpeechTextSelectionInformation *This,
        LONG length);

    HRESULT (STDMETHODCALLTYPE *get_ActiveLength)(
        ISpeechTextSelectionInformation *This,
        LONG *length);

    HRESULT (STDMETHODCALLTYPE *put_SelectionOffset)(
        ISpeechTextSelectionInformation *This,
        LONG offset);

    HRESULT (STDMETHODCALLTYPE *get_SelectionOffset)(
        ISpeechTextSelectionInformation *This,
        LONG *offset);

    HRESULT (STDMETHODCALLTYPE *put_SelectionLength)(
        ISpeechTextSelectionInformation *This,
        LONG length);

    HRESULT (STDMETHODCALLTYPE *get_SelectionLength)(
        ISpeechTextSelectionInformation *This,
        LONG *length);

    END_INTERFACE
} ISpeechTextSelectionInformationVtbl;

interface ISpeechTextSelectionInformation {
    CONST_VTBL ISpeechTextSelectionInformationVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechTextSelectionInformation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechTextSelectionInformation_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechTextSelectionInformation_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechTextSelectionInformation_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechTextSelectionInformation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechTextSelectionInformation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechTextSelectionInformation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechTextSelectionInformation methods ***/
#define ISpeechTextSelectionInformation_put_ActiveOffset(This,offset) (This)->lpVtbl->put_ActiveOffset(This,offset)
#define ISpeechTextSelectionInformation_get_ActiveOffset(This,offset) (This)->lpVtbl->get_ActiveOffset(This,offset)
#define ISpeechTextSelectionInformation_put_ActiveLength(This,length) (This)->lpVtbl->put_ActiveLength(This,length)
#define ISpeechTextSelectionInformation_get_ActiveLength(This,length) (This)->lpVtbl->get_ActiveLength(This,length)
#define ISpeechTextSelectionInformation_put_SelectionOffset(This,offset) (This)->lpVtbl->put_SelectionOffset(This,offset)
#define ISpeechTextSelectionInformation_get_SelectionOffset(This,offset) (This)->lpVtbl->get_SelectionOffset(This,offset)
#define ISpeechTextSelectionInformation_put_SelectionLength(This,length) (This)->lpVtbl->put_SelectionLength(This,length)
#define ISpeechTextSelectionInformation_get_SelectionLength(This,length) (This)->lpVtbl->get_SelectionLength(This,length)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_QueryInterface(ISpeechTextSelectionInformation* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechTextSelectionInformation_AddRef(ISpeechTextSelectionInformation* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechTextSelectionInformation_Release(ISpeechTextSelectionInformation* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_GetTypeInfoCount(ISpeechTextSelectionInformation* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_GetTypeInfo(ISpeechTextSelectionInformation* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_GetIDsOfNames(ISpeechTextSelectionInformation* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_Invoke(ISpeechTextSelectionInformation* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechTextSelectionInformation methods ***/
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_put_ActiveOffset(ISpeechTextSelectionInformation* This,LONG offset) {
    return This->lpVtbl->put_ActiveOffset(This,offset);
}
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_get_ActiveOffset(ISpeechTextSelectionInformation* This,LONG *offset) {
    return This->lpVtbl->get_ActiveOffset(This,offset);
}
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_put_ActiveLength(ISpeechTextSelectionInformation* This,LONG length) {
    return This->lpVtbl->put_ActiveLength(This,length);
}
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_get_ActiveLength(ISpeechTextSelectionInformation* This,LONG *length) {
    return This->lpVtbl->get_ActiveLength(This,length);
}
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_put_SelectionOffset(ISpeechTextSelectionInformation* This,LONG offset) {
    return This->lpVtbl->put_SelectionOffset(This,offset);
}
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_get_SelectionOffset(ISpeechTextSelectionInformation* This,LONG *offset) {
    return This->lpVtbl->get_SelectionOffset(This,offset);
}
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_put_SelectionLength(ISpeechTextSelectionInformation* This,LONG length) {
    return This->lpVtbl->put_SelectionLength(This,length);
}
static FORCEINLINE HRESULT ISpeechTextSelectionInformation_get_SelectionLength(ISpeechTextSelectionInformation* This,LONG *length) {
    return This->lpVtbl->get_SelectionLength(This,length);
}
#endif
#endif

#endif


#endif  /* __ISpeechTextSelectionInformation_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechGrammarRules {
    DISPID_SGRsCount = 1,
    DISPID_SGRsDynamic = 2,
    DISPID_SGRsAdd = 3,
    DISPID_SGRsCommit = 4,
    DISPID_SGRsCommitAndSave = 5,
    DISPID_SGRsFindRule = 6,
    DISPID_SGRsItem = DISPID_VALUE,
    DISPID_SGRs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechGrammarRules;
/*****************************************************************************
 * ISpeechGrammarRules interface
 */
#ifndef __ISpeechGrammarRules_INTERFACE_DEFINED__
#define __ISpeechGrammarRules_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechGrammarRules, 0x6ffa3b44, 0xfc2d, 0x40d1, 0x8a,0xfc, 0x32,0x91,0x1c,0x7f,0x1a,0xd1);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("6ffa3b44-fc2d-40d1-8afc-32911c7f1ad1")
ISpeechGrammarRules : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindRule(
        VARIANT id,
        ISpeechGrammarRule **rule) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        LONG index,
        ISpeechGrammarRule **rule) = 0;

    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
        IUnknown **enum_var) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Dynamic(
        VARIANT_BOOL *dynamic) = 0;

    virtual HRESULT STDMETHODCALLTYPE Add(
        BSTR name,
        SpeechRuleAttributes attributes,
        LONG id,
        ISpeechGrammarRule **rule) = 0;

    virtual HRESULT STDMETHODCALLTYPE Commit(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommitAndSave(
        BSTR *text,
        VARIANT *stream) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechGrammarRules, 0x6ffa3b44, 0xfc2d, 0x40d1, 0x8a,0xfc, 0x32,0x91,0x1c,0x7f,0x1a,0xd1)
#endif
#else
typedef struct ISpeechGrammarRulesVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechGrammarRules *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechGrammarRules *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechGrammarRules *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechGrammarRules *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechGrammarRules methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        ISpeechGrammarRules *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *FindRule)(
        ISpeechGrammarRules *This,
        VARIANT id,
        ISpeechGrammarRule **rule);

    HRESULT (STDMETHODCALLTYPE *Item)(
        ISpeechGrammarRules *This,
        LONG index,
        ISpeechGrammarRule **rule);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechGrammarRules *This,
        IUnknown **enum_var);

    HRESULT (STDMETHODCALLTYPE *get_Dynamic)(
        ISpeechGrammarRules *This,
        VARIANT_BOOL *dynamic);

    HRESULT (STDMETHODCALLTYPE *Add)(
        ISpeechGrammarRules *This,
        BSTR name,
        SpeechRuleAttributes attributes,
        LONG id,
        ISpeechGrammarRule **rule);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        ISpeechGrammarRules *This);

    HRESULT (STDMETHODCALLTYPE *CommitAndSave)(
        ISpeechGrammarRules *This,
        BSTR *text,
        VARIANT *stream);

    END_INTERFACE
} ISpeechGrammarRulesVtbl;

interface ISpeechGrammarRules {
    CONST_VTBL ISpeechGrammarRulesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechGrammarRules_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechGrammarRules_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechGrammarRules_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechGrammarRules_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechGrammarRules_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechGrammarRules_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechGrammarRules_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechGrammarRules methods ***/
#define ISpeechGrammarRules_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define ISpeechGrammarRules_FindRule(This,id,rule) (This)->lpVtbl->FindRule(This,id,rule)
#define ISpeechGrammarRules_Item(This,index,rule) (This)->lpVtbl->Item(This,index,rule)
#define ISpeechGrammarRules_get__NewEnum(This,enum_var) (This)->lpVtbl->get__NewEnum(This,enum_var)
#define ISpeechGrammarRules_get_Dynamic(This,dynamic) (This)->lpVtbl->get_Dynamic(This,dynamic)
#define ISpeechGrammarRules_Add(This,name,attributes,id,rule) (This)->lpVtbl->Add(This,name,attributes,id,rule)
#define ISpeechGrammarRules_Commit(This) (This)->lpVtbl->Commit(This)
#define ISpeechGrammarRules_CommitAndSave(This,text,stream) (This)->lpVtbl->CommitAndSave(This,text,stream)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRules_QueryInterface(ISpeechGrammarRules* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechGrammarRules_AddRef(ISpeechGrammarRules* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechGrammarRules_Release(ISpeechGrammarRules* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRules_GetTypeInfoCount(ISpeechGrammarRules* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechGrammarRules_GetTypeInfo(ISpeechGrammarRules* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechGrammarRules_GetIDsOfNames(ISpeechGrammarRules* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechGrammarRules_Invoke(ISpeechGrammarRules* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechGrammarRules methods ***/
static FORCEINLINE HRESULT ISpeechGrammarRules_get_Count(ISpeechGrammarRules* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static FORCEINLINE HRESULT ISpeechGrammarRules_FindRule(ISpeechGrammarRules* This,VARIANT id,ISpeechGrammarRule **rule) {
    return This->lpVtbl->FindRule(This,id,rule);
}
static FORCEINLINE HRESULT ISpeechGrammarRules_Item(ISpeechGrammarRules* This,LONG index,ISpeechGrammarRule **rule) {
    return This->lpVtbl->Item(This,index,rule);
}
static FORCEINLINE HRESULT ISpeechGrammarRules_get__NewEnum(ISpeechGrammarRules* This,IUnknown **enum_var) {
    return This->lpVtbl->get__NewEnum(This,enum_var);
}
static FORCEINLINE HRESULT ISpeechGrammarRules_get_Dynamic(ISpeechGrammarRules* This,VARIANT_BOOL *dynamic) {
    return This->lpVtbl->get_Dynamic(This,dynamic);
}
static FORCEINLINE HRESULT ISpeechGrammarRules_Add(ISpeechGrammarRules* This,BSTR name,SpeechRuleAttributes attributes,LONG id,ISpeechGrammarRule **rule) {
    return This->lpVtbl->Add(This,name,attributes,id,rule);
}
static FORCEINLINE HRESULT ISpeechGrammarRules_Commit(ISpeechGrammarRules* This) {
    return This->lpVtbl->Commit(This);
}
static FORCEINLINE HRESULT ISpeechGrammarRules_CommitAndSave(ISpeechGrammarRules* This,BSTR *text,VARIANT *stream) {
    return This->lpVtbl->CommitAndSave(This,text,stream);
}
#endif
#endif

#endif


#endif  /* __ISpeechGrammarRules_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechRecoGrammar interface
 */
#ifndef __ISpeechRecoGrammar_INTERFACE_DEFINED__
#define __ISpeechRecoGrammar_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechRecoGrammar, 0xb6d6f79f, 0x2158, 0x4e50, 0xb5,0xbc, 0x9a,0x9c,0xcd,0x85,0x2a,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b6d6f79f-2158-4e50-b5bc-9a9ccd852a09")
ISpeechRecoGrammar : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Id(
        VARIANT *id) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RecoContext(
        ISpeechRecoContext **context) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_State(
        SpeechGrammarState state) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_State(
        SpeechGrammarState *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Rules(
        ISpeechGrammarRules **rules) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        SpeechLanguageId language = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdLoadFromFile(
        const BSTR filename,
        SpeechLoadOption option = SLOStatic) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdLoadFromObject(
        const BSTR classid,
        const BSTR grammarname,
        SpeechLoadOption option = SLOStatic) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdLoadFromResource(
        LONG mod,
        VARIANT name,
        VARIANT type,
        SpeechLanguageId language,
        SpeechLoadOption option = SLOStatic) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdLoadFromMemory(
        VARIANT data,
        SpeechLoadOption option = SLOStatic) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdLoadFromProprietaryGrammar(
        const BSTR guid,
        const BSTR string,
        VARIANT data,
        SpeechLoadOption option = SLOStatic) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdSetRuleState(
        const BSTR name,
        SpeechRuleState state) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdSetRuleIdState(
        LONG rule,
        SpeechRuleState State) = 0;

    virtual HRESULT STDMETHODCALLTYPE DictationLoad(
        const BSTR topic = L"",
        SpeechLoadOption option = SLOStatic) = 0;

    virtual HRESULT STDMETHODCALLTYPE DictationUnload(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE DictationSetState(
        SpeechRuleState State) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetWordSequenceData(
        const BSTR text,
        LONG length,
        ISpeechTextSelectionInformation *info) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTextSelection(
        ISpeechTextSelectionInformation *info) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsPronounceable(
        const BSTR word,
        SpeechWordPronounceable *pronounceable) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechRecoGrammar, 0xb6d6f79f, 0x2158, 0x4e50, 0xb5,0xbc, 0x9a,0x9c,0xcd,0x85,0x2a,0x09)
#endif
#else
typedef struct ISpeechRecoGrammarVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechRecoGrammar *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechRecoGrammar *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechRecoGrammar *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechRecoGrammar *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechRecoGrammar methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Id)(
        ISpeechRecoGrammar *This,
        VARIANT *id);

    HRESULT (STDMETHODCALLTYPE *get_RecoContext)(
        ISpeechRecoGrammar *This,
        ISpeechRecoContext **context);

    HRESULT (STDMETHODCALLTYPE *put_State)(
        ISpeechRecoGrammar *This,
        SpeechGrammarState state);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        ISpeechRecoGrammar *This,
        SpeechGrammarState *state);

    HRESULT (STDMETHODCALLTYPE *get_Rules)(
        ISpeechRecoGrammar *This,
        ISpeechGrammarRules **rules);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        ISpeechRecoGrammar *This,
        SpeechLanguageId language);

    HRESULT (STDMETHODCALLTYPE *CmdLoadFromFile)(
        ISpeechRecoGrammar *This,
        const BSTR filename,
        SpeechLoadOption option);

    HRESULT (STDMETHODCALLTYPE *CmdLoadFromObject)(
        ISpeechRecoGrammar *This,
        const BSTR classid,
        const BSTR grammarname,
        SpeechLoadOption option);

    HRESULT (STDMETHODCALLTYPE *CmdLoadFromResource)(
        ISpeechRecoGrammar *This,
        LONG mod,
        VARIANT name,
        VARIANT type,
        SpeechLanguageId language,
        SpeechLoadOption option);

    HRESULT (STDMETHODCALLTYPE *CmdLoadFromMemory)(
        ISpeechRecoGrammar *This,
        VARIANT data,
        SpeechLoadOption option);

    HRESULT (STDMETHODCALLTYPE *CmdLoadFromProprietaryGrammar)(
        ISpeechRecoGrammar *This,
        const BSTR guid,
        const BSTR string,
        VARIANT data,
        SpeechLoadOption option);

    HRESULT (STDMETHODCALLTYPE *CmdSetRuleState)(
        ISpeechRecoGrammar *This,
        const BSTR name,
        SpeechRuleState state);

    HRESULT (STDMETHODCALLTYPE *CmdSetRuleIdState)(
        ISpeechRecoGrammar *This,
        LONG rule,
        SpeechRuleState State);

    HRESULT (STDMETHODCALLTYPE *DictationLoad)(
        ISpeechRecoGrammar *This,
        const BSTR topic,
        SpeechLoadOption option);

    HRESULT (STDMETHODCALLTYPE *DictationUnload)(
        ISpeechRecoGrammar *This);

    HRESULT (STDMETHODCALLTYPE *DictationSetState)(
        ISpeechRecoGrammar *This,
        SpeechRuleState State);

    HRESULT (STDMETHODCALLTYPE *SetWordSequenceData)(
        ISpeechRecoGrammar *This,
        const BSTR text,
        LONG length,
        ISpeechTextSelectionInformation *info);

    HRESULT (STDMETHODCALLTYPE *SetTextSelection)(
        ISpeechRecoGrammar *This,
        ISpeechTextSelectionInformation *info);

    HRESULT (STDMETHODCALLTYPE *IsPronounceable)(
        ISpeechRecoGrammar *This,
        const BSTR word,
        SpeechWordPronounceable *pronounceable);

    END_INTERFACE
} ISpeechRecoGrammarVtbl;

interface ISpeechRecoGrammar {
    CONST_VTBL ISpeechRecoGrammarVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechRecoGrammar_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechRecoGrammar_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechRecoGrammar_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechRecoGrammar_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechRecoGrammar_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechRecoGrammar_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechRecoGrammar_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechRecoGrammar methods ***/
#define ISpeechRecoGrammar_get_Id(This,id) (This)->lpVtbl->get_Id(This,id)
#define ISpeechRecoGrammar_get_RecoContext(This,context) (This)->lpVtbl->get_RecoContext(This,context)
#define ISpeechRecoGrammar_put_State(This,state) (This)->lpVtbl->put_State(This,state)
#define ISpeechRecoGrammar_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define ISpeechRecoGrammar_get_Rules(This,rules) (This)->lpVtbl->get_Rules(This,rules)
#define ISpeechRecoGrammar_Reset(This,language) (This)->lpVtbl->Reset(This,language)
#define ISpeechRecoGrammar_CmdLoadFromFile(This,filename,option) (This)->lpVtbl->CmdLoadFromFile(This,filename,option)
#define ISpeechRecoGrammar_CmdLoadFromObject(This,classid,grammarname,option) (This)->lpVtbl->CmdLoadFromObject(This,classid,grammarname,option)
#define ISpeechRecoGrammar_CmdLoadFromResource(This,mod,name,type,language,option) (This)->lpVtbl->CmdLoadFromResource(This,mod,name,type,language,option)
#define ISpeechRecoGrammar_CmdLoadFromMemory(This,data,option) (This)->lpVtbl->CmdLoadFromMemory(This,data,option)
#define ISpeechRecoGrammar_CmdLoadFromProprietaryGrammar(This,guid,string,data,option) (This)->lpVtbl->CmdLoadFromProprietaryGrammar(This,guid,string,data,option)
#define ISpeechRecoGrammar_CmdSetRuleState(This,name,state) (This)->lpVtbl->CmdSetRuleState(This,name,state)
#define ISpeechRecoGrammar_CmdSetRuleIdState(This,rule,State) (This)->lpVtbl->CmdSetRuleIdState(This,rule,State)
#define ISpeechRecoGrammar_DictationLoad(This,topic,option) (This)->lpVtbl->DictationLoad(This,topic,option)
#define ISpeechRecoGrammar_DictationUnload(This) (This)->lpVtbl->DictationUnload(This)
#define ISpeechRecoGrammar_DictationSetState(This,State) (This)->lpVtbl->DictationSetState(This,State)
#define ISpeechRecoGrammar_SetWordSequenceData(This,text,length,info) (This)->lpVtbl->SetWordSequenceData(This,text,length,info)
#define ISpeechRecoGrammar_SetTextSelection(This,info) (This)->lpVtbl->SetTextSelection(This,info)
#define ISpeechRecoGrammar_IsPronounceable(This,word,pronounceable) (This)->lpVtbl->IsPronounceable(This,word,pronounceable)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechRecoGrammar_QueryInterface(ISpeechRecoGrammar* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechRecoGrammar_AddRef(ISpeechRecoGrammar* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechRecoGrammar_Release(ISpeechRecoGrammar* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechRecoGrammar_GetTypeInfoCount(ISpeechRecoGrammar* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_GetTypeInfo(ISpeechRecoGrammar* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_GetIDsOfNames(ISpeechRecoGrammar* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_Invoke(ISpeechRecoGrammar* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechRecoGrammar methods ***/
static FORCEINLINE HRESULT ISpeechRecoGrammar_get_Id(ISpeechRecoGrammar* This,VARIANT *id) {
    return This->lpVtbl->get_Id(This,id);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_get_RecoContext(ISpeechRecoGrammar* This,ISpeechRecoContext **context) {
    return This->lpVtbl->get_RecoContext(This,context);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_put_State(ISpeechRecoGrammar* This,SpeechGrammarState state) {
    return This->lpVtbl->put_State(This,state);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_get_State(ISpeechRecoGrammar* This,SpeechGrammarState *state) {
    return This->lpVtbl->get_State(This,state);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_get_Rules(ISpeechRecoGrammar* This,ISpeechGrammarRules **rules) {
    return This->lpVtbl->get_Rules(This,rules);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_Reset(ISpeechRecoGrammar* This,SpeechLanguageId language) {
    return This->lpVtbl->Reset(This,language);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_CmdLoadFromFile(ISpeechRecoGrammar* This,const BSTR filename,SpeechLoadOption option) {
    return This->lpVtbl->CmdLoadFromFile(This,filename,option);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_CmdLoadFromObject(ISpeechRecoGrammar* This,const BSTR classid,const BSTR grammarname,SpeechLoadOption option) {
    return This->lpVtbl->CmdLoadFromObject(This,classid,grammarname,option);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_CmdLoadFromResource(ISpeechRecoGrammar* This,LONG mod,VARIANT name,VARIANT type,SpeechLanguageId language,SpeechLoadOption option) {
    return This->lpVtbl->CmdLoadFromResource(This,mod,name,type,language,option);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_CmdLoadFromMemory(ISpeechRecoGrammar* This,VARIANT data,SpeechLoadOption option) {
    return This->lpVtbl->CmdLoadFromMemory(This,data,option);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_CmdLoadFromProprietaryGrammar(ISpeechRecoGrammar* This,const BSTR guid,const BSTR string,VARIANT data,SpeechLoadOption option) {
    return This->lpVtbl->CmdLoadFromProprietaryGrammar(This,guid,string,data,option);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_CmdSetRuleState(ISpeechRecoGrammar* This,const BSTR name,SpeechRuleState state) {
    return This->lpVtbl->CmdSetRuleState(This,name,state);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_CmdSetRuleIdState(ISpeechRecoGrammar* This,LONG rule,SpeechRuleState State) {
    return This->lpVtbl->CmdSetRuleIdState(This,rule,State);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_DictationLoad(ISpeechRecoGrammar* This,const BSTR topic,SpeechLoadOption option) {
    return This->lpVtbl->DictationLoad(This,topic,option);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_DictationUnload(ISpeechRecoGrammar* This) {
    return This->lpVtbl->DictationUnload(This);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_DictationSetState(ISpeechRecoGrammar* This,SpeechRuleState State) {
    return This->lpVtbl->DictationSetState(This,State);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_SetWordSequenceData(ISpeechRecoGrammar* This,const BSTR text,LONG length,ISpeechTextSelectionInformation *info) {
    return This->lpVtbl->SetWordSequenceData(This,text,length,info);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_SetTextSelection(ISpeechRecoGrammar* This,ISpeechTextSelectionInformation *info) {
    return This->lpVtbl->SetTextSelection(This,info);
}
static FORCEINLINE HRESULT ISpeechRecoGrammar_IsPronounceable(ISpeechRecoGrammar* This,const BSTR word,SpeechWordPronounceable *pronounceable) {
    return This->lpVtbl->IsPronounceable(This,word,pronounceable);
}
#endif
#endif

#endif


#endif  /* __ISpeechRecoGrammar_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechRecoContext interface
 */
#ifndef __ISpeechRecoContext_INTERFACE_DEFINED__
#define __ISpeechRecoContext_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechRecoContext, 0x580aa49d, 0x7e1e, 0x4809, 0xb8,0xe2, 0x57,0xda,0x80,0x61,0x04,0xb8);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("580aa49d-7e1e-4809-b8e2-57da806104b8")
ISpeechRecoContext : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Recognizer(
        ISpeechRecognizer **recognizer) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioInputInterferenceStatus(
        SpeechInterference *interference) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RequestedUIType(
        BSTR *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_Voice(
        ISpeechVoice *voice) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Voice(
        ISpeechVoice **voice) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_AllowVoiceFormatMatchingOnNextSet(
        VARIANT_BOOL allow) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AllowVoiceFormatMatchingOnNextSet(
        VARIANT_BOOL *allow) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_VoicePurgeEvent(
        SpeechRecoEvents interest) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_VoicePurgeEvent(
        SpeechRecoEvents *interest) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_EventInterests(
        SpeechRecoEvents interest) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EventInterests(
        SpeechRecoEvents *interest) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_CmdMaxAlternates(
        LONG alternates) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CmdMaxAlternates(
        LONG *alternates) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_State(
        SpeechRecoContextState state) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_State(
        SpeechRecoContextState *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_RetainedAudio(
        SpeechRetainedAudioOptions option) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RetainedAudio(
        SpeechRetainedAudioOptions *option) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_RetainedAudioFormat(
        ISpeechAudioFormat *format) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RetainedAudioFormat(
        ISpeechAudioFormat **format) = 0;

    virtual HRESULT STDMETHODCALLTYPE Pause(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateGrammar(
        VARIANT id,
        ISpeechRecoGrammar **grammar) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateResultFromMemory(
        VARIANT *block,
        ISpeechRecoResult **result) = 0;

    virtual HRESULT STDMETHODCALLTYPE Bookmark(
        SpeechBookmarkOptions options,
        VARIANT pos,
        VARIANT bookmark) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAdaptationData(
        BSTR adaptation) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechRecoContext, 0x580aa49d, 0x7e1e, 0x4809, 0xb8,0xe2, 0x57,0xda,0x80,0x61,0x04,0xb8)
#endif
#else
typedef struct ISpeechRecoContextVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechRecoContext *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechRecoContext *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechRecoContext *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechRecoContext *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechRecoContext methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Recognizer)(
        ISpeechRecoContext *This,
        ISpeechRecognizer **recognizer);

    HRESULT (STDMETHODCALLTYPE *get_AudioInputInterferenceStatus)(
        ISpeechRecoContext *This,
        SpeechInterference *interference);

    HRESULT (STDMETHODCALLTYPE *get_RequestedUIType)(
        ISpeechRecoContext *This,
        BSTR *type);

    HRESULT (STDMETHODCALLTYPE *putref_Voice)(
        ISpeechRecoContext *This,
        ISpeechVoice *voice);

    HRESULT (STDMETHODCALLTYPE *get_Voice)(
        ISpeechRecoContext *This,
        ISpeechVoice **voice);

    HRESULT (STDMETHODCALLTYPE *put_AllowVoiceFormatMatchingOnNextSet)(
        ISpeechRecoContext *This,
        VARIANT_BOOL allow);

    HRESULT (STDMETHODCALLTYPE *get_AllowVoiceFormatMatchingOnNextSet)(
        ISpeechRecoContext *This,
        VARIANT_BOOL *allow);

    HRESULT (STDMETHODCALLTYPE *put_VoicePurgeEvent)(
        ISpeechRecoContext *This,
        SpeechRecoEvents interest);

    HRESULT (STDMETHODCALLTYPE *get_VoicePurgeEvent)(
        ISpeechRecoContext *This,
        SpeechRecoEvents *interest);

    HRESULT (STDMETHODCALLTYPE *put_EventInterests)(
        ISpeechRecoContext *This,
        SpeechRecoEvents interest);

    HRESULT (STDMETHODCALLTYPE *get_EventInterests)(
        ISpeechRecoContext *This,
        SpeechRecoEvents *interest);

    HRESULT (STDMETHODCALLTYPE *put_CmdMaxAlternates)(
        ISpeechRecoContext *This,
        LONG alternates);

    HRESULT (STDMETHODCALLTYPE *get_CmdMaxAlternates)(
        ISpeechRecoContext *This,
        LONG *alternates);

    HRESULT (STDMETHODCALLTYPE *put_State)(
        ISpeechRecoContext *This,
        SpeechRecoContextState state);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        ISpeechRecoContext *This,
        SpeechRecoContextState *state);

    HRESULT (STDMETHODCALLTYPE *put_RetainedAudio)(
        ISpeechRecoContext *This,
        SpeechRetainedAudioOptions option);

    HRESULT (STDMETHODCALLTYPE *get_RetainedAudio)(
        ISpeechRecoContext *This,
        SpeechRetainedAudioOptions *option);

    HRESULT (STDMETHODCALLTYPE *putref_RetainedAudioFormat)(
        ISpeechRecoContext *This,
        ISpeechAudioFormat *format);

    HRESULT (STDMETHODCALLTYPE *get_RetainedAudioFormat)(
        ISpeechRecoContext *This,
        ISpeechAudioFormat **format);

    HRESULT (STDMETHODCALLTYPE *Pause)(
        ISpeechRecoContext *This);

    HRESULT (STDMETHODCALLTYPE *Resume)(
        ISpeechRecoContext *This);

    HRESULT (STDMETHODCALLTYPE *CreateGrammar)(
        ISpeechRecoContext *This,
        VARIANT id,
        ISpeechRecoGrammar **grammar);

    HRESULT (STDMETHODCALLTYPE *CreateResultFromMemory)(
        ISpeechRecoContext *This,
        VARIANT *block,
        ISpeechRecoResult **result);

    HRESULT (STDMETHODCALLTYPE *Bookmark)(
        ISpeechRecoContext *This,
        SpeechBookmarkOptions options,
        VARIANT pos,
        VARIANT bookmark);

    HRESULT (STDMETHODCALLTYPE *SetAdaptationData)(
        ISpeechRecoContext *This,
        BSTR adaptation);

    END_INTERFACE
} ISpeechRecoContextVtbl;

interface ISpeechRecoContext {
    CONST_VTBL ISpeechRecoContextVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechRecoContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechRecoContext_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechRecoContext_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechRecoContext_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechRecoContext_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechRecoContext_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechRecoContext_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechRecoContext methods ***/
#define ISpeechRecoContext_get_Recognizer(This,recognizer) (This)->lpVtbl->get_Recognizer(This,recognizer)
#define ISpeechRecoContext_get_AudioInputInterferenceStatus(This,interference) (This)->lpVtbl->get_AudioInputInterferenceStatus(This,interference)
#define ISpeechRecoContext_get_RequestedUIType(This,type) (This)->lpVtbl->get_RequestedUIType(This,type)
#define ISpeechRecoContext_putref_Voice(This,voice) (This)->lpVtbl->putref_Voice(This,voice)
#define ISpeechRecoContext_get_Voice(This,voice) (This)->lpVtbl->get_Voice(This,voice)
#define ISpeechRecoContext_put_AllowVoiceFormatMatchingOnNextSet(This,allow) (This)->lpVtbl->put_AllowVoiceFormatMatchingOnNextSet(This,allow)
#define ISpeechRecoContext_get_AllowVoiceFormatMatchingOnNextSet(This,allow) (This)->lpVtbl->get_AllowVoiceFormatMatchingOnNextSet(This,allow)
#define ISpeechRecoContext_put_VoicePurgeEvent(This,interest) (This)->lpVtbl->put_VoicePurgeEvent(This,interest)
#define ISpeechRecoContext_get_VoicePurgeEvent(This,interest) (This)->lpVtbl->get_VoicePurgeEvent(This,interest)
#define ISpeechRecoContext_put_EventInterests(This,interest) (This)->lpVtbl->put_EventInterests(This,interest)
#define ISpeechRecoContext_get_EventInterests(This,interest) (This)->lpVtbl->get_EventInterests(This,interest)
#define ISpeechRecoContext_put_CmdMaxAlternates(This,alternates) (This)->lpVtbl->put_CmdMaxAlternates(This,alternates)
#define ISpeechRecoContext_get_CmdMaxAlternates(This,alternates) (This)->lpVtbl->get_CmdMaxAlternates(This,alternates)
#define ISpeechRecoContext_put_State(This,state) (This)->lpVtbl->put_State(This,state)
#define ISpeechRecoContext_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define ISpeechRecoContext_put_RetainedAudio(This,option) (This)->lpVtbl->put_RetainedAudio(This,option)
#define ISpeechRecoContext_get_RetainedAudio(This,option) (This)->lpVtbl->get_RetainedAudio(This,option)
#define ISpeechRecoContext_putref_RetainedAudioFormat(This,format) (This)->lpVtbl->putref_RetainedAudioFormat(This,format)
#define ISpeechRecoContext_get_RetainedAudioFormat(This,format) (This)->lpVtbl->get_RetainedAudioFormat(This,format)
#define ISpeechRecoContext_Pause(This) (This)->lpVtbl->Pause(This)
#define ISpeechRecoContext_Resume(This) (This)->lpVtbl->Resume(This)
#define ISpeechRecoContext_CreateGrammar(This,id,grammar) (This)->lpVtbl->CreateGrammar(This,id,grammar)
#define ISpeechRecoContext_CreateResultFromMemory(This,block,result) (This)->lpVtbl->CreateResultFromMemory(This,block,result)
#define ISpeechRecoContext_Bookmark(This,options,pos,bookmark) (This)->lpVtbl->Bookmark(This,options,pos,bookmark)
#define ISpeechRecoContext_SetAdaptationData(This,adaptation) (This)->lpVtbl->SetAdaptationData(This,adaptation)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechRecoContext_QueryInterface(ISpeechRecoContext* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechRecoContext_AddRef(ISpeechRecoContext* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechRecoContext_Release(ISpeechRecoContext* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechRecoContext_GetTypeInfoCount(ISpeechRecoContext* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechRecoContext_GetTypeInfo(ISpeechRecoContext* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechRecoContext_GetIDsOfNames(ISpeechRecoContext* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechRecoContext_Invoke(ISpeechRecoContext* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechRecoContext methods ***/
static FORCEINLINE HRESULT ISpeechRecoContext_get_Recognizer(ISpeechRecoContext* This,ISpeechRecognizer **recognizer) {
    return This->lpVtbl->get_Recognizer(This,recognizer);
}
static FORCEINLINE HRESULT ISpeechRecoContext_get_AudioInputInterferenceStatus(ISpeechRecoContext* This,SpeechInterference *interference) {
    return This->lpVtbl->get_AudioInputInterferenceStatus(This,interference);
}
static FORCEINLINE HRESULT ISpeechRecoContext_get_RequestedUIType(ISpeechRecoContext* This,BSTR *type) {
    return This->lpVtbl->get_RequestedUIType(This,type);
}
static FORCEINLINE HRESULT ISpeechRecoContext_putref_Voice(ISpeechRecoContext* This,ISpeechVoice *voice) {
    return This->lpVtbl->putref_Voice(This,voice);
}
static FORCEINLINE HRESULT ISpeechRecoContext_get_Voice(ISpeechRecoContext* This,ISpeechVoice **voice) {
    return This->lpVtbl->get_Voice(This,voice);
}
static FORCEINLINE HRESULT ISpeechRecoContext_put_AllowVoiceFormatMatchingOnNextSet(ISpeechRecoContext* This,VARIANT_BOOL allow) {
    return This->lpVtbl->put_AllowVoiceFormatMatchingOnNextSet(This,allow);
}
static FORCEINLINE HRESULT ISpeechRecoContext_get_AllowVoiceFormatMatchingOnNextSet(ISpeechRecoContext* This,VARIANT_BOOL *allow) {
    return This->lpVtbl->get_AllowVoiceFormatMatchingOnNextSet(This,allow);
}
static FORCEINLINE HRESULT ISpeechRecoContext_put_VoicePurgeEvent(ISpeechRecoContext* This,SpeechRecoEvents interest) {
    return This->lpVtbl->put_VoicePurgeEvent(This,interest);
}
static FORCEINLINE HRESULT ISpeechRecoContext_get_VoicePurgeEvent(ISpeechRecoContext* This,SpeechRecoEvents *interest) {
    return This->lpVtbl->get_VoicePurgeEvent(This,interest);
}
static FORCEINLINE HRESULT ISpeechRecoContext_put_EventInterests(ISpeechRecoContext* This,SpeechRecoEvents interest) {
    return This->lpVtbl->put_EventInterests(This,interest);
}
static FORCEINLINE HRESULT ISpeechRecoContext_get_EventInterests(ISpeechRecoContext* This,SpeechRecoEvents *interest) {
    return This->lpVtbl->get_EventInterests(This,interest);
}
static FORCEINLINE HRESULT ISpeechRecoContext_put_CmdMaxAlternates(ISpeechRecoContext* This,LONG alternates) {
    return This->lpVtbl->put_CmdMaxAlternates(This,alternates);
}
static FORCEINLINE HRESULT ISpeechRecoContext_get_CmdMaxAlternates(ISpeechRecoContext* This,LONG *alternates) {
    return This->lpVtbl->get_CmdMaxAlternates(This,alternates);
}
static FORCEINLINE HRESULT ISpeechRecoContext_put_State(ISpeechRecoContext* This,SpeechRecoContextState state) {
    return This->lpVtbl->put_State(This,state);
}
static FORCEINLINE HRESULT ISpeechRecoContext_get_State(ISpeechRecoContext* This,SpeechRecoContextState *state) {
    return This->lpVtbl->get_State(This,state);
}
static FORCEINLINE HRESULT ISpeechRecoContext_put_RetainedAudio(ISpeechRecoContext* This,SpeechRetainedAudioOptions option) {
    return This->lpVtbl->put_RetainedAudio(This,option);
}
static FORCEINLINE HRESULT ISpeechRecoContext_get_RetainedAudio(ISpeechRecoContext* This,SpeechRetainedAudioOptions *option) {
    return This->lpVtbl->get_RetainedAudio(This,option);
}
static FORCEINLINE HRESULT ISpeechRecoContext_putref_RetainedAudioFormat(ISpeechRecoContext* This,ISpeechAudioFormat *format) {
    return This->lpVtbl->putref_RetainedAudioFormat(This,format);
}
static FORCEINLINE HRESULT ISpeechRecoContext_get_RetainedAudioFormat(ISpeechRecoContext* This,ISpeechAudioFormat **format) {
    return This->lpVtbl->get_RetainedAudioFormat(This,format);
}
static FORCEINLINE HRESULT ISpeechRecoContext_Pause(ISpeechRecoContext* This) {
    return This->lpVtbl->Pause(This);
}
static FORCEINLINE HRESULT ISpeechRecoContext_Resume(ISpeechRecoContext* This) {
    return This->lpVtbl->Resume(This);
}
static FORCEINLINE HRESULT ISpeechRecoContext_CreateGrammar(ISpeechRecoContext* This,VARIANT id,ISpeechRecoGrammar **grammar) {
    return This->lpVtbl->CreateGrammar(This,id,grammar);
}
static FORCEINLINE HRESULT ISpeechRecoContext_CreateResultFromMemory(ISpeechRecoContext* This,VARIANT *block,ISpeechRecoResult **result) {
    return This->lpVtbl->CreateResultFromMemory(This,block,result);
}
static FORCEINLINE HRESULT ISpeechRecoContext_Bookmark(ISpeechRecoContext* This,SpeechBookmarkOptions options,VARIANT pos,VARIANT bookmark) {
    return This->lpVtbl->Bookmark(This,options,pos,bookmark);
}
static FORCEINLINE HRESULT ISpeechRecoContext_SetAdaptationData(ISpeechRecoContext* This,BSTR adaptation) {
    return This->lpVtbl->SetAdaptationData(This,adaptation);
}
#endif
#endif

#endif


#endif  /* __ISpeechRecoContext_INTERFACE_DEFINED__ */

typedef enum DISPID_SpeechRecognizer {
    DISPID_SRRecognizer = 1,
    DISPID_SRAllowAudioInputFormatChangesOnNextSet = 2,
    DISPID_SRAudioInput = 3,
    DISPID_SRAudioInputStream = 4,
    DISPID_SRIsShared = 5,
    DISPID_SRState = 6,
    DISPID_SRStatus = 7,
    DISPID_SRProfile = 8,
    DISPID_SREmulateRecognition = 9,
    DISPID_SRCreateRecoContext = 10,
    DISPID_SRGetFormat = 11,
    DISPID_SRSetPropertyNumber = 12,
    DISPID_SRGetPropertyNumber = 13,
    DISPID_SRSetPropertyString = 14,
    DISPID_SRGetPropertyString = 15,
    DISPID_SRIsUISupported = 16,
    DISPID_SRDisplayUI = 17,
    DISPID_SRGetRecognizers = 18,
    DISPID_SVGetAudioInputs = 19,
    DISPID_SVGetProfiles = 20
} DISPID_SpeechRecognizer;
/*****************************************************************************
 * ISpeechRecognizer interface
 */
#ifndef __ISpeechRecognizer_INTERFACE_DEFINED__
#define __ISpeechRecognizer_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechRecognizer, 0x2d5f1c0c, 0xbd75, 0x4b08, 0x94,0x78, 0x3b,0x11,0xfe,0xa2,0x58,0x6c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2d5f1c0c-bd75-4b08-9478-3b11fea2586c")
ISpeechRecognizer : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE putref_Recognizer(
        ISpeechObjectToken *recognizer) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Recognizer(
        ISpeechObjectToken **recognizer) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_AllowAudioInputFormatChangesOnNextSet(
        VARIANT_BOOL allow) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AllowAudioInputFormatChangesOnNextSet(
        VARIANT_BOOL *allow) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_AudioInput(
        ISpeechObjectToken *input = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioInput(
        ISpeechObjectToken **input) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_AudioInputStream(
        ISpeechBaseStream *input = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioInputStream(
        ISpeechBaseStream **input) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_IsShared(
        VARIANT_BOOL *shared) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_State(
        SpeechRecognizerState state) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_State(
        SpeechRecognizerState *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Status(
        ISpeechRecognizerStatus **status) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_Profile(
        ISpeechObjectToken *profile = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Profile(
        ISpeechObjectToken **profile) = 0;

    virtual HRESULT STDMETHODCALLTYPE EmulateRecognition(
        VARIANT elements,
        VARIANT *attributes = 0,
        LONG id = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateRecoContext(
        ISpeechRecoContext **ncontext) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFormat(
        SpeechFormatType speechtype,
        ISpeechAudioFormat **audioformat) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPropertyNumber(
        const BSTR name,
        LONG value,
        VARIANT_BOOL *supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyNumber(
        const BSTR name,
        LONG *value,
        VARIANT_BOOL *supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPropertyString(
        const BSTR name,
        const BSTR value,
        VARIANT_BOOL *supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyString(
        const BSTR name,
        BSTR *value,
        VARIANT_BOOL *supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsUISupported(
        const BSTR type,
        const VARIANT *data,
        VARIANT_BOOL *supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisplayUI(
        LONG hWnd,
        BSTR title,
        const BSTR type,
        const VARIANT *data = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRecognizers(
        BSTR required,
        BSTR optional,
        ISpeechObjectTokens **tokens) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAudioInputs(
        BSTR required,
        BSTR optional,
        ISpeechObjectTokens **tokens) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProfiles(
        BSTR required,
        BSTR optional,
        ISpeechObjectTokens **tokens) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechRecognizer, 0x2d5f1c0c, 0xbd75, 0x4b08, 0x94,0x78, 0x3b,0x11,0xfe,0xa2,0x58,0x6c)
#endif
#else
typedef struct ISpeechRecognizerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechRecognizer *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechRecognizer *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechRecognizer *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechRecognizer *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechRecognizer methods ***/
    HRESULT (STDMETHODCALLTYPE *putref_Recognizer)(
        ISpeechRecognizer *This,
        ISpeechObjectToken *recognizer);

    HRESULT (STDMETHODCALLTYPE *get_Recognizer)(
        ISpeechRecognizer *This,
        ISpeechObjectToken **recognizer);

    HRESULT (STDMETHODCALLTYPE *put_AllowAudioInputFormatChangesOnNextSet)(
        ISpeechRecognizer *This,
        VARIANT_BOOL allow);

    HRESULT (STDMETHODCALLTYPE *get_AllowAudioInputFormatChangesOnNextSet)(
        ISpeechRecognizer *This,
        VARIANT_BOOL *allow);

    HRESULT (STDMETHODCALLTYPE *putref_AudioInput)(
        ISpeechRecognizer *This,
        ISpeechObjectToken *input);

    HRESULT (STDMETHODCALLTYPE *get_AudioInput)(
        ISpeechRecognizer *This,
        ISpeechObjectToken **input);

    HRESULT (STDMETHODCALLTYPE *putref_AudioInputStream)(
        ISpeechRecognizer *This,
        ISpeechBaseStream *input);

    HRESULT (STDMETHODCALLTYPE *get_AudioInputStream)(
        ISpeechRecognizer *This,
        ISpeechBaseStream **input);

    HRESULT (STDMETHODCALLTYPE *get_IsShared)(
        ISpeechRecognizer *This,
        VARIANT_BOOL *shared);

    HRESULT (STDMETHODCALLTYPE *put_State)(
        ISpeechRecognizer *This,
        SpeechRecognizerState state);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        ISpeechRecognizer *This,
        SpeechRecognizerState *state);

    HRESULT (STDMETHODCALLTYPE *get_Status)(
        ISpeechRecognizer *This,
        ISpeechRecognizerStatus **status);

    HRESULT (STDMETHODCALLTYPE *putref_Profile)(
        ISpeechRecognizer *This,
        ISpeechObjectToken *profile);

    HRESULT (STDMETHODCALLTYPE *get_Profile)(
        ISpeechRecognizer *This,
        ISpeechObjectToken **profile);

    HRESULT (STDMETHODCALLTYPE *EmulateRecognition)(
        ISpeechRecognizer *This,
        VARIANT elements,
        VARIANT *attributes,
        LONG id);

    HRESULT (STDMETHODCALLTYPE *CreateRecoContext)(
        ISpeechRecognizer *This,
        ISpeechRecoContext **ncontext);

    HRESULT (STDMETHODCALLTYPE *GetFormat)(
        ISpeechRecognizer *This,
        SpeechFormatType speechtype,
        ISpeechAudioFormat **audioformat);

    HRESULT (STDMETHODCALLTYPE *SetPropertyNumber)(
        ISpeechRecognizer *This,
        const BSTR name,
        LONG value,
        VARIANT_BOOL *supported);

    HRESULT (STDMETHODCALLTYPE *GetPropertyNumber)(
        ISpeechRecognizer *This,
        const BSTR name,
        LONG *value,
        VARIANT_BOOL *supported);

    HRESULT (STDMETHODCALLTYPE *SetPropertyString)(
        ISpeechRecognizer *This,
        const BSTR name,
        const BSTR value,
        VARIANT_BOOL *supported);

    HRESULT (STDMETHODCALLTYPE *GetPropertyString)(
        ISpeechRecognizer *This,
        const BSTR name,
        BSTR *value,
        VARIANT_BOOL *supported);

    HRESULT (STDMETHODCALLTYPE *IsUISupported)(
        ISpeechRecognizer *This,
        const BSTR type,
        const VARIANT *data,
        VARIANT_BOOL *supported);

    HRESULT (STDMETHODCALLTYPE *DisplayUI)(
        ISpeechRecognizer *This,
        LONG hWnd,
        BSTR title,
        const BSTR type,
        const VARIANT *data);

    HRESULT (STDMETHODCALLTYPE *GetRecognizers)(
        ISpeechRecognizer *This,
        BSTR required,
        BSTR optional,
        ISpeechObjectTokens **tokens);

    HRESULT (STDMETHODCALLTYPE *GetAudioInputs)(
        ISpeechRecognizer *This,
        BSTR required,
        BSTR optional,
        ISpeechObjectTokens **tokens);

    HRESULT (STDMETHODCALLTYPE *GetProfiles)(
        ISpeechRecognizer *This,
        BSTR required,
        BSTR optional,
        ISpeechObjectTokens **tokens);

    END_INTERFACE
} ISpeechRecognizerVtbl;

interface ISpeechRecognizer {
    CONST_VTBL ISpeechRecognizerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechRecognizer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechRecognizer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechRecognizer_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechRecognizer_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechRecognizer_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechRecognizer_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechRecognizer_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechRecognizer methods ***/
#define ISpeechRecognizer_putref_Recognizer(This,recognizer) (This)->lpVtbl->putref_Recognizer(This,recognizer)
#define ISpeechRecognizer_get_Recognizer(This,recognizer) (This)->lpVtbl->get_Recognizer(This,recognizer)
#define ISpeechRecognizer_put_AllowAudioInputFormatChangesOnNextSet(This,allow) (This)->lpVtbl->put_AllowAudioInputFormatChangesOnNextSet(This,allow)
#define ISpeechRecognizer_get_AllowAudioInputFormatChangesOnNextSet(This,allow) (This)->lpVtbl->get_AllowAudioInputFormatChangesOnNextSet(This,allow)
#define ISpeechRecognizer_putref_AudioInput(This,input) (This)->lpVtbl->putref_AudioInput(This,input)
#define ISpeechRecognizer_get_AudioInput(This,input) (This)->lpVtbl->get_AudioInput(This,input)
#define ISpeechRecognizer_putref_AudioInputStream(This,input) (This)->lpVtbl->putref_AudioInputStream(This,input)
#define ISpeechRecognizer_get_AudioInputStream(This,input) (This)->lpVtbl->get_AudioInputStream(This,input)
#define ISpeechRecognizer_get_IsShared(This,shared) (This)->lpVtbl->get_IsShared(This,shared)
#define ISpeechRecognizer_put_State(This,state) (This)->lpVtbl->put_State(This,state)
#define ISpeechRecognizer_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define ISpeechRecognizer_get_Status(This,status) (This)->lpVtbl->get_Status(This,status)
#define ISpeechRecognizer_putref_Profile(This,profile) (This)->lpVtbl->putref_Profile(This,profile)
#define ISpeechRecognizer_get_Profile(This,profile) (This)->lpVtbl->get_Profile(This,profile)
#define ISpeechRecognizer_EmulateRecognition(This,elements,attributes,id) (This)->lpVtbl->EmulateRecognition(This,elements,attributes,id)
#define ISpeechRecognizer_CreateRecoContext(This,ncontext) (This)->lpVtbl->CreateRecoContext(This,ncontext)
#define ISpeechRecognizer_GetFormat(This,speechtype,audioformat) (This)->lpVtbl->GetFormat(This,speechtype,audioformat)
#define ISpeechRecognizer_SetPropertyNumber(This,name,value,supported) (This)->lpVtbl->SetPropertyNumber(This,name,value,supported)
#define ISpeechRecognizer_GetPropertyNumber(This,name,value,supported) (This)->lpVtbl->GetPropertyNumber(This,name,value,supported)
#define ISpeechRecognizer_SetPropertyString(This,name,value,supported) (This)->lpVtbl->SetPropertyString(This,name,value,supported)
#define ISpeechRecognizer_GetPropertyString(This,name,value,supported) (This)->lpVtbl->GetPropertyString(This,name,value,supported)
#define ISpeechRecognizer_IsUISupported(This,type,data,supported) (This)->lpVtbl->IsUISupported(This,type,data,supported)
#define ISpeechRecognizer_DisplayUI(This,hWnd,title,type,data) (This)->lpVtbl->DisplayUI(This,hWnd,title,type,data)
#define ISpeechRecognizer_GetRecognizers(This,required,optional,tokens) (This)->lpVtbl->GetRecognizers(This,required,optional,tokens)
#define ISpeechRecognizer_GetAudioInputs(This,required,optional,tokens) (This)->lpVtbl->GetAudioInputs(This,required,optional,tokens)
#define ISpeechRecognizer_GetProfiles(This,required,optional,tokens) (This)->lpVtbl->GetProfiles(This,required,optional,tokens)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechRecognizer_QueryInterface(ISpeechRecognizer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechRecognizer_AddRef(ISpeechRecognizer* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechRecognizer_Release(ISpeechRecognizer* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechRecognizer_GetTypeInfoCount(ISpeechRecognizer* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechRecognizer_GetTypeInfo(ISpeechRecognizer* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechRecognizer_GetIDsOfNames(ISpeechRecognizer* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechRecognizer_Invoke(ISpeechRecognizer* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechRecognizer methods ***/
static FORCEINLINE HRESULT ISpeechRecognizer_putref_Recognizer(ISpeechRecognizer* This,ISpeechObjectToken *recognizer) {
    return This->lpVtbl->putref_Recognizer(This,recognizer);
}
static FORCEINLINE HRESULT ISpeechRecognizer_get_Recognizer(ISpeechRecognizer* This,ISpeechObjectToken **recognizer) {
    return This->lpVtbl->get_Recognizer(This,recognizer);
}
static FORCEINLINE HRESULT ISpeechRecognizer_put_AllowAudioInputFormatChangesOnNextSet(ISpeechRecognizer* This,VARIANT_BOOL allow) {
    return This->lpVtbl->put_AllowAudioInputFormatChangesOnNextSet(This,allow);
}
static FORCEINLINE HRESULT ISpeechRecognizer_get_AllowAudioInputFormatChangesOnNextSet(ISpeechRecognizer* This,VARIANT_BOOL *allow) {
    return This->lpVtbl->get_AllowAudioInputFormatChangesOnNextSet(This,allow);
}
static FORCEINLINE HRESULT ISpeechRecognizer_putref_AudioInput(ISpeechRecognizer* This,ISpeechObjectToken *input) {
    return This->lpVtbl->putref_AudioInput(This,input);
}
static FORCEINLINE HRESULT ISpeechRecognizer_get_AudioInput(ISpeechRecognizer* This,ISpeechObjectToken **input) {
    return This->lpVtbl->get_AudioInput(This,input);
}
static FORCEINLINE HRESULT ISpeechRecognizer_putref_AudioInputStream(ISpeechRecognizer* This,ISpeechBaseStream *input) {
    return This->lpVtbl->putref_AudioInputStream(This,input);
}
static FORCEINLINE HRESULT ISpeechRecognizer_get_AudioInputStream(ISpeechRecognizer* This,ISpeechBaseStream **input) {
    return This->lpVtbl->get_AudioInputStream(This,input);
}
static FORCEINLINE HRESULT ISpeechRecognizer_get_IsShared(ISpeechRecognizer* This,VARIANT_BOOL *shared) {
    return This->lpVtbl->get_IsShared(This,shared);
}
static FORCEINLINE HRESULT ISpeechRecognizer_put_State(ISpeechRecognizer* This,SpeechRecognizerState state) {
    return This->lpVtbl->put_State(This,state);
}
static FORCEINLINE HRESULT ISpeechRecognizer_get_State(ISpeechRecognizer* This,SpeechRecognizerState *state) {
    return This->lpVtbl->get_State(This,state);
}
static FORCEINLINE HRESULT ISpeechRecognizer_get_Status(ISpeechRecognizer* This,ISpeechRecognizerStatus **status) {
    return This->lpVtbl->get_Status(This,status);
}
static FORCEINLINE HRESULT ISpeechRecognizer_putref_Profile(ISpeechRecognizer* This,ISpeechObjectToken *profile) {
    return This->lpVtbl->putref_Profile(This,profile);
}
static FORCEINLINE HRESULT ISpeechRecognizer_get_Profile(ISpeechRecognizer* This,ISpeechObjectToken **profile) {
    return This->lpVtbl->get_Profile(This,profile);
}
static FORCEINLINE HRESULT ISpeechRecognizer_EmulateRecognition(ISpeechRecognizer* This,VARIANT elements,VARIANT *attributes,LONG id) {
    return This->lpVtbl->EmulateRecognition(This,elements,attributes,id);
}
static FORCEINLINE HRESULT ISpeechRecognizer_CreateRecoContext(ISpeechRecognizer* This,ISpeechRecoContext **ncontext) {
    return This->lpVtbl->CreateRecoContext(This,ncontext);
}
static FORCEINLINE HRESULT ISpeechRecognizer_GetFormat(ISpeechRecognizer* This,SpeechFormatType speechtype,ISpeechAudioFormat **audioformat) {
    return This->lpVtbl->GetFormat(This,speechtype,audioformat);
}
static FORCEINLINE HRESULT ISpeechRecognizer_SetPropertyNumber(ISpeechRecognizer* This,const BSTR name,LONG value,VARIANT_BOOL *supported) {
    return This->lpVtbl->SetPropertyNumber(This,name,value,supported);
}
static FORCEINLINE HRESULT ISpeechRecognizer_GetPropertyNumber(ISpeechRecognizer* This,const BSTR name,LONG *value,VARIANT_BOOL *supported) {
    return This->lpVtbl->GetPropertyNumber(This,name,value,supported);
}
static FORCEINLINE HRESULT ISpeechRecognizer_SetPropertyString(ISpeechRecognizer* This,const BSTR name,const BSTR value,VARIANT_BOOL *supported) {
    return This->lpVtbl->SetPropertyString(This,name,value,supported);
}
static FORCEINLINE HRESULT ISpeechRecognizer_GetPropertyString(ISpeechRecognizer* This,const BSTR name,BSTR *value,VARIANT_BOOL *supported) {
    return This->lpVtbl->GetPropertyString(This,name,value,supported);
}
static FORCEINLINE HRESULT ISpeechRecognizer_IsUISupported(ISpeechRecognizer* This,const BSTR type,const VARIANT *data,VARIANT_BOOL *supported) {
    return This->lpVtbl->IsUISupported(This,type,data,supported);
}
static FORCEINLINE HRESULT ISpeechRecognizer_DisplayUI(ISpeechRecognizer* This,LONG hWnd,BSTR title,const BSTR type,const VARIANT *data) {
    return This->lpVtbl->DisplayUI(This,hWnd,title,type,data);
}
static FORCEINLINE HRESULT ISpeechRecognizer_GetRecognizers(ISpeechRecognizer* This,BSTR required,BSTR optional,ISpeechObjectTokens **tokens) {
    return This->lpVtbl->GetRecognizers(This,required,optional,tokens);
}
static FORCEINLINE HRESULT ISpeechRecognizer_GetAudioInputs(ISpeechRecognizer* This,BSTR required,BSTR optional,ISpeechObjectTokens **tokens) {
    return This->lpVtbl->GetAudioInputs(This,required,optional,tokens);
}
static FORCEINLINE HRESULT ISpeechRecognizer_GetProfiles(ISpeechRecognizer* This,BSTR required,BSTR optional,ISpeechObjectTokens **tokens) {
    return This->lpVtbl->GetProfiles(This,required,optional,tokens);
}
#endif
#endif

#endif


#endif  /* __ISpeechRecognizer_INTERFACE_DEFINED__ */

typedef enum SpeechStreamFileMode {
    SSFMOpenForRead = SPFM_OPEN_READONLY,
    SSFMOpenReadWrite = SPFM_OPEN_READWRITE,
    SSFMCreate = SPFM_CREATE,
    SSFMCreateForWrite = SPFM_CREATE_ALWAYS
} SpeechStreamFileMode;
typedef enum DISPID_SpeechFileStream {
    DISPID_SFSOpen = 100,
    DISPID_SFSClose = 101
} DISPID_SpeechFileStream;
/*****************************************************************************
 * ISpeechFileStream interface
 */
#ifndef __ISpeechFileStream_INTERFACE_DEFINED__
#define __ISpeechFileStream_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechFileStream, 0xaf67f125, 0xab39, 0x4e93, 0xb4,0xa2, 0xcc,0x2e,0x66,0xe1,0x82,0xa7);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("af67f125-ab39-4e93-b4a2-cc2e66e182a7")
ISpeechFileStream : public ISpeechBaseStream
{
    virtual HRESULT STDMETHODCALLTYPE Open(
        BSTR filename,
        SpeechStreamFileMode mode = SSFMOpenForRead,
        VARIANT_BOOL events = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechFileStream, 0xaf67f125, 0xab39, 0x4e93, 0xb4,0xa2, 0xcc,0x2e,0x66,0xe1,0x82,0xa7)
#endif
#else
typedef struct ISpeechFileStreamVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ISpeechFileStream *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ISpeechFileStream *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ISpeechFileStream *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ISpeechFileStream *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ISpeechBaseStream methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Format)(
        ISpeechFileStream *This,
        ISpeechAudioFormat **format);

    HRESULT (STDMETHODCALLTYPE *putref_Format)(
        ISpeechFileStream *This,
        ISpeechAudioFormat *format);

    HRESULT (STDMETHODCALLTYPE *Read)(
        ISpeechFileStream *This,
        VARIANT *buffer,
        LONG written,
        LONG *read);

    HRESULT (STDMETHODCALLTYPE *Write)(
        ISpeechFileStream *This,
        VARIANT buffer,
        LONG *written);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        ISpeechFileStream *This,
        VARIANT position,
        SpeechStreamSeekPositionType origin,
        VARIANT *pos);

    /*** ISpeechFileStream methods ***/
    HRESULT (STDMETHODCALLTYPE *Open)(
        ISpeechFileStream *This,
        BSTR filename,
        SpeechStreamFileMode mode,
        VARIANT_BOOL events);

    HRESULT (STDMETHODCALLTYPE *Close)(
        ISpeechFileStream *This);

    END_INTERFACE
} ISpeechFileStreamVtbl;

interface ISpeechFileStream {
    CONST_VTBL ISpeechFileStreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechFileStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechFileStream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechFileStream_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechFileStream_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechFileStream_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechFileStream_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechFileStream_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechBaseStream methods ***/
#define ISpeechFileStream_get_Format(This,format) (This)->lpVtbl->get_Format(This,format)
#define ISpeechFileStream_putref_Format(This,format) (This)->lpVtbl->putref_Format(This,format)
#define ISpeechFileStream_Read(This,buffer,written,read) (This)->lpVtbl->Read(This,buffer,written,read)
#define ISpeechFileStream_Write(This,buffer,written) (This)->lpVtbl->Write(This,buffer,written)
#define ISpeechFileStream_Seek(This,position,origin,pos) (This)->lpVtbl->Seek(This,position,origin,pos)
/*** ISpeechFileStream methods ***/
#define ISpeechFileStream_Open(This,filename,mode,events) (This)->lpVtbl->Open(This,filename,mode,events)
#define ISpeechFileStream_Close(This) (This)->lpVtbl->Close(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISpeechFileStream_QueryInterface(ISpeechFileStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISpeechFileStream_AddRef(ISpeechFileStream* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISpeechFileStream_Release(ISpeechFileStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static FORCEINLINE HRESULT ISpeechFileStream_GetTypeInfoCount(ISpeechFileStream* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static FORCEINLINE HRESULT ISpeechFileStream_GetTypeInfo(ISpeechFileStream* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static FORCEINLINE HRESULT ISpeechFileStream_GetIDsOfNames(ISpeechFileStream* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static FORCEINLINE HRESULT ISpeechFileStream_Invoke(ISpeechFileStream* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ISpeechBaseStream methods ***/
static FORCEINLINE HRESULT ISpeechFileStream_get_Format(ISpeechFileStream* This,ISpeechAudioFormat **format) {
    return This->lpVtbl->get_Format(This,format);
}
static FORCEINLINE HRESULT ISpeechFileStream_putref_Format(ISpeechFileStream* This,ISpeechAudioFormat *format) {
    return This->lpVtbl->putref_Format(This,format);
}
static FORCEINLINE HRESULT ISpeechFileStream_Read(ISpeechFileStream* This,VARIANT *buffer,LONG written,LONG *read) {
    return This->lpVtbl->Read(This,buffer,written,read);
}
static FORCEINLINE HRESULT ISpeechFileStream_Write(ISpeechFileStream* This,VARIANT buffer,LONG *written) {
    return This->lpVtbl->Write(This,buffer,written);
}
static FORCEINLINE HRESULT ISpeechFileStream_Seek(ISpeechFileStream* This,VARIANT position,SpeechStreamSeekPositionType origin,VARIANT *pos) {
    return This->lpVtbl->Seek(This,position,origin,pos);
}
/*** ISpeechFileStream methods ***/
static FORCEINLINE HRESULT ISpeechFileStream_Open(ISpeechFileStream* This,BSTR filename,SpeechStreamFileMode mode,VARIANT_BOOL events) {
    return This->lpVtbl->Open(This,filename,mode,events);
}
static FORCEINLINE HRESULT ISpeechFileStream_Close(ISpeechFileStream* This) {
    return This->lpVtbl->Close(This);
}
#endif
#endif

#endif


#endif  /* __ISpeechFileStream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * SpObjectTokenCategory coclass
 */

DEFINE_GUID(CLSID_SpObjectTokenCategory, 0xa910187f, 0x0c7a, 0x45ac, 0x92,0xcc, 0x59,0xed,0xaf,0xb7,0x7b,0x53);

#ifdef __cplusplus
class DECLSPEC_UUID("a910187f-0c7a-45ac-92cc-59edafb77b53") SpObjectTokenCategory;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpObjectTokenCategory, 0xa910187f, 0x0c7a, 0x45ac, 0x92,0xcc, 0x59,0xed,0xaf,0xb7,0x7b,0x53)
#endif
#endif

/*****************************************************************************
 * SpSharedRecognizer coclass
 */

DEFINE_GUID(CLSID_SpSharedRecognizer, 0x3bee4890, 0x4fe9, 0x4a37, 0x8c,0x1e, 0x5e,0x7e,0x12,0x79,0x1c,0x1f);

#ifdef __cplusplus
class DECLSPEC_UUID("3bee4890-4fe9-4a37-8c1e-5e7e12791c1f") SpSharedRecognizer;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpSharedRecognizer, 0x3bee4890, 0x4fe9, 0x4a37, 0x8c,0x1e, 0x5e,0x7e,0x12,0x79,0x1c,0x1f)
#endif
#endif

/*****************************************************************************
 * SpVoice coclass
 */

DEFINE_GUID(CLSID_SpVoice, 0x96749377, 0x3391, 0x11d2, 0x9e,0xe3, 0x00,0xc0,0x4f,0x79,0x73,0x96);

#ifdef __cplusplus
class DECLSPEC_UUID("96749377-3391-11d2-9ee3-00c04f797396") SpVoice;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpVoice, 0x96749377, 0x3391, 0x11d2, 0x9e,0xe3, 0x00,0xc0,0x4f,0x79,0x73,0x96)
#endif
#endif

/*****************************************************************************
 * SpFileStream coclass
 */

DEFINE_GUID(CLSID_SpFileStream, 0x947812b3, 0x2ae1, 0x4644, 0xba,0x86, 0x9e,0x90,0xde,0xd7,0xec,0x91);

#ifdef __cplusplus
class DECLSPEC_UUID("947812b3-2ae1-4644-ba86-9e90ded7ec91") SpFileStream;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpFileStream, 0x947812b3, 0x2ae1, 0x4644, 0xba,0x86, 0x9e,0x90,0xde,0xd7,0xec,0x91)
#endif
#endif

/* Begin additional prototypes for all interfaces */

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 *);
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 VARIANT_UserSize     (ULONG *, ULONG, VARIANT *);
unsigned char * __RPC_USER VARIANT_UserMarshal  (ULONG *, unsigned char *, VARIANT *);
unsigned char * __RPC_USER VARIANT_UserUnmarshal(ULONG *, unsigned char *, VARIANT *);
void            __RPC_USER VARIANT_UserFree     (ULONG *, VARIANT *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __sapi_h__ */
