/*** Autogenerated by WIDL 10.4 from include/sapi51.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 __sapi51_h__
#define __sapi51_h__

/* Forward declarations */

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

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

#ifndef __ISpNotifyTranslator_FWD_DEFINED__
#define __ISpNotifyTranslator_FWD_DEFINED__
typedef interface ISpNotifyTranslator ISpNotifyTranslator;
#ifdef __cplusplus
interface ISpNotifyTranslator;
#endif /* __cplusplus */
#endif

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

#ifndef __ISpObjectWithToken_FWD_DEFINED__
#define __ISpObjectWithToken_FWD_DEFINED__
typedef interface ISpObjectWithToken ISpObjectWithToken;
#ifdef __cplusplus
interface ISpObjectWithToken;
#endif /* __cplusplus */
#endif

#ifndef __IEnumSpObjectTokens_FWD_DEFINED__
#define __IEnumSpObjectTokens_FWD_DEFINED__
typedef interface IEnumSpObjectTokens IEnumSpObjectTokens;
#ifdef __cplusplus
interface IEnumSpObjectTokens;
#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 __ISpObjectTokenInit_FWD_DEFINED__
#define __ISpObjectTokenInit_FWD_DEFINED__
typedef interface ISpObjectTokenInit ISpObjectTokenInit;
#ifdef __cplusplus
interface ISpObjectTokenInit;
#endif /* __cplusplus */
#endif

#ifndef __ISpResourceManager_FWD_DEFINED__
#define __ISpResourceManager_FWD_DEFINED__
typedef interface ISpResourceManager ISpResourceManager;
#ifdef __cplusplus
interface ISpResourceManager;
#endif /* __cplusplus */
#endif

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

#ifndef __ISpEventSink_FWD_DEFINED__
#define __ISpEventSink_FWD_DEFINED__
typedef interface ISpEventSink ISpEventSink;
#ifdef __cplusplus
interface ISpEventSink;
#endif /* __cplusplus */
#endif

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

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

#ifndef __ISpStreamFormatConverter_FWD_DEFINED__
#define __ISpStreamFormatConverter_FWD_DEFINED__
typedef interface ISpStreamFormatConverter ISpStreamFormatConverter;
#ifdef __cplusplus
interface ISpStreamFormatConverter;
#endif /* __cplusplus */
#endif

#ifndef __ISpAudio_FWD_DEFINED__
#define __ISpAudio_FWD_DEFINED__
typedef interface ISpAudio ISpAudio;
#ifdef __cplusplus
interface ISpAudio;
#endif /* __cplusplus */
#endif

#ifndef __ISpMMSysAudio_FWD_DEFINED__
#define __ISpMMSysAudio_FWD_DEFINED__
typedef interface ISpMMSysAudio ISpMMSysAudio;
#ifdef __cplusplus
interface ISpMMSysAudio;
#endif /* __cplusplus */
#endif

#ifndef __ISpTranscript_FWD_DEFINED__
#define __ISpTranscript_FWD_DEFINED__
typedef interface ISpTranscript ISpTranscript;
#ifdef __cplusplus
interface ISpTranscript;
#endif /* __cplusplus */
#endif

#ifndef __ISpLexicon_FWD_DEFINED__
#define __ISpLexicon_FWD_DEFINED__
typedef interface ISpLexicon ISpLexicon;
#ifdef __cplusplus
interface ISpLexicon;
#endif /* __cplusplus */
#endif

#ifndef __ISpContainerLexicon_FWD_DEFINED__
#define __ISpContainerLexicon_FWD_DEFINED__
typedef interface ISpContainerLexicon ISpContainerLexicon;
#ifdef __cplusplus
interface ISpContainerLexicon;
#endif /* __cplusplus */
#endif

#ifndef __ISpPhoneConverter_FWD_DEFINED__
#define __ISpPhoneConverter_FWD_DEFINED__
typedef interface ISpPhoneConverter ISpPhoneConverter;
#ifdef __cplusplus
interface ISpPhoneConverter;
#endif /* __cplusplus */
#endif

#ifndef __ISpVoice_FWD_DEFINED__
#define __ISpVoice_FWD_DEFINED__
typedef interface ISpVoice ISpVoice;
#ifdef __cplusplus
interface ISpVoice;
#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 __ISpRecoContext_FWD_DEFINED__
#define __ISpRecoContext_FWD_DEFINED__
typedef interface ISpRecoContext ISpRecoContext;
#ifdef __cplusplus
interface ISpRecoContext;
#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 __ISpeechDataKey_FWD_DEFINED__
#define __ISpeechDataKey_FWD_DEFINED__
typedef interface ISpeechDataKey ISpeechDataKey;
#ifdef __cplusplus
interface ISpeechDataKey;
#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 __ISpeechObjectTokenCategory_FWD_DEFINED__
#define __ISpeechObjectTokenCategory_FWD_DEFINED__
typedef interface ISpeechObjectTokenCategory ISpeechObjectTokenCategory;
#ifdef __cplusplus
interface ISpeechObjectTokenCategory;
#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 __ISpeechAudio_FWD_DEFINED__
#define __ISpeechAudio_FWD_DEFINED__
typedef interface ISpeechAudio ISpeechAudio;
#ifdef __cplusplus
interface ISpeechAudio;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechMMSysAudio_FWD_DEFINED__
#define __ISpeechMMSysAudio_FWD_DEFINED__
typedef interface ISpeechMMSysAudio ISpeechMMSysAudio;
#ifdef __cplusplus
interface ISpeechMMSysAudio;
#endif /* __cplusplus */
#endif

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

#ifndef __ISpeechCustomStream_FWD_DEFINED__
#define __ISpeechCustomStream_FWD_DEFINED__
typedef interface ISpeechCustomStream ISpeechCustomStream;
#ifdef __cplusplus
interface ISpeechCustomStream;
#endif /* __cplusplus */
#endif

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

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

#ifndef __ISpeechAudioBufferInfo_FWD_DEFINED__
#define __ISpeechAudioBufferInfo_FWD_DEFINED__
typedef interface ISpeechAudioBufferInfo ISpeechAudioBufferInfo;
#ifdef __cplusplus
interface ISpeechAudioBufferInfo;
#endif /* __cplusplus */
#endif

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

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

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

#ifndef ___ISpeechVoiceEvents_FWD_DEFINED__
#define ___ISpeechVoiceEvents_FWD_DEFINED__
typedef interface _ISpeechVoiceEvents _ISpeechVoiceEvents;
#ifdef __cplusplus
interface _ISpeechVoiceEvents;
#endif /* __cplusplus */
#endif

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

#ifndef __ISpeechRecognizerStatus_FWD_DEFINED__
#define __ISpeechRecognizerStatus_FWD_DEFINED__
typedef interface ISpeechRecognizerStatus ISpeechRecognizerStatus;
#ifdef __cplusplus
interface ISpeechRecognizerStatus;
#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 ___ISpeechRecoContextEvents_FWD_DEFINED__
#define ___ISpeechRecoContextEvents_FWD_DEFINED__
typedef interface _ISpeechRecoContextEvents _ISpeechRecoContextEvents;
#ifdef __cplusplus
interface _ISpeechRecoContextEvents;
#endif /* __cplusplus */
#endif

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

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

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

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

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

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

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

#ifndef __ISpeechPhraseInfoBuilder_FWD_DEFINED__
#define __ISpeechPhraseInfoBuilder_FWD_DEFINED__
typedef interface ISpeechPhraseInfoBuilder ISpeechPhraseInfoBuilder;
#ifdef __cplusplus
interface ISpeechPhraseInfoBuilder;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechRecoResultTimes_FWD_DEFINED__
#define __ISpeechRecoResultTimes_FWD_DEFINED__
typedef interface ISpeechRecoResultTimes ISpeechRecoResultTimes;
#ifdef __cplusplus
interface ISpeechRecoResultTimes;
#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 __ISpeechPhraseInfo_FWD_DEFINED__
#define __ISpeechPhraseInfo_FWD_DEFINED__
typedef interface ISpeechPhraseInfo ISpeechPhraseInfo;
#ifdef __cplusplus
interface ISpeechPhraseInfo;
#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 __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 __ISpeechPhraseRule_FWD_DEFINED__
#define __ISpeechPhraseRule_FWD_DEFINED__
typedef interface ISpeechPhraseRule ISpeechPhraseRule;
#ifdef __cplusplus
interface ISpeechPhraseRule;
#endif /* __cplusplus */
#endif

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

#ifndef __ISpeechLexiconWords_FWD_DEFINED__
#define __ISpeechLexiconWords_FWD_DEFINED__
typedef interface ISpeechLexiconWords ISpeechLexiconWords;
#ifdef __cplusplus
interface ISpeechLexiconWords;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechLexicon_FWD_DEFINED__
#define __ISpeechLexicon_FWD_DEFINED__
typedef interface ISpeechLexicon ISpeechLexicon;
#ifdef __cplusplus
interface ISpeechLexicon;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechLexiconWord_FWD_DEFINED__
#define __ISpeechLexiconWord_FWD_DEFINED__
typedef interface ISpeechLexiconWord ISpeechLexiconWord;
#ifdef __cplusplus
interface ISpeechLexiconWord;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechLexiconPronunciations_FWD_DEFINED__
#define __ISpeechLexiconPronunciations_FWD_DEFINED__
typedef interface ISpeechLexiconPronunciations ISpeechLexiconPronunciations;
#ifdef __cplusplus
interface ISpeechLexiconPronunciations;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechLexiconPronunciation_FWD_DEFINED__
#define __ISpeechLexiconPronunciation_FWD_DEFINED__
typedef interface ISpeechLexiconPronunciation ISpeechLexiconPronunciation;
#ifdef __cplusplus
interface ISpeechLexiconPronunciation;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechPhoneConverter_FWD_DEFINED__
#define __ISpeechPhoneConverter_FWD_DEFINED__
typedef interface ISpeechPhoneConverter ISpeechPhoneConverter;
#ifdef __cplusplus
interface ISpeechPhoneConverter;
#endif /* __cplusplus */
#endif

#ifndef __SpNotifyTranslator_FWD_DEFINED__
#define __SpNotifyTranslator_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpNotifyTranslator SpNotifyTranslator;
#else
typedef struct SpNotifyTranslator SpNotifyTranslator;
#endif /* defined __cplusplus */
#endif /* defined __SpNotifyTranslator_FWD_DEFINED__ */

#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 __SpObjectToken_FWD_DEFINED__
#define __SpObjectToken_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpObjectToken SpObjectToken;
#else
typedef struct SpObjectToken SpObjectToken;
#endif /* defined __cplusplus */
#endif /* defined __SpObjectToken_FWD_DEFINED__ */

#ifndef __SpResourceManager_FWD_DEFINED__
#define __SpResourceManager_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpResourceManager SpResourceManager;
#else
typedef struct SpResourceManager SpResourceManager;
#endif /* defined __cplusplus */
#endif /* defined __SpResourceManager_FWD_DEFINED__ */

#ifndef __SpStreamFormatConverter_FWD_DEFINED__
#define __SpStreamFormatConverter_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpStreamFormatConverter SpStreamFormatConverter;
#else
typedef struct SpStreamFormatConverter SpStreamFormatConverter;
#endif /* defined __cplusplus */
#endif /* defined __SpStreamFormatConverter_FWD_DEFINED__ */

#ifndef __SpMMAudioEnum_FWD_DEFINED__
#define __SpMMAudioEnum_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpMMAudioEnum SpMMAudioEnum;
#else
typedef struct SpMMAudioEnum SpMMAudioEnum;
#endif /* defined __cplusplus */
#endif /* defined __SpMMAudioEnum_FWD_DEFINED__ */

#ifndef __SpMMAudioIn_FWD_DEFINED__
#define __SpMMAudioIn_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpMMAudioIn SpMMAudioIn;
#else
typedef struct SpMMAudioIn SpMMAudioIn;
#endif /* defined __cplusplus */
#endif /* defined __SpMMAudioIn_FWD_DEFINED__ */

#ifndef __SpMMAudioOut_FWD_DEFINED__
#define __SpMMAudioOut_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpMMAudioOut SpMMAudioOut;
#else
typedef struct SpMMAudioOut SpMMAudioOut;
#endif /* defined __cplusplus */
#endif /* defined __SpMMAudioOut_FWD_DEFINED__ */

#ifndef __SpStream_FWD_DEFINED__
#define __SpStream_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpStream SpStream;
#else
typedef struct SpStream SpStream;
#endif /* defined __cplusplus */
#endif /* defined __SpStream_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 __SpSharedRecoContext_FWD_DEFINED__
#define __SpSharedRecoContext_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpSharedRecoContext SpSharedRecoContext;
#else
typedef struct SpSharedRecoContext SpSharedRecoContext;
#endif /* defined __cplusplus */
#endif /* defined __SpSharedRecoContext_FWD_DEFINED__ */

#ifndef __SpInprocRecognizer_FWD_DEFINED__
#define __SpInprocRecognizer_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpInprocRecognizer SpInprocRecognizer;
#else
typedef struct SpInprocRecognizer SpInprocRecognizer;
#endif /* defined __cplusplus */
#endif /* defined __SpInprocRecognizer_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 __SpLexicon_FWD_DEFINED__
#define __SpLexicon_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpLexicon SpLexicon;
#else
typedef struct SpLexicon SpLexicon;
#endif /* defined __cplusplus */
#endif /* defined __SpLexicon_FWD_DEFINED__ */

#ifndef __SpUnCompressedLexicon_FWD_DEFINED__
#define __SpUnCompressedLexicon_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpUnCompressedLexicon SpUnCompressedLexicon;
#else
typedef struct SpUnCompressedLexicon SpUnCompressedLexicon;
#endif /* defined __cplusplus */
#endif /* defined __SpUnCompressedLexicon_FWD_DEFINED__ */

#ifndef __SpCompressedLexicon_FWD_DEFINED__
#define __SpCompressedLexicon_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpCompressedLexicon SpCompressedLexicon;
#else
typedef struct SpCompressedLexicon SpCompressedLexicon;
#endif /* defined __cplusplus */
#endif /* defined __SpCompressedLexicon_FWD_DEFINED__ */

#ifndef __SpPhoneConverter_FWD_DEFINED__
#define __SpPhoneConverter_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpPhoneConverter SpPhoneConverter;
#else
typedef struct SpPhoneConverter SpPhoneConverter;
#endif /* defined __cplusplus */
#endif /* defined __SpPhoneConverter_FWD_DEFINED__ */

#ifndef __SpNullPhoneConverter_FWD_DEFINED__
#define __SpNullPhoneConverter_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpNullPhoneConverter SpNullPhoneConverter;
#else
typedef struct SpNullPhoneConverter SpNullPhoneConverter;
#endif /* defined __cplusplus */
#endif /* defined __SpNullPhoneConverter_FWD_DEFINED__ */

#ifndef __SpTextSelectionInformation_FWD_DEFINED__
#define __SpTextSelectionInformation_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpTextSelectionInformation SpTextSelectionInformation;
#else
typedef struct SpTextSelectionInformation SpTextSelectionInformation;
#endif /* defined __cplusplus */
#endif /* defined __SpTextSelectionInformation_FWD_DEFINED__ */

#ifndef __SpPhraseInfoBuilder_FWD_DEFINED__
#define __SpPhraseInfoBuilder_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpPhraseInfoBuilder SpPhraseInfoBuilder;
#else
typedef struct SpPhraseInfoBuilder SpPhraseInfoBuilder;
#endif /* defined __cplusplus */
#endif /* defined __SpPhraseInfoBuilder_FWD_DEFINED__ */

#ifndef __SpAudioFormat_FWD_DEFINED__
#define __SpAudioFormat_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpAudioFormat SpAudioFormat;
#else
typedef struct SpAudioFormat SpAudioFormat;
#endif /* defined __cplusplus */
#endif /* defined __SpAudioFormat_FWD_DEFINED__ */

#ifndef __SpWaveFormatEx_FWD_DEFINED__
#define __SpWaveFormatEx_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpWaveFormatEx SpWaveFormatEx;
#else
typedef struct SpWaveFormatEx SpWaveFormatEx;
#endif /* defined __cplusplus */
#endif /* defined __SpWaveFormatEx_FWD_DEFINED__ */

#ifndef __SpInProcRecoContext_FWD_DEFINED__
#define __SpInProcRecoContext_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpInProcRecoContext SpInProcRecoContext;
#else
typedef struct SpInProcRecoContext SpInProcRecoContext;
#endif /* defined __cplusplus */
#endif /* defined __SpInProcRecoContext_FWD_DEFINED__ */

#ifndef __SpCustomStream_FWD_DEFINED__
#define __SpCustomStream_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpCustomStream SpCustomStream;
#else
typedef struct SpCustomStream SpCustomStream;
#endif /* defined __cplusplus */
#endif /* defined __SpCustomStream_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__ */

#ifndef __SpMemoryStream_FWD_DEFINED__
#define __SpMemoryStream_FWD_DEFINED__
#ifdef __cplusplus
typedef class SpMemoryStream SpMemoryStream;
#else
typedef struct SpMemoryStream SpMemoryStream;
#endif /* defined __cplusplus */
#endif /* defined __SpMemoryStream_FWD_DEFINED__ */

/* Headers for imported files */

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

#ifdef __cplusplus
extern "C" {
#endif

#ifndef _SAPI_VER
#error "you have to include <sapi.h> header before this."
#endif
#if 0
typedef struct WAVEFORMATEX {
    WORD wFormatTag;
    WORD nChannels;
    DWORD nSamplesPerSec;
    DWORD nAvgBytesPerSec;
    WORD nBlockAlign;
    WORD wBitsPerSample;
    WORD cbSize;
} WAVEFORMATEX;
#endif
#ifndef __ISpNotifySource_FWD_DEFINED__
#define __ISpNotifySource_FWD_DEFINED__
typedef interface ISpNotifySource ISpNotifySource;
#ifdef __cplusplus
interface ISpNotifySource;
#endif /* __cplusplus */
#endif

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

#ifndef __ISpNotifyTranslator_FWD_DEFINED__
#define __ISpNotifyTranslator_FWD_DEFINED__
typedef interface ISpNotifyTranslator ISpNotifyTranslator;
#ifdef __cplusplus
interface ISpNotifyTranslator;
#endif /* __cplusplus */
#endif

#ifndef __ISpDataKey_FWD_DEFINED__
#define __ISpDataKey_FWD_DEFINED__
typedef interface ISpDataKey ISpDataKey;
#ifdef __cplusplus
interface ISpDataKey;
#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 __ISpObjectWithToken_FWD_DEFINED__
#define __ISpObjectWithToken_FWD_DEFINED__
typedef interface ISpObjectWithToken ISpObjectWithToken;
#ifdef __cplusplus
interface ISpObjectWithToken;
#endif /* __cplusplus */
#endif

#ifndef __ISpResourceManager_FWD_DEFINED__
#define __ISpResourceManager_FWD_DEFINED__
typedef interface ISpResourceManager ISpResourceManager;
#ifdef __cplusplus
interface ISpResourceManager;
#endif /* __cplusplus */
#endif

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

#ifndef __ISpEventSink_FWD_DEFINED__
#define __ISpEventSink_FWD_DEFINED__
typedef interface ISpEventSink ISpEventSink;
#ifdef __cplusplus
interface ISpEventSink;
#endif /* __cplusplus */
#endif

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

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

#ifndef __ISpStreamFormatConverter_FWD_DEFINED__
#define __ISpStreamFormatConverter_FWD_DEFINED__
typedef interface ISpStreamFormatConverter ISpStreamFormatConverter;
#ifdef __cplusplus
interface ISpStreamFormatConverter;
#endif /* __cplusplus */
#endif

#ifndef __ISpAudio_FWD_DEFINED__
#define __ISpAudio_FWD_DEFINED__
typedef interface ISpAudio ISpAudio;
#ifdef __cplusplus
interface ISpAudio;
#endif /* __cplusplus */
#endif

#ifndef __ISpMMSysAudio_FWD_DEFINED__
#define __ISpMMSysAudio_FWD_DEFINED__
typedef interface ISpMMSysAudio ISpMMSysAudio;
#ifdef __cplusplus
interface ISpMMSysAudio;
#endif /* __cplusplus */
#endif

#ifndef __ISpTranscript_FWD_DEFINED__
#define __ISpTranscript_FWD_DEFINED__
typedef interface ISpTranscript ISpTranscript;
#ifdef __cplusplus
interface ISpTranscript;
#endif /* __cplusplus */
#endif

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

#ifndef __ISpRecoResult_FWD_DEFINED__
#define __ISpRecoResult_FWD_DEFINED__
typedef interface ISpRecoResult ISpRecoResult;
#ifdef __cplusplus
interface ISpRecoResult;
#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 __ISpProperties_FWD_DEFINED__
#define __ISpProperties_FWD_DEFINED__
typedef interface ISpProperties ISpProperties;
#ifdef __cplusplus
interface ISpProperties;
#endif /* __cplusplus */
#endif

#ifndef __ISpLexicon_FWD_DEFINED__
#define __ISpLexicon_FWD_DEFINED__
typedef interface ISpLexicon ISpLexicon;
#ifdef __cplusplus
interface ISpLexicon;
#endif /* __cplusplus */
#endif

#ifndef __ISpPhoneConverter_FWD_DEFINED__
#define __ISpPhoneConverter_FWD_DEFINED__
typedef interface ISpPhoneConverter ISpPhoneConverter;
#ifdef __cplusplus
interface ISpPhoneConverter;
#endif /* __cplusplus */
#endif

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

typedef enum SPDATAKEYLOCATION {
    SPDKL_DefaultLocation = 0,
    SPDKL_CurrentUser = 1,
    SPDKL_LocalMachine = 2,
    SPDKL_CurrentConfig = 5
} SPDATAKEYLOCATION;
typedef enum SPSTREAMFORMAT {
    SPSF_Default = -1,
    SPSF_NoAssignedFormat = 0,
    SPSF_Text = 1,
    SPSF_NonStandardFormat = 2,
    SPSF_ExtendedAudioFormat = 3,
    SPSF_8kHz8BitMono = 4,
    SPSF_8kHz8BitStereo = 5,
    SPSF_8kHz16BitMono = 6,
    SPSF_8kHz16BitStereo = 7,
    SPSF_11kHz8BitMono = 8,
    SPSF_11kHz8BitStereo = 9,
    SPSF_11kHz16BitMono = 10,
    SPSF_11kHz16BitStereo = 11,
    SPSF_12kHz8BitMono = 12,
    SPSF_12kHz8BitStereo = 13,
    SPSF_12kHz16BitMono = 14,
    SPSF_12kHz16BitStereo = 15,
    SPSF_16kHz8BitMono = 16,
    SPSF_16kHz8BitStereo = 17,
    SPSF_16kHz16BitMono = 18,
    SPSF_16kHz16BitStereo = 19,
    SPSF_22kHz8BitMono = 20,
    SPSF_22kHz8BitStereo = 21,
    SPSF_22kHz16BitMono = 22,
    SPSF_22kHz16BitStereo = 23,
    SPSF_24kHz8BitMono = 24,
    SPSF_24kHz8BitStereo = 25,
    SPSF_24kHz16BitMono = 26,
    SPSF_24kHz16BitStereo = 27,
    SPSF_32kHz8BitMono = 28,
    SPSF_32kHz8BitStereo = 29,
    SPSF_32kHz16BitMono = 30,
    SPSF_32kHz16BitStereo = 31,
    SPSF_44kHz8BitMono = 32,
    SPSF_44kHz8BitStereo = 33,
    SPSF_44kHz16BitMono = 34,
    SPSF_44kHz16BitStereo = 35,
    SPSF_48kHz8BitMono = 36,
    SPSF_48kHz8BitStereo = 37,
    SPSF_48kHz16BitMono = 38,
    SPSF_48kHz16BitStereo = 39,
    SPSF_TrueSpeech_8kHz1BitMono = 40,
    SPSF_CCITT_ALaw_8kHzMono = 41,
    SPSF_CCITT_ALaw_8kHzStereo = 42,
    SPSF_CCITT_ALaw_11kHzMono = 43,
    SPSF_CCITT_ALaw_11kHzStereo = 44,
    SPSF_CCITT_ALaw_22kHzMono = 45,
    SPSF_CCITT_ALaw_22kHzStereo = 46,
    SPSF_CCITT_ALaw_44kHzMono = 47,
    SPSF_CCITT_ALaw_44kHzStereo = 48,
    SPSF_CCITT_uLaw_8kHzMono = 49,
    SPSF_CCITT_uLaw_8kHzStereo = 50,
    SPSF_CCITT_uLaw_11kHzMono = 51,
    SPSF_CCITT_uLaw_11kHzStereo = 52,
    SPSF_CCITT_uLaw_22kHzMono = 53,
    SPSF_CCITT_uLaw_22kHzStereo = 54,
    SPSF_CCITT_uLaw_44kHzMono = 55,
    SPSF_CCITT_uLaw_44kHzStereo = 56,
    SPSF_ADPCM_8kHzMono = 57,
    SPSF_ADPCM_8kHzStereo = 58,
    SPSF_ADPCM_11kHzMono = 59,
    SPSF_ADPCM_11kHzStereo = 60,
    SPSF_ADPCM_22kHzMono = 61,
    SPSF_ADPCM_22kHzStereo = 62,
    SPSF_ADPCM_44kHzMono = 63,
    SPSF_ADPCM_44kHzStereo = 64,
    SPSF_GSM610_8kHzMono = 65,
    SPSF_GSM610_11kHzMono = 66,
    SPSF_GSM610_22kHzMono = 67,
    SPSF_GSM610_44kHzMono = 68,
    SPSF_NUM_FORMATS = 69
} SPSTREAMFORMAT;
typedef enum SPEVENTLPARAMTYPE {
    SPET_LPARAM_IS_UNDEFINED = 0,
    SPET_LPARAM_IS_TOKEN = 1,
    SPET_LPARAM_IS_OBJECT = 2,
    SPET_LPARAM_IS_POINTER = 3,
    SPET_LPARAM_IS_STRING = 4
} SPEVENTLPARAMTYPE;
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_PRIVATE = 52,
    SPEI_MIN_SR = 34,
    SPEI_MAX_SR = 52,
    SPEI_RESERVED1 = 30,
    SPEI_RESERVED2 = 33,
    SPEI_RESERVED3 = 63
} SPEVENTENUM;
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_LATENCY_WARNING = 7,
    SPINTERFERENCE_LATENCY_TRUNCATE_BEGIN = 8,
    SPINTERFERENCE_LATENCY_TRUNCATE_END = 9
} SPINTERFERENCE;
typedef enum SPENDSRSTREAMFLAGS {
    SPESF_NONE = 0,
    SPESF_STREAM_RELEASED = 1
} SPENDSRSTREAMFLAGS;
typedef enum SPVFEATURE {
    SPVFEATURE_STRESSED = 1,
    SPVFEATURE_EMPHASIS = 2
} SPVFEATURE;
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 SPFILEMODE {
    SPFM_OPEN_READONLY = 0,
    SPFM_OPEN_READWRITE = 1,
    SPFM_CREATE = 2,
    SPFM_CREATE_ALWAYS = 3,
    SPFM_NUM_MODES = 4
} SPFILEMODE;
typedef enum _SPAUDIOSTATE {
    SPAS_CLOSED = 0,
    SPAS_STOP = 1,
    SPAS_PAUSE = 2,
    SPAS_RUN = 3
} SPAUDIOSTATE;
typedef enum SPDISPLYATTRIBUTES {
    SPAF_ONE_TRAILING_SPACE = 0x2,
    SPAF_TWO_TRAILING_SPACES = 0x4,
    SPAF_CONSUME_LEADING_SPACES = 0x8,
    SPAF_ALL = 0xf
} SPDISPLAYATTRIBUTES;
typedef enum SPPHRASEPROPERTYUNIONTYPE {
    SPPPUT_UNUSED = 0,
    SPPPUT_ARRAY_INDEX = 1
} SPPHRASEPROPERTYUNIONTYPE;
typedef enum SPRECOEVENTFLAGS {
    SPREF_AutoPause = 0x1,
    SPREF_Emulated = 0x2
} SPRECOEVENTFLAGS;
typedef enum SPPARTOFSPEECH {
    SPPS_NotOverriden = -1,
    SPPS_Unknown = 0,
    SPPS_Noun = 0x1000,
    SPPS_Verb = 0x2000,
    SPPS_Modifier = 0x3000,
    SPPS_Function = 0x4000,
    SPPS_Interjection = 0x5000
} SPPARTOFSPEECH;
typedef enum SPLEXICONTYPE {
    eLEXTYPE_USER = 0x1,
    eLEXTYPE_APP = 0x2,
    eLEXTYPE_VENDORLEXICON = 0x4,
    eLEXTYPE_LETTERTOSOUND = 0x8,
    eLEXTYPE_MORPHOLOGY = 0x10,
    eLEXTYPE_RESERVED4 = 0x20,
    eLEXTYPE_USER_SHORTCUT = 0x40,
    eLEXTYPE_RESERVED6 = 0x80,
    eLEXTYPE_RESERVED7 = 0x100,
    eLEXTYPE_RESERVED8 = 0x200,
    eLEXTYPE_RESERVED9 = 0x400,
    eLEXTYPE_RESERVED10 = 0x800,
    eLEXTYPE_PRIVATE1 = 0x1000,
    eLEXTYPE_PRIVATE2 = 0x2000,
    eLEXTYPE_PRIVATE3 = 0x4000,
    eLEXTYPE_PRIVATE4 = 0x8000,
    eLEXTYPE_PRIVATE5 = 0x10000,
    eLEXTYPE_PRIVATE6 = 0x20000,
    eLEXTYPE_PRIVATE7 = 0x40000,
    eLEXTYPE_PRIVATE8 = 0x80000,
    eLEXTYPE_PRIVATE9 = 0x100000,
    eLEXTYPE_PRIVATE10 = 0x200000,
    eLEXTYPE_PRIVATE11 = 0x400000,
    eLEXTYPE_PRIVATE12 = 0x800000,
    eLEXTYPE_PRIVATE13 = 0x1000000,
    eLEXTYPE_PRIVATE14 = 0x2000000,
    eLEXTYPE_PRIVATE15 = 0x4000000,
    eLEXTYPE_PRIVATE16 = 0x8000000,
    eLEXTYPE_PRIVATE17 = 0x10000000,
    eLEXTYPE_PRIVATE18 = 0x20000000,
    eLEXTYPE_PRIVATE19 = 0x40000000,
    eLEXTYPE_PRIVATE20 = 0x80000000u
} SPLEXICONTYPE;
typedef enum SPWORDTYPE {
    eWORDTYPE_ADDED = 1,
    eWORDTYPE_DELETED = 2
} SPWORDTYPE;
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 enum SPPHRASERNG {
    SPPR_ALL_ELEMENTS = -1
} SPPHRASERNG;
typedef enum SPVACTIONS {
    SPVA_Speak = 0,
    SPVA_Silence = 1,
    SPVA_Pronounce = 2,
    SPVA_Bookmark = 3,
    SPVA_SpellOut = 4,
    SPVA_Section = 5,
    SPVA_ParseUnknownTag = 6
} SPVACTIONS;
typedef enum SPRUNSTATE {
    SPRS_DONE = 1,
    SPRS_IS_SPEAKING = 2
} SPRUNSTATE;
typedef enum SPVLIMITS {
    SPMIN_VOLUME = 0,
    SPMAX_VOLUME = 100,
    SPMIN_RATE = -10,
    SPMAX_RATE = 10
} SPVLIMITS;
typedef enum SPVPRIORITY {
    SPVPRI_NORMAL = 0,
    SPVPRI_ALERT = 1,
    SPVPRI_OVER = 2
} SPVPRIORITY;
EXTERN_C const GUID SPDFID_Text;
EXTERN_C const GUID SPDFID_WaveFormatEx;

#define SP_LOW_CONFIDENCE (-1)

#define SP_NORMAL_CONFIDENCE (0)

#define SP_HIGH_CONFIDENCE (+1)

#define DEFAULT_WEIGHT (1)

#define SP_MAX_WORD_LENGTH (128)

#define SP_MAX_PRON_LENGTH (384)


#ifdef __cplusplus
interface ISpNotifyCallback {
  virtual HRESULT STDMETHODCALLTYPE NotifyCallback(WPARAM wParam, LPARAM lParam) = 0;
};
#else
typedef void *ISpNotifyCallback;
#endif
#if 0
typedef void *SPNOTIFYCALLBACK;
#else
typedef void __stdcall SPNOTIFYCALLBACK(WPARAM wParam, LPARAM lParam);
#endif
/*****************************************************************************
 * 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 *pNotifySink) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetNotifyWindowMessage(
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetNotifyCallbackFunction(
        SPNOTIFYCALLBACK *pfnCallback,
        WPARAM wParam,
        LPARAM lParam) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetNotifyCallbackInterface(
        ISpNotifyCallback *pSpCallback,
        WPARAM wParam,
        LPARAM lParam) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetNotifyWin32Event(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE WaitForNotifyEvent(
        DWORD dwMilliseconds) = 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 *pNotifySink);

    HRESULT (STDMETHODCALLTYPE *SetNotifyWindowMessage)(
        ISpNotifySource *This,
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackFunction)(
        ISpNotifySource *This,
        SPNOTIFYCALLBACK *pfnCallback,
        WPARAM wParam,
        LPARAM lParam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackInterface)(
        ISpNotifySource *This,
        ISpNotifyCallback *pSpCallback,
        WPARAM wParam,
        LPARAM lParam);

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

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

    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,pNotifySink) (This)->lpVtbl->SetNotifySink(This,pNotifySink)
#define ISpNotifySource_SetNotifyWindowMessage(This,hWnd,Msg,wParam,lParam) (This)->lpVtbl->SetNotifyWindowMessage(This,hWnd,Msg,wParam,lParam)
#define ISpNotifySource_SetNotifyCallbackFunction(This,pfnCallback,wParam,lParam) (This)->lpVtbl->SetNotifyCallbackFunction(This,pfnCallback,wParam,lParam)
#define ISpNotifySource_SetNotifyCallbackInterface(This,pSpCallback,wParam,lParam) (This)->lpVtbl->SetNotifyCallbackInterface(This,pSpCallback,wParam,lParam)
#define ISpNotifySource_SetNotifyWin32Event(This) (This)->lpVtbl->SetNotifyWin32Event(This)
#define ISpNotifySource_WaitForNotifyEvent(This,dwMilliseconds) (This)->lpVtbl->WaitForNotifyEvent(This,dwMilliseconds)
#define ISpNotifySource_GetNotifyEventHandle(This) (This)->lpVtbl->GetNotifyEventHandle(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpNotifySource_QueryInterface(ISpNotifySource* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpNotifySource_AddRef(ISpNotifySource* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpNotifySource_Release(ISpNotifySource* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpNotifySource methods ***/
static inline HRESULT ISpNotifySource_SetNotifySink(ISpNotifySource* This,ISpNotifySink *pNotifySink) {
    return This->lpVtbl->SetNotifySink(This,pNotifySink);
}
static inline HRESULT ISpNotifySource_SetNotifyWindowMessage(ISpNotifySource* This,HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->SetNotifyWindowMessage(This,hWnd,Msg,wParam,lParam);
}
static inline HRESULT ISpNotifySource_SetNotifyCallbackFunction(ISpNotifySource* This,SPNOTIFYCALLBACK *pfnCallback,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->SetNotifyCallbackFunction(This,pfnCallback,wParam,lParam);
}
static inline HRESULT ISpNotifySource_SetNotifyCallbackInterface(ISpNotifySource* This,ISpNotifyCallback *pSpCallback,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->SetNotifyCallbackInterface(This,pSpCallback,wParam,lParam);
}
static inline HRESULT ISpNotifySource_SetNotifyWin32Event(ISpNotifySource* This) {
    return This->lpVtbl->SetNotifyWin32Event(This);
}
static inline HRESULT ISpNotifySource_WaitForNotifyEvent(ISpNotifySource* This,DWORD dwMilliseconds) {
    return This->lpVtbl->WaitForNotifyEvent(This,dwMilliseconds);
}
static inline HANDLE ISpNotifySource_GetNotifyEventHandle(ISpNotifySource* This) {
    return This->lpVtbl->GetNotifyEventHandle(This);
}
#endif
#endif

#endif


#endif  /* __ISpNotifySource_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 inline HRESULT ISpNotifySink_QueryInterface(ISpNotifySink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpNotifySink_AddRef(ISpNotifySink* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpNotifySink_Release(ISpNotifySink* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpNotifySink methods ***/
static inline HRESULT ISpNotifySink_Notify(ISpNotifySink* This) {
    return This->lpVtbl->Notify(This);
}
#endif
#endif

#endif


#endif  /* __ISpNotifySink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpNotifyTranslator interface
 */
#ifndef __ISpNotifyTranslator_INTERFACE_DEFINED__
#define __ISpNotifyTranslator_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpNotifyTranslator, 0xaca16614, 0x5d3d, 0x11d2, 0x96,0x0e, 0x00,0xc0,0x4f,0x8e,0xe6,0x28);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("aca16614-5d3d-11d2-960e-00c04f8ee628")
ISpNotifyTranslator : public ISpNotifySink
{
    virtual HRESULT STDMETHODCALLTYPE InitWindowMessage(
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam) = 0;

    virtual HRESULT STDMETHODCALLTYPE InitCallback(
        SPNOTIFYCALLBACK *pfnCallback,
        WPARAM wParam,
        LPARAM lParam) = 0;

    virtual HRESULT STDMETHODCALLTYPE InitSpNotifyCallback(
        ISpNotifyCallback *pSpCallback,
        WPARAM wParam,
        LPARAM lParam) = 0;

    virtual HRESULT STDMETHODCALLTYPE InitWin32Event(
        HANDLE hEvent,
        WINBOOL fCloseHandleOnRelease) = 0;

    virtual HRESULT STDMETHODCALLTYPE Wait(
        DWORD dwMilliseconds) = 0;

    virtual HANDLE STDMETHODCALLTYPE GetEventHandle(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpNotifyTranslator, 0xaca16614, 0x5d3d, 0x11d2, 0x96,0x0e, 0x00,0xc0,0x4f,0x8e,0xe6,0x28)
#endif
#else
typedef struct ISpNotifyTranslatorVtbl {
    BEGIN_INTERFACE

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

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

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

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

    /*** ISpNotifyTranslator methods ***/
    HRESULT (STDMETHODCALLTYPE *InitWindowMessage)(
        ISpNotifyTranslator *This,
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam);

    HRESULT (STDMETHODCALLTYPE *InitCallback)(
        ISpNotifyTranslator *This,
        SPNOTIFYCALLBACK *pfnCallback,
        WPARAM wParam,
        LPARAM lParam);

    HRESULT (STDMETHODCALLTYPE *InitSpNotifyCallback)(
        ISpNotifyTranslator *This,
        ISpNotifyCallback *pSpCallback,
        WPARAM wParam,
        LPARAM lParam);

    HRESULT (STDMETHODCALLTYPE *InitWin32Event)(
        ISpNotifyTranslator *This,
        HANDLE hEvent,
        WINBOOL fCloseHandleOnRelease);

    HRESULT (STDMETHODCALLTYPE *Wait)(
        ISpNotifyTranslator *This,
        DWORD dwMilliseconds);

    HANDLE (STDMETHODCALLTYPE *GetEventHandle)(
        ISpNotifyTranslator *This);

    END_INTERFACE
} ISpNotifyTranslatorVtbl;

interface ISpNotifyTranslator {
    CONST_VTBL ISpNotifyTranslatorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpNotifyTranslator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpNotifyTranslator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpNotifyTranslator_Release(This) (This)->lpVtbl->Release(This)
/*** ISpNotifySink methods ***/
#define ISpNotifyTranslator_Notify(This) (This)->lpVtbl->Notify(This)
/*** ISpNotifyTranslator methods ***/
#define ISpNotifyTranslator_InitWindowMessage(This,hWnd,Msg,wParam,lParam) (This)->lpVtbl->InitWindowMessage(This,hWnd,Msg,wParam,lParam)
#define ISpNotifyTranslator_InitCallback(This,pfnCallback,wParam,lParam) (This)->lpVtbl->InitCallback(This,pfnCallback,wParam,lParam)
#define ISpNotifyTranslator_InitSpNotifyCallback(This,pSpCallback,wParam,lParam) (This)->lpVtbl->InitSpNotifyCallback(This,pSpCallback,wParam,lParam)
#define ISpNotifyTranslator_InitWin32Event(This,hEvent,fCloseHandleOnRelease) (This)->lpVtbl->InitWin32Event(This,hEvent,fCloseHandleOnRelease)
#define ISpNotifyTranslator_Wait(This,dwMilliseconds) (This)->lpVtbl->Wait(This,dwMilliseconds)
#define ISpNotifyTranslator_GetEventHandle(This) (This)->lpVtbl->GetEventHandle(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpNotifyTranslator_QueryInterface(ISpNotifyTranslator* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpNotifyTranslator_AddRef(ISpNotifyTranslator* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpNotifyTranslator_Release(ISpNotifyTranslator* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpNotifySink methods ***/
static inline HRESULT ISpNotifyTranslator_Notify(ISpNotifyTranslator* This) {
    return This->lpVtbl->Notify(This);
}
/*** ISpNotifyTranslator methods ***/
static inline HRESULT ISpNotifyTranslator_InitWindowMessage(ISpNotifyTranslator* This,HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->InitWindowMessage(This,hWnd,Msg,wParam,lParam);
}
static inline HRESULT ISpNotifyTranslator_InitCallback(ISpNotifyTranslator* This,SPNOTIFYCALLBACK *pfnCallback,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->InitCallback(This,pfnCallback,wParam,lParam);
}
static inline HRESULT ISpNotifyTranslator_InitSpNotifyCallback(ISpNotifyTranslator* This,ISpNotifyCallback *pSpCallback,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->InitSpNotifyCallback(This,pSpCallback,wParam,lParam);
}
static inline HRESULT ISpNotifyTranslator_InitWin32Event(ISpNotifyTranslator* This,HANDLE hEvent,WINBOOL fCloseHandleOnRelease) {
    return This->lpVtbl->InitWin32Event(This,hEvent,fCloseHandleOnRelease);
}
static inline HRESULT ISpNotifyTranslator_Wait(ISpNotifyTranslator* This,DWORD dwMilliseconds) {
    return This->lpVtbl->Wait(This,dwMilliseconds);
}
static inline HANDLE ISpNotifyTranslator_GetEventHandle(ISpNotifyTranslator* This) {
    return This->lpVtbl->GetEventHandle(This);
}
#endif
#endif

#endif


#endif  /* __ISpNotifyTranslator_INTERFACE_DEFINED__ */

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

#endif


#endif  /* __ISpDataKey_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpObjectWithToken interface
 */
#ifndef __ISpObjectWithToken_INTERFACE_DEFINED__
#define __ISpObjectWithToken_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpObjectWithToken, 0x5b559f40, 0xe952, 0x11d2, 0xbb,0x91, 0x00,0xc0,0x4f,0x8e,0xe6,0xc0);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5b559f40-e952-11d2-bb91-00c04f8ee6c0")
ISpObjectWithToken : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetObjectToken(
        ISpObjectToken *pToken) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetObjectToken(
        ISpObjectToken **ppToken) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpObjectWithToken, 0x5b559f40, 0xe952, 0x11d2, 0xbb,0x91, 0x00,0xc0,0x4f,0x8e,0xe6,0xc0)
#endif
#else
typedef struct ISpObjectWithTokenVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpObjectWithToken methods ***/
    HRESULT (STDMETHODCALLTYPE *SetObjectToken)(
        ISpObjectWithToken *This,
        ISpObjectToken *pToken);

    HRESULT (STDMETHODCALLTYPE *GetObjectToken)(
        ISpObjectWithToken *This,
        ISpObjectToken **ppToken);

    END_INTERFACE
} ISpObjectWithTokenVtbl;

interface ISpObjectWithToken {
    CONST_VTBL ISpObjectWithTokenVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpObjectWithToken_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpObjectWithToken_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpObjectWithToken_Release(This) (This)->lpVtbl->Release(This)
/*** ISpObjectWithToken methods ***/
#define ISpObjectWithToken_SetObjectToken(This,pToken) (This)->lpVtbl->SetObjectToken(This,pToken)
#define ISpObjectWithToken_GetObjectToken(This,ppToken) (This)->lpVtbl->GetObjectToken(This,ppToken)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpObjectWithToken_QueryInterface(ISpObjectWithToken* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpObjectWithToken_AddRef(ISpObjectWithToken* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpObjectWithToken_Release(ISpObjectWithToken* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpObjectWithToken methods ***/
static inline HRESULT ISpObjectWithToken_SetObjectToken(ISpObjectWithToken* This,ISpObjectToken *pToken) {
    return This->lpVtbl->SetObjectToken(This,pToken);
}
static inline HRESULT ISpObjectWithToken_GetObjectToken(ISpObjectWithToken* This,ISpObjectToken **ppToken) {
    return This->lpVtbl->GetObjectToken(This,ppToken);
}
#endif
#endif

#endif


#endif  /* __ISpObjectWithToken_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 inline HRESULT IEnumSpObjectTokens_QueryInterface(IEnumSpObjectTokens* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IEnumSpObjectTokens_AddRef(IEnumSpObjectTokens* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IEnumSpObjectTokens_Release(IEnumSpObjectTokens* This) {
    return This->lpVtbl->Release(This);
}
/*** IEnumSpObjectTokens methods ***/
static inline HRESULT IEnumSpObjectTokens_Next(IEnumSpObjectTokens* This,ULONG celt,ISpObjectToken **pelt,ULONG *pceltFetched) {
    return This->lpVtbl->Next(This,celt,pelt,pceltFetched);
}
static inline HRESULT IEnumSpObjectTokens_Skip(IEnumSpObjectTokens* This,ULONG celt) {
    return This->lpVtbl->Skip(This,celt);
}
static inline HRESULT IEnumSpObjectTokens_Reset(IEnumSpObjectTokens* This) {
    return This->lpVtbl->Reset(This);
}
static inline HRESULT IEnumSpObjectTokens_Clone(IEnumSpObjectTokens* This,IEnumSpObjectTokens **ppEnum) {
    return This->lpVtbl->Clone(This,ppEnum);
}
static inline HRESULT IEnumSpObjectTokens_Item(IEnumSpObjectTokens* This,ULONG Index,ISpObjectToken **ppToken) {
    return This->lpVtbl->Item(This,Index,ppToken);
}
static inline HRESULT IEnumSpObjectTokens_GetCount(IEnumSpObjectTokens* This,ULONG *pCount) {
    return This->lpVtbl->GetCount(This,pCount);
}
#endif
#endif

#endif


#endif  /* __IEnumSpObjectTokens_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,
        WINBOOL 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,
        WINBOOL 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 inline HRESULT ISpRegDataKey_QueryInterface(ISpRegDataKey* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpRegDataKey_AddRef(ISpRegDataKey* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpRegDataKey_Release(ISpRegDataKey* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpDataKey methods ***/
static inline HRESULT ISpRegDataKey_SetData(ISpRegDataKey* This,LPCWSTR pszValueName,ULONG cbData,const BYTE *pData) {
    return This->lpVtbl->SetData(This,pszValueName,cbData,pData);
}
static inline HRESULT ISpRegDataKey_GetData(ISpRegDataKey* This,LPCWSTR pszValueName,ULONG *pcbData,BYTE *pData) {
    return This->lpVtbl->GetData(This,pszValueName,pcbData,pData);
}
static inline HRESULT ISpRegDataKey_SetStringValue(ISpRegDataKey* This,LPCWSTR pszValueName,LPCWSTR pszValue) {
    return This->lpVtbl->SetStringValue(This,pszValueName,pszValue);
}
static inline HRESULT ISpRegDataKey_GetStringValue(ISpRegDataKey* This,LPCWSTR pszValueName,LPWSTR *ppszValue) {
    return This->lpVtbl->GetStringValue(This,pszValueName,ppszValue);
}
static inline HRESULT ISpRegDataKey_SetDWORD(ISpRegDataKey* This,LPCWSTR pszValueName,DWORD dwValue) {
    return This->lpVtbl->SetDWORD(This,pszValueName,dwValue);
}
static inline HRESULT ISpRegDataKey_GetDWORD(ISpRegDataKey* This,LPCWSTR pszValueName,DWORD *pdwValue) {
    return This->lpVtbl->GetDWORD(This,pszValueName,pdwValue);
}
static inline HRESULT ISpRegDataKey_OpenKey(ISpRegDataKey* This,LPCWSTR pszSubKeyName,ISpDataKey **ppSubKey) {
    return This->lpVtbl->OpenKey(This,pszSubKeyName,ppSubKey);
}
static inline HRESULT ISpRegDataKey_CreateKey(ISpRegDataKey* This,LPCWSTR pszSubKey,ISpDataKey **ppSubKey) {
    return This->lpVtbl->CreateKey(This,pszSubKey,ppSubKey);
}
static inline HRESULT ISpRegDataKey_DeleteKey(ISpRegDataKey* This,LPCWSTR pszSubKey) {
    return This->lpVtbl->DeleteKey(This,pszSubKey);
}
static inline HRESULT ISpRegDataKey_DeleteValue(ISpRegDataKey* This,LPCWSTR pszValueName) {
    return This->lpVtbl->DeleteValue(This,pszValueName);
}
static inline HRESULT ISpRegDataKey_EnumKeys(ISpRegDataKey* This,ULONG Index,LPWSTR *ppszSubKeyName) {
    return This->lpVtbl->EnumKeys(This,Index,ppszSubKeyName);
}
static inline HRESULT ISpRegDataKey_EnumValues(ISpRegDataKey* This,ULONG Index,LPWSTR *ppszValueName) {
    return This->lpVtbl->EnumValues(This,Index,ppszValueName);
}
/*** ISpRegDataKey methods ***/
static inline HRESULT ISpRegDataKey_SetKey(ISpRegDataKey* This,HKEY hkey,WINBOOL 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,
        WINBOOL fCreateIfNotExist) = 0;

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

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

    virtual HRESULT STDMETHODCALLTYPE EnumTokens(
        LPCWSTR pzsReqAttribs,
        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,
        WINBOOL fCreateIfNotExist);

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

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

    HRESULT (STDMETHODCALLTYPE *EnumTokens)(
        ISpObjectTokenCategory *This,
        LPCWSTR pzsReqAttribs,
        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,pzsReqAttribs,pszOptAttribs,ppEnum) (This)->lpVtbl->EnumTokens(This,pzsReqAttribs,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 inline HRESULT ISpObjectTokenCategory_QueryInterface(ISpObjectTokenCategory* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpObjectTokenCategory_AddRef(ISpObjectTokenCategory* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpObjectTokenCategory_Release(ISpObjectTokenCategory* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpDataKey methods ***/
static inline HRESULT ISpObjectTokenCategory_SetData(ISpObjectTokenCategory* This,LPCWSTR pszValueName,ULONG cbData,const BYTE *pData) {
    return This->lpVtbl->SetData(This,pszValueName,cbData,pData);
}
static inline HRESULT ISpObjectTokenCategory_GetData(ISpObjectTokenCategory* This,LPCWSTR pszValueName,ULONG *pcbData,BYTE *pData) {
    return This->lpVtbl->GetData(This,pszValueName,pcbData,pData);
}
static inline HRESULT ISpObjectTokenCategory_SetStringValue(ISpObjectTokenCategory* This,LPCWSTR pszValueName,LPCWSTR pszValue) {
    return This->lpVtbl->SetStringValue(This,pszValueName,pszValue);
}
static inline HRESULT ISpObjectTokenCategory_GetStringValue(ISpObjectTokenCategory* This,LPCWSTR pszValueName,LPWSTR *ppszValue) {
    return This->lpVtbl->GetStringValue(This,pszValueName,ppszValue);
}
static inline HRESULT ISpObjectTokenCategory_SetDWORD(ISpObjectTokenCategory* This,LPCWSTR pszValueName,DWORD dwValue) {
    return This->lpVtbl->SetDWORD(This,pszValueName,dwValue);
}
static inline HRESULT ISpObjectTokenCategory_GetDWORD(ISpObjectTokenCategory* This,LPCWSTR pszValueName,DWORD *pdwValue) {
    return This->lpVtbl->GetDWORD(This,pszValueName,pdwValue);
}
static inline HRESULT ISpObjectTokenCategory_OpenKey(ISpObjectTokenCategory* This,LPCWSTR pszSubKeyName,ISpDataKey **ppSubKey) {
    return This->lpVtbl->OpenKey(This,pszSubKeyName,ppSubKey);
}
static inline HRESULT ISpObjectTokenCategory_CreateKey(ISpObjectTokenCategory* This,LPCWSTR pszSubKey,ISpDataKey **ppSubKey) {
    return This->lpVtbl->CreateKey(This,pszSubKey,ppSubKey);
}
static inline HRESULT ISpObjectTokenCategory_DeleteKey(ISpObjectTokenCategory* This,LPCWSTR pszSubKey) {
    return This->lpVtbl->DeleteKey(This,pszSubKey);
}
static inline HRESULT ISpObjectTokenCategory_DeleteValue(ISpObjectTokenCategory* This,LPCWSTR pszValueName) {
    return This->lpVtbl->DeleteValue(This,pszValueName);
}
static inline HRESULT ISpObjectTokenCategory_EnumKeys(ISpObjectTokenCategory* This,ULONG Index,LPWSTR *ppszSubKeyName) {
    return This->lpVtbl->EnumKeys(This,Index,ppszSubKeyName);
}
static inline HRESULT ISpObjectTokenCategory_EnumValues(ISpObjectTokenCategory* This,ULONG Index,LPWSTR *ppszValueName) {
    return This->lpVtbl->EnumValues(This,Index,ppszValueName);
}
/*** ISpObjectTokenCategory methods ***/
static inline HRESULT ISpObjectTokenCategory_SetId(ISpObjectTokenCategory* This,LPCWSTR pszCategoryId,WINBOOL fCreateIfNotExist) {
    return This->lpVtbl->SetId(This,pszCategoryId,fCreateIfNotExist);
}
static inline HRESULT ISpObjectTokenCategory_GetId(ISpObjectTokenCategory* This,LPWSTR *ppszCoMemCategoryId) {
    return This->lpVtbl->GetId(This,ppszCoMemCategoryId);
}
static inline HRESULT ISpObjectTokenCategory_GetDataKey(ISpObjectTokenCategory* This,SPDATAKEYLOCATION spdkl,ISpDataKey **ppDataKey) {
    return This->lpVtbl->GetDataKey(This,spdkl,ppDataKey);
}
static inline HRESULT ISpObjectTokenCategory_EnumTokens(ISpObjectTokenCategory* This,LPCWSTR pzsReqAttribs,LPCWSTR pszOptAttribs,IEnumSpObjectTokens **ppEnum) {
    return This->lpVtbl->EnumTokens(This,pzsReqAttribs,pszOptAttribs,ppEnum);
}
static inline HRESULT ISpObjectTokenCategory_SetDefaultTokenId(ISpObjectTokenCategory* This,LPCWSTR pszTokenId) {
    return This->lpVtbl->SetDefaultTokenId(This,pszTokenId);
}
static inline 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,
        WINBOOL 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,
        WINBOOL fDeleteFile) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE IsUISupported(
        LPCWSTR pszTypeOfUI,
        void *pvExtraData,
        ULONG cbExtraData,
        IUnknown *punkObject,
        WINBOOL *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,
        WINBOOL *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,
        WINBOOL 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,
        WINBOOL fDeleteFile);

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

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

#endif


#endif  /* __ISpObjectToken_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpObjectTokenInit interface
 */
#ifndef __ISpObjectTokenInit_INTERFACE_DEFINED__
#define __ISpObjectTokenInit_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpObjectTokenInit, 0xb8aab0cf, 0x346f, 0x49d8, 0x94,0x99, 0xc8,0xb0,0x3f,0x16,0x1d,0x51);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b8aab0cf-346f-49d8-9499-c8b03f161d51")
ISpObjectTokenInit : public ISpObjectToken
{
    virtual HRESULT STDMETHODCALLTYPE InitFromDataKey(
        LPCWSTR pszCategoryId,
        LPCWSTR pszTokenId,
        ISpDataKey *pDataKey) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpObjectTokenInit, 0xb8aab0cf, 0x346f, 0x49d8, 0x94,0x99, 0xc8,0xb0,0x3f,0x16,0x1d,0x51)
#endif
#else
typedef struct ISpObjectTokenInitVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *RemoveStorageFileName)(
        ISpObjectTokenInit *This,
        REFCLSID clsidCaller,
        LPCWSTR pszKeyName,
        WINBOOL fDeleteFile);

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

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

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

    HRESULT (STDMETHODCALLTYPE *MatchesAttributes)(
        ISpObjectTokenInit *This,
        LPCWSTR pszAttributes,
        WINBOOL *pfMatches);

    /*** ISpObjectTokenInit methods ***/
    HRESULT (STDMETHODCALLTYPE *InitFromDataKey)(
        ISpObjectTokenInit *This,
        LPCWSTR pszCategoryId,
        LPCWSTR pszTokenId,
        ISpDataKey *pDataKey);

    END_INTERFACE
} ISpObjectTokenInitVtbl;

interface ISpObjectTokenInit {
    CONST_VTBL ISpObjectTokenInitVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpObjectTokenInit_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpObjectTokenInit_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpObjectTokenInit_Release(This) (This)->lpVtbl->Release(This)
/*** ISpDataKey methods ***/
#define ISpObjectTokenInit_SetData(This,pszValueName,cbData,pData) (This)->lpVtbl->SetData(This,pszValueName,cbData,pData)
#define ISpObjectTokenInit_GetData(This,pszValueName,pcbData,pData) (This)->lpVtbl->GetData(This,pszValueName,pcbData,pData)
#define ISpObjectTokenInit_SetStringValue(This,pszValueName,pszValue) (This)->lpVtbl->SetStringValue(This,pszValueName,pszValue)
#define ISpObjectTokenInit_GetStringValue(This,pszValueName,ppszValue) (This)->lpVtbl->GetStringValue(This,pszValueName,ppszValue)
#define ISpObjectTokenInit_SetDWORD(This,pszValueName,dwValue) (This)->lpVtbl->SetDWORD(This,pszValueName,dwValue)
#define ISpObjectTokenInit_GetDWORD(This,pszValueName,pdwValue) (This)->lpVtbl->GetDWORD(This,pszValueName,pdwValue)
#define ISpObjectTokenInit_OpenKey(This,pszSubKeyName,ppSubKey) (This)->lpVtbl->OpenKey(This,pszSubKeyName,ppSubKey)
#define ISpObjectTokenInit_CreateKey(This,pszSubKey,ppSubKey) (This)->lpVtbl->CreateKey(This,pszSubKey,ppSubKey)
#define ISpObjectTokenInit_DeleteKey(This,pszSubKey) (This)->lpVtbl->DeleteKey(This,pszSubKey)
#define ISpObjectTokenInit_DeleteValue(This,pszValueName) (This)->lpVtbl->DeleteValue(This,pszValueName)
#define ISpObjectTokenInit_EnumKeys(This,Index,ppszSubKeyName) (This)->lpVtbl->EnumKeys(This,Index,ppszSubKeyName)
#define ISpObjectTokenInit_EnumValues(This,Index,ppszValueName) (This)->lpVtbl->EnumValues(This,Index,ppszValueName)
/*** ISpObjectToken methods ***/
#define ISpObjectTokenInit_SetId(This,pszCategoryId,pszTokenId,fCreateIfNotExist) (This)->lpVtbl->SetId(This,pszCategoryId,pszTokenId,fCreateIfNotExist)
#define ISpObjectTokenInit_GetId(This,ppszCoMemTokenId) (This)->lpVtbl->GetId(This,ppszCoMemTokenId)
#define ISpObjectTokenInit_GetCategory(This,ppTokenCategory) (This)->lpVtbl->GetCategory(This,ppTokenCategory)
#define ISpObjectTokenInit_CreateInstance(This,pUnkOuter,dwClsContext,riid,ppvObject) (This)->lpVtbl->CreateInstance(This,pUnkOuter,dwClsContext,riid,ppvObject)
#define ISpObjectTokenInit_GetStorageFileName(This,clsidCaller,pszValueName,pszFileNameSpecifier,nFolder,ppszFilePath) (This)->lpVtbl->GetStorageFileName(This,clsidCaller,pszValueName,pszFileNameSpecifier,nFolder,ppszFilePath)
#define ISpObjectTokenInit_RemoveStorageFileName(This,clsidCaller,pszKeyName,fDeleteFile) (This)->lpVtbl->RemoveStorageFileName(This,clsidCaller,pszKeyName,fDeleteFile)
#define ISpObjectTokenInit_Remove(This,pclsidCaller) (This)->lpVtbl->Remove(This,pclsidCaller)
#define ISpObjectTokenInit_IsUISupported(This,pszTypeOfUI,pvExtraData,cbExtraData,punkObject,pfSupported) (This)->lpVtbl->IsUISupported(This,pszTypeOfUI,pvExtraData,cbExtraData,punkObject,pfSupported)
#define ISpObjectTokenInit_DisplayUI(This,hwndParent,pszTitle,pszTypeOfUI,pvExtraData,cbExtraData,punkObject) (This)->lpVtbl->DisplayUI(This,hwndParent,pszTitle,pszTypeOfUI,pvExtraData,cbExtraData,punkObject)
#define ISpObjectTokenInit_MatchesAttributes(This,pszAttributes,pfMatches) (This)->lpVtbl->MatchesAttributes(This,pszAttributes,pfMatches)
/*** ISpObjectTokenInit methods ***/
#define ISpObjectTokenInit_InitFromDataKey(This,pszCategoryId,pszTokenId,pDataKey) (This)->lpVtbl->InitFromDataKey(This,pszCategoryId,pszTokenId,pDataKey)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpObjectTokenInit_QueryInterface(ISpObjectTokenInit* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpObjectTokenInit_AddRef(ISpObjectTokenInit* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpObjectTokenInit_Release(ISpObjectTokenInit* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpDataKey methods ***/
static inline HRESULT ISpObjectTokenInit_SetData(ISpObjectTokenInit* This,LPCWSTR pszValueName,ULONG cbData,const BYTE *pData) {
    return This->lpVtbl->SetData(This,pszValueName,cbData,pData);
}
static inline HRESULT ISpObjectTokenInit_GetData(ISpObjectTokenInit* This,LPCWSTR pszValueName,ULONG *pcbData,BYTE *pData) {
    return This->lpVtbl->GetData(This,pszValueName,pcbData,pData);
}
static inline HRESULT ISpObjectTokenInit_SetStringValue(ISpObjectTokenInit* This,LPCWSTR pszValueName,LPCWSTR pszValue) {
    return This->lpVtbl->SetStringValue(This,pszValueName,pszValue);
}
static inline HRESULT ISpObjectTokenInit_GetStringValue(ISpObjectTokenInit* This,LPCWSTR pszValueName,LPWSTR *ppszValue) {
    return This->lpVtbl->GetStringValue(This,pszValueName,ppszValue);
}
static inline HRESULT ISpObjectTokenInit_SetDWORD(ISpObjectTokenInit* This,LPCWSTR pszValueName,DWORD dwValue) {
    return This->lpVtbl->SetDWORD(This,pszValueName,dwValue);
}
static inline HRESULT ISpObjectTokenInit_GetDWORD(ISpObjectTokenInit* This,LPCWSTR pszValueName,DWORD *pdwValue) {
    return This->lpVtbl->GetDWORD(This,pszValueName,pdwValue);
}
static inline HRESULT ISpObjectTokenInit_OpenKey(ISpObjectTokenInit* This,LPCWSTR pszSubKeyName,ISpDataKey **ppSubKey) {
    return This->lpVtbl->OpenKey(This,pszSubKeyName,ppSubKey);
}
static inline HRESULT ISpObjectTokenInit_CreateKey(ISpObjectTokenInit* This,LPCWSTR pszSubKey,ISpDataKey **ppSubKey) {
    return This->lpVtbl->CreateKey(This,pszSubKey,ppSubKey);
}
static inline HRESULT ISpObjectTokenInit_DeleteKey(ISpObjectTokenInit* This,LPCWSTR pszSubKey) {
    return This->lpVtbl->DeleteKey(This,pszSubKey);
}
static inline HRESULT ISpObjectTokenInit_DeleteValue(ISpObjectTokenInit* This,LPCWSTR pszValueName) {
    return This->lpVtbl->DeleteValue(This,pszValueName);
}
static inline HRESULT ISpObjectTokenInit_EnumKeys(ISpObjectTokenInit* This,ULONG Index,LPWSTR *ppszSubKeyName) {
    return This->lpVtbl->EnumKeys(This,Index,ppszSubKeyName);
}
static inline HRESULT ISpObjectTokenInit_EnumValues(ISpObjectTokenInit* This,ULONG Index,LPWSTR *ppszValueName) {
    return This->lpVtbl->EnumValues(This,Index,ppszValueName);
}
/*** ISpObjectToken methods ***/
static inline HRESULT ISpObjectTokenInit_SetId(ISpObjectTokenInit* This,LPCWSTR pszCategoryId,LPCWSTR pszTokenId,WINBOOL fCreateIfNotExist) {
    return This->lpVtbl->SetId(This,pszCategoryId,pszTokenId,fCreateIfNotExist);
}
static inline HRESULT ISpObjectTokenInit_GetId(ISpObjectTokenInit* This,LPWSTR *ppszCoMemTokenId) {
    return This->lpVtbl->GetId(This,ppszCoMemTokenId);
}
static inline HRESULT ISpObjectTokenInit_GetCategory(ISpObjectTokenInit* This,ISpObjectTokenCategory **ppTokenCategory) {
    return This->lpVtbl->GetCategory(This,ppTokenCategory);
}
static inline HRESULT ISpObjectTokenInit_CreateInstance(ISpObjectTokenInit* This,IUnknown *pUnkOuter,DWORD dwClsContext,REFIID riid,void **ppvObject) {
    return This->lpVtbl->CreateInstance(This,pUnkOuter,dwClsContext,riid,ppvObject);
}
static inline HRESULT ISpObjectTokenInit_GetStorageFileName(ISpObjectTokenInit* This,REFCLSID clsidCaller,LPCWSTR pszValueName,LPCWSTR pszFileNameSpecifier,ULONG nFolder,LPWSTR *ppszFilePath) {
    return This->lpVtbl->GetStorageFileName(This,clsidCaller,pszValueName,pszFileNameSpecifier,nFolder,ppszFilePath);
}
static inline HRESULT ISpObjectTokenInit_RemoveStorageFileName(ISpObjectTokenInit* This,REFCLSID clsidCaller,LPCWSTR pszKeyName,WINBOOL fDeleteFile) {
    return This->lpVtbl->RemoveStorageFileName(This,clsidCaller,pszKeyName,fDeleteFile);
}
static inline HRESULT ISpObjectTokenInit_Remove(ISpObjectTokenInit* This,const CLSID *pclsidCaller) {
    return This->lpVtbl->Remove(This,pclsidCaller);
}
static inline HRESULT ISpObjectTokenInit_IsUISupported(ISpObjectTokenInit* This,LPCWSTR pszTypeOfUI,void *pvExtraData,ULONG cbExtraData,IUnknown *punkObject,WINBOOL *pfSupported) {
    return This->lpVtbl->IsUISupported(This,pszTypeOfUI,pvExtraData,cbExtraData,punkObject,pfSupported);
}
static inline HRESULT ISpObjectTokenInit_DisplayUI(ISpObjectTokenInit* 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 inline HRESULT ISpObjectTokenInit_MatchesAttributes(ISpObjectTokenInit* This,LPCWSTR pszAttributes,WINBOOL *pfMatches) {
    return This->lpVtbl->MatchesAttributes(This,pszAttributes,pfMatches);
}
/*** ISpObjectTokenInit methods ***/
static inline HRESULT ISpObjectTokenInit_InitFromDataKey(ISpObjectTokenInit* This,LPCWSTR pszCategoryId,LPCWSTR pszTokenId,ISpDataKey *pDataKey) {
    return This->lpVtbl->InitFromDataKey(This,pszCategoryId,pszTokenId,pDataKey);
}
#endif
#endif

#endif


#endif  /* __ISpObjectTokenInit_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpResourceManager interface
 */
#ifndef __ISpResourceManager_INTERFACE_DEFINED__
#define __ISpResourceManager_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpResourceManager, 0x93384e18, 0x5014, 0x43d5, 0xad,0xbb, 0xa7,0x8e,0x05,0x59,0x26,0xbd);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("93384e18-5014-43d5-adbb-a78e055926bd")
ISpResourceManager : public IServiceProvider
{
    virtual HRESULT STDMETHODCALLTYPE SetObject(
        REFGUID guidServiceId,
        IUnknown *pUnkObject) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetObject(
        REFGUID guidServiceId,
        REFCLSID ObjectCLSID,
        REFIID ObjectIID,
        WINBOOL fReleaseWhenLastExternalRefReleased,
        void **ppObject) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpResourceManager, 0x93384e18, 0x5014, 0x43d5, 0xad,0xbb, 0xa7,0x8e,0x05,0x59,0x26,0xbd)
#endif
#else
typedef struct ISpResourceManagerVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IServiceProvider methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryService)(
        ISpResourceManager *This,
        REFGUID guidService,
        REFIID riid,
        void **ppvObject);

    /*** ISpResourceManager methods ***/
    HRESULT (STDMETHODCALLTYPE *SetObject)(
        ISpResourceManager *This,
        REFGUID guidServiceId,
        IUnknown *pUnkObject);

    HRESULT (STDMETHODCALLTYPE *GetObject)(
        ISpResourceManager *This,
        REFGUID guidServiceId,
        REFCLSID ObjectCLSID,
        REFIID ObjectIID,
        WINBOOL fReleaseWhenLastExternalRefReleased,
        void **ppObject);

    END_INTERFACE
} ISpResourceManagerVtbl;

interface ISpResourceManager {
    CONST_VTBL ISpResourceManagerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpResourceManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpResourceManager_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpResourceManager_Release(This) (This)->lpVtbl->Release(This)
/*** IServiceProvider methods ***/
#define ISpResourceManager_QueryService(This,guidService,riid,ppvObject) (This)->lpVtbl->QueryService(This,guidService,riid,ppvObject)
/*** ISpResourceManager methods ***/
#define ISpResourceManager_SetObject(This,guidServiceId,pUnkObject) (This)->lpVtbl->SetObject(This,guidServiceId,pUnkObject)
#define ISpResourceManager_GetObject(This,guidServiceId,ObjectCLSID,ObjectIID,fReleaseWhenLastExternalRefReleased,ppObject) (This)->lpVtbl->GetObject(This,guidServiceId,ObjectCLSID,ObjectIID,fReleaseWhenLastExternalRefReleased,ppObject)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpResourceManager_QueryInterface(ISpResourceManager* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpResourceManager_AddRef(ISpResourceManager* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpResourceManager_Release(ISpResourceManager* This) {
    return This->lpVtbl->Release(This);
}
/*** IServiceProvider methods ***/
static inline HRESULT ISpResourceManager_QueryService(ISpResourceManager* This,REFGUID guidService,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryService(This,guidService,riid,ppvObject);
}
/*** ISpResourceManager methods ***/
static inline HRESULT ISpResourceManager_SetObject(ISpResourceManager* This,REFGUID guidServiceId,IUnknown *pUnkObject) {
    return This->lpVtbl->SetObject(This,guidServiceId,pUnkObject);
}
static inline HRESULT ISpResourceManager_GetObject(ISpResourceManager* This,REFGUID guidServiceId,REFCLSID ObjectCLSID,REFIID ObjectIID,WINBOOL fReleaseWhenLastExternalRefReleased,void **ppObject) {
    return This->lpVtbl->GetObject(This,guidServiceId,ObjectCLSID,ObjectIID,fReleaseWhenLastExternalRefReleased,ppObject);
}
#endif
#endif

#endif


#endif  /* __ISpResourceManager_INTERFACE_DEFINED__ */

#if 0
typedef struct SPEVENT {
    WORD eEventId;
    WORD elParamType;
    ULONG ulStreamNum;
    ULONGLONG ullAudioStreamOffset;
    WPARAM wParam;
    LPARAM lParam;
} SPEVENT;
typedef struct SPSERIALIZEDEVENT {
    WORD eEventId;
    WORD elParamType;
    ULONG ulStreamNum;
    ULONGLONG ullAudioStreamOffset;
    ULONG SerializedwParam;
    LONG SerializedlParam;
} SPSERIALIZEDEVENT;
typedef struct SPSERIALIZEDEVENT64 {
    WORD eEventId;
    WORD elParamType;
    ULONG ulStreamNum;
    ULONGLONG ullAudioStreamOffset;
    ULONGLONG SerializedwParam;
    LONGLONG SerializedlParam;
} SPSERIALIZEDEVENT64;
#else
typedef struct SPEVENT {
  SPEVENTENUM eEventId : 16;
  SPEVENTLPARAMTYPE elParamType : 16;
  ULONG ulStreamNum;
  ULONGLONG ullAudioStreamOffset;
  WPARAM      wParam;
  LPARAM      lParam;
} SPEVENT;

typedef struct SPSERIALIZEDEVENT {
  SPEVENTENUM eEventId : 16;
  SPEVENTLPARAMTYPE elParamType : 16;
  ULONG ulStreamNum;
  ULONGLONG ullAudioStreamOffset;
  ULONG SerializedwParam;
  LONG SerializedlParam;
} SPSERIALIZEDEVENT;

typedef struct SPSERIALIZEDEVENT64 {
  SPEVENTENUM eEventId : 16;
  SPEVENTLPARAMTYPE elParamType : 16;
  ULONG ulStreamNum;
  ULONGLONG ullAudioStreamOffset;
  ULONGLONG SerializedwParam;
  LONGLONG SerializedlParam;
} SPSERIALIZEDEVENT64;
#endif
typedef struct SPEVENTSOURCEINFO {
    ULONGLONG ullEventInterest;
    ULONGLONG ullQueuedInterest;
    ULONG ulCount;
} SPEVENTSOURCEINFO;
/*****************************************************************************
 * 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 ullEventInterest,
        ULONGLONG ullQueuedInterest) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEvents(
        ULONG ulCount,
        SPEVENT *pEventArray,
        ULONG *pulFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInfo(
        SPEVENTSOURCEINFO *pInfo) = 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 *pNotifySink);

    HRESULT (STDMETHODCALLTYPE *SetNotifyWindowMessage)(
        ISpEventSource *This,
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackFunction)(
        ISpEventSource *This,
        SPNOTIFYCALLBACK *pfnCallback,
        WPARAM wParam,
        LPARAM lParam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackInterface)(
        ISpEventSource *This,
        ISpNotifyCallback *pSpCallback,
        WPARAM wParam,
        LPARAM lParam);

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

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

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

    /*** ISpEventSource methods ***/
    HRESULT (STDMETHODCALLTYPE *SetInterest)(
        ISpEventSource *This,
        ULONGLONG ullEventInterest,
        ULONGLONG ullQueuedInterest);

    HRESULT (STDMETHODCALLTYPE *GetEvents)(
        ISpEventSource *This,
        ULONG ulCount,
        SPEVENT *pEventArray,
        ULONG *pulFetched);

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

    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,pNotifySink) (This)->lpVtbl->SetNotifySink(This,pNotifySink)
#define ISpEventSource_SetNotifyWindowMessage(This,hWnd,Msg,wParam,lParam) (This)->lpVtbl->SetNotifyWindowMessage(This,hWnd,Msg,wParam,lParam)
#define ISpEventSource_SetNotifyCallbackFunction(This,pfnCallback,wParam,lParam) (This)->lpVtbl->SetNotifyCallbackFunction(This,pfnCallback,wParam,lParam)
#define ISpEventSource_SetNotifyCallbackInterface(This,pSpCallback,wParam,lParam) (This)->lpVtbl->SetNotifyCallbackInterface(This,pSpCallback,wParam,lParam)
#define ISpEventSource_SetNotifyWin32Event(This) (This)->lpVtbl->SetNotifyWin32Event(This)
#define ISpEventSource_WaitForNotifyEvent(This,dwMilliseconds) (This)->lpVtbl->WaitForNotifyEvent(This,dwMilliseconds)
#define ISpEventSource_GetNotifyEventHandle(This) (This)->lpVtbl->GetNotifyEventHandle(This)
/*** ISpEventSource methods ***/
#define ISpEventSource_SetInterest(This,ullEventInterest,ullQueuedInterest) (This)->lpVtbl->SetInterest(This,ullEventInterest,ullQueuedInterest)
#define ISpEventSource_GetEvents(This,ulCount,pEventArray,pulFetched) (This)->lpVtbl->GetEvents(This,ulCount,pEventArray,pulFetched)
#define ISpEventSource_GetInfo(This,pInfo) (This)->lpVtbl->GetInfo(This,pInfo)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpEventSource_QueryInterface(ISpEventSource* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpEventSource_AddRef(ISpEventSource* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpEventSource_Release(ISpEventSource* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpNotifySource methods ***/
static inline HRESULT ISpEventSource_SetNotifySink(ISpEventSource* This,ISpNotifySink *pNotifySink) {
    return This->lpVtbl->SetNotifySink(This,pNotifySink);
}
static inline HRESULT ISpEventSource_SetNotifyWindowMessage(ISpEventSource* This,HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->SetNotifyWindowMessage(This,hWnd,Msg,wParam,lParam);
}
static inline HRESULT ISpEventSource_SetNotifyCallbackFunction(ISpEventSource* This,SPNOTIFYCALLBACK *pfnCallback,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->SetNotifyCallbackFunction(This,pfnCallback,wParam,lParam);
}
static inline HRESULT ISpEventSource_SetNotifyCallbackInterface(ISpEventSource* This,ISpNotifyCallback *pSpCallback,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->SetNotifyCallbackInterface(This,pSpCallback,wParam,lParam);
}
static inline HRESULT ISpEventSource_SetNotifyWin32Event(ISpEventSource* This) {
    return This->lpVtbl->SetNotifyWin32Event(This);
}
static inline HRESULT ISpEventSource_WaitForNotifyEvent(ISpEventSource* This,DWORD dwMilliseconds) {
    return This->lpVtbl->WaitForNotifyEvent(This,dwMilliseconds);
}
static inline HANDLE ISpEventSource_GetNotifyEventHandle(ISpEventSource* This) {
    return This->lpVtbl->GetNotifyEventHandle(This);
}
/*** ISpEventSource methods ***/
static inline HRESULT ISpEventSource_SetInterest(ISpEventSource* This,ULONGLONG ullEventInterest,ULONGLONG ullQueuedInterest) {
    return This->lpVtbl->SetInterest(This,ullEventInterest,ullQueuedInterest);
}
static inline HRESULT ISpEventSource_GetEvents(ISpEventSource* This,ULONG ulCount,SPEVENT *pEventArray,ULONG *pulFetched) {
    return This->lpVtbl->GetEvents(This,ulCount,pEventArray,pulFetched);
}
static inline HRESULT ISpEventSource_GetInfo(ISpEventSource* This,SPEVENTSOURCEINFO *pInfo) {
    return This->lpVtbl->GetInfo(This,pInfo);
}
#endif
#endif

#endif


#endif  /* __ISpEventSource_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpEventSink interface
 */
#ifndef __ISpEventSink_INTERFACE_DEFINED__
#define __ISpEventSink_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpEventSink, 0xbe7a9cc9, 0x5f9e, 0x11d2, 0x96,0x0f, 0x00,0xc0,0x4f,0x8e,0xe6,0x28);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("be7a9cc9-5f9e-11d2-960f-00c04f8ee628")
ISpEventSink : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE AddEvents(
        const SPEVENT *pEventArray,
        ULONG ulCount) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEventInterest(
        ULONGLONG *pullEventInterest) = 0;

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

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

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

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

    /*** ISpEventSink methods ***/
    HRESULT (STDMETHODCALLTYPE *AddEvents)(
        ISpEventSink *This,
        const SPEVENT *pEventArray,
        ULONG ulCount);

    HRESULT (STDMETHODCALLTYPE *GetEventInterest)(
        ISpEventSink *This,
        ULONGLONG *pullEventInterest);

    END_INTERFACE
} ISpEventSinkVtbl;

interface ISpEventSink {
    CONST_VTBL ISpEventSinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpEventSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpEventSink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpEventSink_Release(This) (This)->lpVtbl->Release(This)
/*** ISpEventSink methods ***/
#define ISpEventSink_AddEvents(This,pEventArray,ulCount) (This)->lpVtbl->AddEvents(This,pEventArray,ulCount)
#define ISpEventSink_GetEventInterest(This,pullEventInterest) (This)->lpVtbl->GetEventInterest(This,pullEventInterest)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpEventSink_QueryInterface(ISpEventSink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpEventSink_AddRef(ISpEventSink* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpEventSink_Release(ISpEventSink* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpEventSink methods ***/
static inline HRESULT ISpEventSink_AddEvents(ISpEventSink* This,const SPEVENT *pEventArray,ULONG ulCount) {
    return This->lpVtbl->AddEvents(This,pEventArray,ulCount);
}
static inline HRESULT ISpEventSink_GetEventInterest(ISpEventSink* This,ULONGLONG *pullEventInterest) {
    return This->lpVtbl->GetEventInterest(This,pullEventInterest);
}
#endif
#endif

#endif


#endif  /* __ISpEventSink_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 *pguidFormatId,
        WAVEFORMATEX **ppCoMemWaveFormatEx) = 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 *pguidFormatId,
        WAVEFORMATEX **ppCoMemWaveFormatEx);

    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,pguidFormatId,ppCoMemWaveFormatEx) (This)->lpVtbl->GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpStreamFormat_QueryInterface(ISpStreamFormat* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpStreamFormat_AddRef(ISpStreamFormat* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpStreamFormat_Release(ISpStreamFormat* This) {
    return This->lpVtbl->Release(This);
}
/*** ISequentialStream methods ***/
static inline HRESULT ISpStreamFormat_Read(ISpStreamFormat* This,void *pv,ULONG cb,ULONG *pcbRead) {
    return This->lpVtbl->Read(This,pv,cb,pcbRead);
}
static inline HRESULT ISpStreamFormat_Write(ISpStreamFormat* This,const void *pv,ULONG cb,ULONG *pcbWritten) {
    return This->lpVtbl->Write(This,pv,cb,pcbWritten);
}
/*** IStream methods ***/
static inline HRESULT ISpStreamFormat_Seek(ISpStreamFormat* This,LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition) {
    return This->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition);
}
static inline HRESULT ISpStreamFormat_SetSize(ISpStreamFormat* This,ULARGE_INTEGER libNewSize) {
    return This->lpVtbl->SetSize(This,libNewSize);
}
static inline 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 inline HRESULT ISpStreamFormat_Commit(ISpStreamFormat* This,DWORD grfCommitFlags) {
    return This->lpVtbl->Commit(This,grfCommitFlags);
}
static inline HRESULT ISpStreamFormat_Revert(ISpStreamFormat* This) {
    return This->lpVtbl->Revert(This);
}
static inline HRESULT ISpStreamFormat_LockRegion(ISpStreamFormat* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->LockRegion(This,libOffset,cb,dwLockType);
}
static inline HRESULT ISpStreamFormat_UnlockRegion(ISpStreamFormat* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType);
}
static inline HRESULT ISpStreamFormat_Stat(ISpStreamFormat* This,STATSTG *pstatstg,DWORD grfStatFlag) {
    return This->lpVtbl->Stat(This,pstatstg,grfStatFlag);
}
static inline HRESULT ISpStreamFormat_Clone(ISpStreamFormat* This,IStream **ppstm) {
    return This->lpVtbl->Clone(This,ppstm);
}
/*** ISpStreamFormat methods ***/
static inline HRESULT ISpStreamFormat_GetFormat(ISpStreamFormat* This,GUID *pguidFormatId,WAVEFORMATEX **ppCoMemWaveFormatEx) {
    return This->lpVtbl->GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx);
}
#endif
#endif

#endif


#endif  /* __ISpStreamFormat_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 *pStream,
        REFGUID rguidFormat,
        const WAVEFORMATEX *pWaveFormatEx) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE BindToFile(
        LPCWSTR pszFileName,
        SPFILEMODE eMode,
        const GUID *pFormatId,
        const WAVEFORMATEX *pWaveFormatEx,
        ULONGLONG ullEventInterest) = 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 *pguidFormatId,
        WAVEFORMATEX **ppCoMemWaveFormatEx);

    /*** ISpStream methods ***/
    HRESULT (STDMETHODCALLTYPE *SetBaseStream)(
        ISpStream *This,
        IStream *pStream,
        REFGUID rguidFormat,
        const WAVEFORMATEX *pWaveFormatEx);

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

    HRESULT (STDMETHODCALLTYPE *BindToFile)(
        ISpStream *This,
        LPCWSTR pszFileName,
        SPFILEMODE eMode,
        const GUID *pFormatId,
        const WAVEFORMATEX *pWaveFormatEx,
        ULONGLONG ullEventInterest);

    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,pguidFormatId,ppCoMemWaveFormatEx) (This)->lpVtbl->GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx)
/*** ISpStream methods ***/
#define ISpStream_SetBaseStream(This,pStream,rguidFormat,pWaveFormatEx) (This)->lpVtbl->SetBaseStream(This,pStream,rguidFormat,pWaveFormatEx)
#define ISpStream_GetBaseStream(This,ppStream) (This)->lpVtbl->GetBaseStream(This,ppStream)
#define ISpStream_BindToFile(This,pszFileName,eMode,pFormatId,pWaveFormatEx,ullEventInterest) (This)->lpVtbl->BindToFile(This,pszFileName,eMode,pFormatId,pWaveFormatEx,ullEventInterest)
#define ISpStream_Close(This) (This)->lpVtbl->Close(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpStream_QueryInterface(ISpStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpStream_AddRef(ISpStream* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpStream_Release(ISpStream* This) {
    return This->lpVtbl->Release(This);
}
/*** ISequentialStream methods ***/
static inline HRESULT ISpStream_Read(ISpStream* This,void *pv,ULONG cb,ULONG *pcbRead) {
    return This->lpVtbl->Read(This,pv,cb,pcbRead);
}
static inline HRESULT ISpStream_Write(ISpStream* This,const void *pv,ULONG cb,ULONG *pcbWritten) {
    return This->lpVtbl->Write(This,pv,cb,pcbWritten);
}
/*** IStream methods ***/
static inline HRESULT ISpStream_Seek(ISpStream* This,LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition) {
    return This->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition);
}
static inline HRESULT ISpStream_SetSize(ISpStream* This,ULARGE_INTEGER libNewSize) {
    return This->lpVtbl->SetSize(This,libNewSize);
}
static inline 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 inline HRESULT ISpStream_Commit(ISpStream* This,DWORD grfCommitFlags) {
    return This->lpVtbl->Commit(This,grfCommitFlags);
}
static inline HRESULT ISpStream_Revert(ISpStream* This) {
    return This->lpVtbl->Revert(This);
}
static inline HRESULT ISpStream_LockRegion(ISpStream* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->LockRegion(This,libOffset,cb,dwLockType);
}
static inline HRESULT ISpStream_UnlockRegion(ISpStream* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType);
}
static inline HRESULT ISpStream_Stat(ISpStream* This,STATSTG *pstatstg,DWORD grfStatFlag) {
    return This->lpVtbl->Stat(This,pstatstg,grfStatFlag);
}
static inline HRESULT ISpStream_Clone(ISpStream* This,IStream **ppstm) {
    return This->lpVtbl->Clone(This,ppstm);
}
/*** ISpStreamFormat methods ***/
static inline HRESULT ISpStream_GetFormat(ISpStream* This,GUID *pguidFormatId,WAVEFORMATEX **ppCoMemWaveFormatEx) {
    return This->lpVtbl->GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx);
}
/*** ISpStream methods ***/
static inline HRESULT ISpStream_SetBaseStream(ISpStream* This,IStream *pStream,REFGUID rguidFormat,const WAVEFORMATEX *pWaveFormatEx) {
    return This->lpVtbl->SetBaseStream(This,pStream,rguidFormat,pWaveFormatEx);
}
static inline HRESULT ISpStream_GetBaseStream(ISpStream* This,IStream **ppStream) {
    return This->lpVtbl->GetBaseStream(This,ppStream);
}
static inline HRESULT ISpStream_BindToFile(ISpStream* This,LPCWSTR pszFileName,SPFILEMODE eMode,const GUID *pFormatId,const WAVEFORMATEX *pWaveFormatEx,ULONGLONG ullEventInterest) {
    return This->lpVtbl->BindToFile(This,pszFileName,eMode,pFormatId,pWaveFormatEx,ullEventInterest);
}
static inline HRESULT ISpStream_Close(ISpStream* This) {
    return This->lpVtbl->Close(This);
}
#endif
#endif

#endif


#endif  /* __ISpStream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpStreamFormatConverter interface
 */
#ifndef __ISpStreamFormatConverter_INTERFACE_DEFINED__
#define __ISpStreamFormatConverter_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpStreamFormatConverter, 0x678a932c, 0xea71, 0x4446, 0x9b,0x41, 0x78,0xfd,0xa6,0x28,0x0a,0x29);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("678a932c-ea71-4446-9b41-78fda6280a29")
ISpStreamFormatConverter : public ISpStreamFormat
{
    virtual HRESULT STDMETHODCALLTYPE SetBaseStream(
        ISpStreamFormat *pStream,
        WINBOOL fSetFormatToBaseStreamFormat,
        WINBOOL fWriteToBaseStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBaseStream(
        ISpStreamFormat **ppStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetFormat(
        REFGUID rguidFormatIdOfConvertedStream,
        const WAVEFORMATEX *pWaveFormatExOfConvertedStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE ResetSeekPosition(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE ScaleConvertedToBaseOffset(
        ULONGLONG ullOffsetConvertedStream,
        ULONGLONG *pullOffsetBaseStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE ScaleBaseToConvertedOffset(
        ULONGLONG ullOffsetBaseStream,
        ULONGLONG *pullOffsetConvertedStream) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpStreamFormatConverter, 0x678a932c, 0xea71, 0x4446, 0x9b,0x41, 0x78,0xfd,0xa6,0x28,0x0a,0x29)
#endif
#else
typedef struct ISpStreamFormatConverterVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /*** ISpStreamFormat methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFormat)(
        ISpStreamFormatConverter *This,
        GUID *pguidFormatId,
        WAVEFORMATEX **ppCoMemWaveFormatEx);

    /*** ISpStreamFormatConverter methods ***/
    HRESULT (STDMETHODCALLTYPE *SetBaseStream)(
        ISpStreamFormatConverter *This,
        ISpStreamFormat *pStream,
        WINBOOL fSetFormatToBaseStreamFormat,
        WINBOOL fWriteToBaseStream);

    HRESULT (STDMETHODCALLTYPE *GetBaseStream)(
        ISpStreamFormatConverter *This,
        ISpStreamFormat **ppStream);

    HRESULT (STDMETHODCALLTYPE *SetFormat)(
        ISpStreamFormatConverter *This,
        REFGUID rguidFormatIdOfConvertedStream,
        const WAVEFORMATEX *pWaveFormatExOfConvertedStream);

    HRESULT (STDMETHODCALLTYPE *ResetSeekPosition)(
        ISpStreamFormatConverter *This);

    HRESULT (STDMETHODCALLTYPE *ScaleConvertedToBaseOffset)(
        ISpStreamFormatConverter *This,
        ULONGLONG ullOffsetConvertedStream,
        ULONGLONG *pullOffsetBaseStream);

    HRESULT (STDMETHODCALLTYPE *ScaleBaseToConvertedOffset)(
        ISpStreamFormatConverter *This,
        ULONGLONG ullOffsetBaseStream,
        ULONGLONG *pullOffsetConvertedStream);

    END_INTERFACE
} ISpStreamFormatConverterVtbl;

interface ISpStreamFormatConverter {
    CONST_VTBL ISpStreamFormatConverterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpStreamFormatConverter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpStreamFormatConverter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpStreamFormatConverter_Release(This) (This)->lpVtbl->Release(This)
/*** ISequentialStream methods ***/
#define ISpStreamFormatConverter_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
#define ISpStreamFormatConverter_Write(This,pv,cb,pcbWritten) (This)->lpVtbl->Write(This,pv,cb,pcbWritten)
/*** IStream methods ***/
#define ISpStreamFormatConverter_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
#define ISpStreamFormatConverter_SetSize(This,libNewSize) (This)->lpVtbl->SetSize(This,libNewSize)
#define ISpStreamFormatConverter_CopyTo(This,pstm,cb,pcbRead,pcbWritten) (This)->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten)
#define ISpStreamFormatConverter_Commit(This,grfCommitFlags) (This)->lpVtbl->Commit(This,grfCommitFlags)
#define ISpStreamFormatConverter_Revert(This) (This)->lpVtbl->Revert(This)
#define ISpStreamFormatConverter_LockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->LockRegion(This,libOffset,cb,dwLockType)
#define ISpStreamFormatConverter_UnlockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType)
#define ISpStreamFormatConverter_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
#define ISpStreamFormatConverter_Clone(This,ppstm) (This)->lpVtbl->Clone(This,ppstm)
/*** ISpStreamFormat methods ***/
#define ISpStreamFormatConverter_GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx) (This)->lpVtbl->GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx)
/*** ISpStreamFormatConverter methods ***/
#define ISpStreamFormatConverter_SetBaseStream(This,pStream,fSetFormatToBaseStreamFormat,fWriteToBaseStream) (This)->lpVtbl->SetBaseStream(This,pStream,fSetFormatToBaseStreamFormat,fWriteToBaseStream)
#define ISpStreamFormatConverter_GetBaseStream(This,ppStream) (This)->lpVtbl->GetBaseStream(This,ppStream)
#define ISpStreamFormatConverter_SetFormat(This,rguidFormatIdOfConvertedStream,pWaveFormatExOfConvertedStream) (This)->lpVtbl->SetFormat(This,rguidFormatIdOfConvertedStream,pWaveFormatExOfConvertedStream)
#define ISpStreamFormatConverter_ResetSeekPosition(This) (This)->lpVtbl->ResetSeekPosition(This)
#define ISpStreamFormatConverter_ScaleConvertedToBaseOffset(This,ullOffsetConvertedStream,pullOffsetBaseStream) (This)->lpVtbl->ScaleConvertedToBaseOffset(This,ullOffsetConvertedStream,pullOffsetBaseStream)
#define ISpStreamFormatConverter_ScaleBaseToConvertedOffset(This,ullOffsetBaseStream,pullOffsetConvertedStream) (This)->lpVtbl->ScaleBaseToConvertedOffset(This,ullOffsetBaseStream,pullOffsetConvertedStream)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpStreamFormatConverter_QueryInterface(ISpStreamFormatConverter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpStreamFormatConverter_AddRef(ISpStreamFormatConverter* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpStreamFormatConverter_Release(ISpStreamFormatConverter* This) {
    return This->lpVtbl->Release(This);
}
/*** ISequentialStream methods ***/
static inline HRESULT ISpStreamFormatConverter_Read(ISpStreamFormatConverter* This,void *pv,ULONG cb,ULONG *pcbRead) {
    return This->lpVtbl->Read(This,pv,cb,pcbRead);
}
static inline HRESULT ISpStreamFormatConverter_Write(ISpStreamFormatConverter* This,const void *pv,ULONG cb,ULONG *pcbWritten) {
    return This->lpVtbl->Write(This,pv,cb,pcbWritten);
}
/*** IStream methods ***/
static inline HRESULT ISpStreamFormatConverter_Seek(ISpStreamFormatConverter* This,LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition) {
    return This->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition);
}
static inline HRESULT ISpStreamFormatConverter_SetSize(ISpStreamFormatConverter* This,ULARGE_INTEGER libNewSize) {
    return This->lpVtbl->SetSize(This,libNewSize);
}
static inline HRESULT ISpStreamFormatConverter_CopyTo(ISpStreamFormatConverter* This,IStream *pstm,ULARGE_INTEGER cb,ULARGE_INTEGER *pcbRead,ULARGE_INTEGER *pcbWritten) {
    return This->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten);
}
static inline HRESULT ISpStreamFormatConverter_Commit(ISpStreamFormatConverter* This,DWORD grfCommitFlags) {
    return This->lpVtbl->Commit(This,grfCommitFlags);
}
static inline HRESULT ISpStreamFormatConverter_Revert(ISpStreamFormatConverter* This) {
    return This->lpVtbl->Revert(This);
}
static inline HRESULT ISpStreamFormatConverter_LockRegion(ISpStreamFormatConverter* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->LockRegion(This,libOffset,cb,dwLockType);
}
static inline HRESULT ISpStreamFormatConverter_UnlockRegion(ISpStreamFormatConverter* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType);
}
static inline HRESULT ISpStreamFormatConverter_Stat(ISpStreamFormatConverter* This,STATSTG *pstatstg,DWORD grfStatFlag) {
    return This->lpVtbl->Stat(This,pstatstg,grfStatFlag);
}
static inline HRESULT ISpStreamFormatConverter_Clone(ISpStreamFormatConverter* This,IStream **ppstm) {
    return This->lpVtbl->Clone(This,ppstm);
}
/*** ISpStreamFormat methods ***/
static inline HRESULT ISpStreamFormatConverter_GetFormat(ISpStreamFormatConverter* This,GUID *pguidFormatId,WAVEFORMATEX **ppCoMemWaveFormatEx) {
    return This->lpVtbl->GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx);
}
/*** ISpStreamFormatConverter methods ***/
static inline HRESULT ISpStreamFormatConverter_SetBaseStream(ISpStreamFormatConverter* This,ISpStreamFormat *pStream,WINBOOL fSetFormatToBaseStreamFormat,WINBOOL fWriteToBaseStream) {
    return This->lpVtbl->SetBaseStream(This,pStream,fSetFormatToBaseStreamFormat,fWriteToBaseStream);
}
static inline HRESULT ISpStreamFormatConverter_GetBaseStream(ISpStreamFormatConverter* This,ISpStreamFormat **ppStream) {
    return This->lpVtbl->GetBaseStream(This,ppStream);
}
static inline HRESULT ISpStreamFormatConverter_SetFormat(ISpStreamFormatConverter* This,REFGUID rguidFormatIdOfConvertedStream,const WAVEFORMATEX *pWaveFormatExOfConvertedStream) {
    return This->lpVtbl->SetFormat(This,rguidFormatIdOfConvertedStream,pWaveFormatExOfConvertedStream);
}
static inline HRESULT ISpStreamFormatConverter_ResetSeekPosition(ISpStreamFormatConverter* This) {
    return This->lpVtbl->ResetSeekPosition(This);
}
static inline HRESULT ISpStreamFormatConverter_ScaleConvertedToBaseOffset(ISpStreamFormatConverter* This,ULONGLONG ullOffsetConvertedStream,ULONGLONG *pullOffsetBaseStream) {
    return This->lpVtbl->ScaleConvertedToBaseOffset(This,ullOffsetConvertedStream,pullOffsetBaseStream);
}
static inline HRESULT ISpStreamFormatConverter_ScaleBaseToConvertedOffset(ISpStreamFormatConverter* This,ULONGLONG ullOffsetBaseStream,ULONGLONG *pullOffsetConvertedStream) {
    return This->lpVtbl->ScaleBaseToConvertedOffset(This,ullOffsetBaseStream,pullOffsetConvertedStream);
}
#endif
#endif

#endif


#endif  /* __ISpStreamFormatConverter_INTERFACE_DEFINED__ */

typedef struct SPAUDIOSTATUS {
    LONG cbFreeBuffSpace;
    ULONG cbNonBlockingIO;
    SPAUDIOSTATE State;
    ULONGLONG CurSeekPos;
    ULONGLONG CurDevicePos;
    DWORD dwAudioLevel;
    DWORD dwReserved2;
} SPAUDIOSTATUS;
typedef struct SPAUDIOBUFFERINFO {
    ULONG ulMsMinNotification;
    ULONG ulMsBufferSize;
    ULONG ulMsEventBias;
} SPAUDIOBUFFERINFO;
/*****************************************************************************
 * ISpAudio interface
 */
#ifndef __ISpAudio_INTERFACE_DEFINED__
#define __ISpAudio_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpAudio, 0xc05c768f, 0xfae8, 0x4ec2, 0x8e,0x07, 0x33,0x83,0x21,0xc1,0x24,0x52);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c05c768f-fae8-4ec2-8e07-338321c12452")
ISpAudio : public ISpStreamFormat
{
    virtual HRESULT STDMETHODCALLTYPE SetState(
        SPAUDIOSTATE NewState,
        ULONGLONG ullReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetFormat(
        REFGUID rguidFmtId,
        const WAVEFORMATEX *pWaveFormatEx) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStatus(
        SPAUDIOSTATUS *pStatus) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBufferInfo(
        const SPAUDIOBUFFERINFO *pBuffInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBufferInfo(
        SPAUDIOBUFFERINFO *pBuffInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDefaultFormat(
        GUID *pFormatId,
        WAVEFORMATEX **ppCoMemWaveFormatEx) = 0;

    virtual HANDLE STDMETHODCALLTYPE EventHandle(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVolumeLevel(
        ULONG *pLevel) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetVolumeLevel(
        ULONG Level) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBufferNotifySize(
        ULONG *pcbSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBufferNotifySize(
        ULONG cbSize) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpAudio, 0xc05c768f, 0xfae8, 0x4ec2, 0x8e,0x07, 0x33,0x83,0x21,0xc1,0x24,0x52)
#endif
#else
typedef struct ISpAudioVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /*** ISpStreamFormat methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFormat)(
        ISpAudio *This,
        GUID *pguidFormatId,
        WAVEFORMATEX **ppCoMemWaveFormatEx);

    /*** ISpAudio methods ***/
    HRESULT (STDMETHODCALLTYPE *SetState)(
        ISpAudio *This,
        SPAUDIOSTATE NewState,
        ULONGLONG ullReserved);

    HRESULT (STDMETHODCALLTYPE *SetFormat)(
        ISpAudio *This,
        REFGUID rguidFmtId,
        const WAVEFORMATEX *pWaveFormatEx);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        ISpAudio *This,
        SPAUDIOSTATUS *pStatus);

    HRESULT (STDMETHODCALLTYPE *SetBufferInfo)(
        ISpAudio *This,
        const SPAUDIOBUFFERINFO *pBuffInfo);

    HRESULT (STDMETHODCALLTYPE *GetBufferInfo)(
        ISpAudio *This,
        SPAUDIOBUFFERINFO *pBuffInfo);

    HRESULT (STDMETHODCALLTYPE *GetDefaultFormat)(
        ISpAudio *This,
        GUID *pFormatId,
        WAVEFORMATEX **ppCoMemWaveFormatEx);

    HANDLE (STDMETHODCALLTYPE *EventHandle)(
        ISpAudio *This);

    HRESULT (STDMETHODCALLTYPE *GetVolumeLevel)(
        ISpAudio *This,
        ULONG *pLevel);

    HRESULT (STDMETHODCALLTYPE *SetVolumeLevel)(
        ISpAudio *This,
        ULONG Level);

    HRESULT (STDMETHODCALLTYPE *GetBufferNotifySize)(
        ISpAudio *This,
        ULONG *pcbSize);

    HRESULT (STDMETHODCALLTYPE *SetBufferNotifySize)(
        ISpAudio *This,
        ULONG cbSize);

    END_INTERFACE
} ISpAudioVtbl;

interface ISpAudio {
    CONST_VTBL ISpAudioVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpAudio_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpAudio_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpAudio_Release(This) (This)->lpVtbl->Release(This)
/*** ISequentialStream methods ***/
#define ISpAudio_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
#define ISpAudio_Write(This,pv,cb,pcbWritten) (This)->lpVtbl->Write(This,pv,cb,pcbWritten)
/*** IStream methods ***/
#define ISpAudio_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
#define ISpAudio_SetSize(This,libNewSize) (This)->lpVtbl->SetSize(This,libNewSize)
#define ISpAudio_CopyTo(This,pstm,cb,pcbRead,pcbWritten) (This)->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten)
#define ISpAudio_Commit(This,grfCommitFlags) (This)->lpVtbl->Commit(This,grfCommitFlags)
#define ISpAudio_Revert(This) (This)->lpVtbl->Revert(This)
#define ISpAudio_LockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->LockRegion(This,libOffset,cb,dwLockType)
#define ISpAudio_UnlockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType)
#define ISpAudio_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
#define ISpAudio_Clone(This,ppstm) (This)->lpVtbl->Clone(This,ppstm)
/*** ISpStreamFormat methods ***/
#define ISpAudio_GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx) (This)->lpVtbl->GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx)
/*** ISpAudio methods ***/
#define ISpAudio_SetState(This,NewState,ullReserved) (This)->lpVtbl->SetState(This,NewState,ullReserved)
#define ISpAudio_SetFormat(This,rguidFmtId,pWaveFormatEx) (This)->lpVtbl->SetFormat(This,rguidFmtId,pWaveFormatEx)
#define ISpAudio_GetStatus(This,pStatus) (This)->lpVtbl->GetStatus(This,pStatus)
#define ISpAudio_SetBufferInfo(This,pBuffInfo) (This)->lpVtbl->SetBufferInfo(This,pBuffInfo)
#define ISpAudio_GetBufferInfo(This,pBuffInfo) (This)->lpVtbl->GetBufferInfo(This,pBuffInfo)
#define ISpAudio_GetDefaultFormat(This,pFormatId,ppCoMemWaveFormatEx) (This)->lpVtbl->GetDefaultFormat(This,pFormatId,ppCoMemWaveFormatEx)
#define ISpAudio_EventHandle(This) (This)->lpVtbl->EventHandle(This)
#define ISpAudio_GetVolumeLevel(This,pLevel) (This)->lpVtbl->GetVolumeLevel(This,pLevel)
#define ISpAudio_SetVolumeLevel(This,Level) (This)->lpVtbl->SetVolumeLevel(This,Level)
#define ISpAudio_GetBufferNotifySize(This,pcbSize) (This)->lpVtbl->GetBufferNotifySize(This,pcbSize)
#define ISpAudio_SetBufferNotifySize(This,cbSize) (This)->lpVtbl->SetBufferNotifySize(This,cbSize)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpAudio_QueryInterface(ISpAudio* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpAudio_AddRef(ISpAudio* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpAudio_Release(ISpAudio* This) {
    return This->lpVtbl->Release(This);
}
/*** ISequentialStream methods ***/
static inline HRESULT ISpAudio_Read(ISpAudio* This,void *pv,ULONG cb,ULONG *pcbRead) {
    return This->lpVtbl->Read(This,pv,cb,pcbRead);
}
static inline HRESULT ISpAudio_Write(ISpAudio* This,const void *pv,ULONG cb,ULONG *pcbWritten) {
    return This->lpVtbl->Write(This,pv,cb,pcbWritten);
}
/*** IStream methods ***/
static inline HRESULT ISpAudio_Seek(ISpAudio* This,LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition) {
    return This->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition);
}
static inline HRESULT ISpAudio_SetSize(ISpAudio* This,ULARGE_INTEGER libNewSize) {
    return This->lpVtbl->SetSize(This,libNewSize);
}
static inline HRESULT ISpAudio_CopyTo(ISpAudio* This,IStream *pstm,ULARGE_INTEGER cb,ULARGE_INTEGER *pcbRead,ULARGE_INTEGER *pcbWritten) {
    return This->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten);
}
static inline HRESULT ISpAudio_Commit(ISpAudio* This,DWORD grfCommitFlags) {
    return This->lpVtbl->Commit(This,grfCommitFlags);
}
static inline HRESULT ISpAudio_Revert(ISpAudio* This) {
    return This->lpVtbl->Revert(This);
}
static inline HRESULT ISpAudio_LockRegion(ISpAudio* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->LockRegion(This,libOffset,cb,dwLockType);
}
static inline HRESULT ISpAudio_UnlockRegion(ISpAudio* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType);
}
static inline HRESULT ISpAudio_Stat(ISpAudio* This,STATSTG *pstatstg,DWORD grfStatFlag) {
    return This->lpVtbl->Stat(This,pstatstg,grfStatFlag);
}
static inline HRESULT ISpAudio_Clone(ISpAudio* This,IStream **ppstm) {
    return This->lpVtbl->Clone(This,ppstm);
}
/*** ISpStreamFormat methods ***/
static inline HRESULT ISpAudio_GetFormat(ISpAudio* This,GUID *pguidFormatId,WAVEFORMATEX **ppCoMemWaveFormatEx) {
    return This->lpVtbl->GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx);
}
/*** ISpAudio methods ***/
static inline HRESULT ISpAudio_SetState(ISpAudio* This,SPAUDIOSTATE NewState,ULONGLONG ullReserved) {
    return This->lpVtbl->SetState(This,NewState,ullReserved);
}
static inline HRESULT ISpAudio_SetFormat(ISpAudio* This,REFGUID rguidFmtId,const WAVEFORMATEX *pWaveFormatEx) {
    return This->lpVtbl->SetFormat(This,rguidFmtId,pWaveFormatEx);
}
static inline HRESULT ISpAudio_GetStatus(ISpAudio* This,SPAUDIOSTATUS *pStatus) {
    return This->lpVtbl->GetStatus(This,pStatus);
}
static inline HRESULT ISpAudio_SetBufferInfo(ISpAudio* This,const SPAUDIOBUFFERINFO *pBuffInfo) {
    return This->lpVtbl->SetBufferInfo(This,pBuffInfo);
}
static inline HRESULT ISpAudio_GetBufferInfo(ISpAudio* This,SPAUDIOBUFFERINFO *pBuffInfo) {
    return This->lpVtbl->GetBufferInfo(This,pBuffInfo);
}
static inline HRESULT ISpAudio_GetDefaultFormat(ISpAudio* This,GUID *pFormatId,WAVEFORMATEX **ppCoMemWaveFormatEx) {
    return This->lpVtbl->GetDefaultFormat(This,pFormatId,ppCoMemWaveFormatEx);
}
static inline HANDLE ISpAudio_EventHandle(ISpAudio* This) {
    return This->lpVtbl->EventHandle(This);
}
static inline HRESULT ISpAudio_GetVolumeLevel(ISpAudio* This,ULONG *pLevel) {
    return This->lpVtbl->GetVolumeLevel(This,pLevel);
}
static inline HRESULT ISpAudio_SetVolumeLevel(ISpAudio* This,ULONG Level) {
    return This->lpVtbl->SetVolumeLevel(This,Level);
}
static inline HRESULT ISpAudio_GetBufferNotifySize(ISpAudio* This,ULONG *pcbSize) {
    return This->lpVtbl->GetBufferNotifySize(This,pcbSize);
}
static inline HRESULT ISpAudio_SetBufferNotifySize(ISpAudio* This,ULONG cbSize) {
    return This->lpVtbl->SetBufferNotifySize(This,cbSize);
}
#endif
#endif

#endif


#endif  /* __ISpAudio_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpMMSysAudio interface
 */
#ifndef __ISpMMSysAudio_INTERFACE_DEFINED__
#define __ISpMMSysAudio_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpMMSysAudio, 0x15806f6e, 0x1d70, 0x4b48, 0x98,0xe6, 0x3b,0x1a,0x00,0x75,0x09,0xab);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("15806f6e-1d70-4b48-98e6-3b1a007509ab")
ISpMMSysAudio : public ISpAudio
{
    virtual HRESULT STDMETHODCALLTYPE GetDeviceId(
        UINT *puDeviceId) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDeviceId(
        UINT uDeviceId) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMMHandle(
        void **pHandle) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLineId(
        UINT *puLineId) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetLineId(
        UINT uLineId) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpMMSysAudio, 0x15806f6e, 0x1d70, 0x4b48, 0x98,0xe6, 0x3b,0x1a,0x00,0x75,0x09,0xab)
#endif
#else
typedef struct ISpMMSysAudioVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /*** ISpStreamFormat methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFormat)(
        ISpMMSysAudio *This,
        GUID *pguidFormatId,
        WAVEFORMATEX **ppCoMemWaveFormatEx);

    /*** ISpAudio methods ***/
    HRESULT (STDMETHODCALLTYPE *SetState)(
        ISpMMSysAudio *This,
        SPAUDIOSTATE NewState,
        ULONGLONG ullReserved);

    HRESULT (STDMETHODCALLTYPE *SetFormat)(
        ISpMMSysAudio *This,
        REFGUID rguidFmtId,
        const WAVEFORMATEX *pWaveFormatEx);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        ISpMMSysAudio *This,
        SPAUDIOSTATUS *pStatus);

    HRESULT (STDMETHODCALLTYPE *SetBufferInfo)(
        ISpMMSysAudio *This,
        const SPAUDIOBUFFERINFO *pBuffInfo);

    HRESULT (STDMETHODCALLTYPE *GetBufferInfo)(
        ISpMMSysAudio *This,
        SPAUDIOBUFFERINFO *pBuffInfo);

    HRESULT (STDMETHODCALLTYPE *GetDefaultFormat)(
        ISpMMSysAudio *This,
        GUID *pFormatId,
        WAVEFORMATEX **ppCoMemWaveFormatEx);

    HANDLE (STDMETHODCALLTYPE *EventHandle)(
        ISpMMSysAudio *This);

    HRESULT (STDMETHODCALLTYPE *GetVolumeLevel)(
        ISpMMSysAudio *This,
        ULONG *pLevel);

    HRESULT (STDMETHODCALLTYPE *SetVolumeLevel)(
        ISpMMSysAudio *This,
        ULONG Level);

    HRESULT (STDMETHODCALLTYPE *GetBufferNotifySize)(
        ISpMMSysAudio *This,
        ULONG *pcbSize);

    HRESULT (STDMETHODCALLTYPE *SetBufferNotifySize)(
        ISpMMSysAudio *This,
        ULONG cbSize);

    /*** ISpMMSysAudio methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDeviceId)(
        ISpMMSysAudio *This,
        UINT *puDeviceId);

    HRESULT (STDMETHODCALLTYPE *SetDeviceId)(
        ISpMMSysAudio *This,
        UINT uDeviceId);

    HRESULT (STDMETHODCALLTYPE *GetMMHandle)(
        ISpMMSysAudio *This,
        void **pHandle);

    HRESULT (STDMETHODCALLTYPE *GetLineId)(
        ISpMMSysAudio *This,
        UINT *puLineId);

    HRESULT (STDMETHODCALLTYPE *SetLineId)(
        ISpMMSysAudio *This,
        UINT uLineId);

    END_INTERFACE
} ISpMMSysAudioVtbl;

interface ISpMMSysAudio {
    CONST_VTBL ISpMMSysAudioVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpMMSysAudio_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpMMSysAudio_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpMMSysAudio_Release(This) (This)->lpVtbl->Release(This)
/*** ISequentialStream methods ***/
#define ISpMMSysAudio_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
#define ISpMMSysAudio_Write(This,pv,cb,pcbWritten) (This)->lpVtbl->Write(This,pv,cb,pcbWritten)
/*** IStream methods ***/
#define ISpMMSysAudio_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
#define ISpMMSysAudio_SetSize(This,libNewSize) (This)->lpVtbl->SetSize(This,libNewSize)
#define ISpMMSysAudio_CopyTo(This,pstm,cb,pcbRead,pcbWritten) (This)->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten)
#define ISpMMSysAudio_Commit(This,grfCommitFlags) (This)->lpVtbl->Commit(This,grfCommitFlags)
#define ISpMMSysAudio_Revert(This) (This)->lpVtbl->Revert(This)
#define ISpMMSysAudio_LockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->LockRegion(This,libOffset,cb,dwLockType)
#define ISpMMSysAudio_UnlockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType)
#define ISpMMSysAudio_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
#define ISpMMSysAudio_Clone(This,ppstm) (This)->lpVtbl->Clone(This,ppstm)
/*** ISpStreamFormat methods ***/
#define ISpMMSysAudio_GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx) (This)->lpVtbl->GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx)
/*** ISpAudio methods ***/
#define ISpMMSysAudio_SetState(This,NewState,ullReserved) (This)->lpVtbl->SetState(This,NewState,ullReserved)
#define ISpMMSysAudio_SetFormat(This,rguidFmtId,pWaveFormatEx) (This)->lpVtbl->SetFormat(This,rguidFmtId,pWaveFormatEx)
#define ISpMMSysAudio_GetStatus(This,pStatus) (This)->lpVtbl->GetStatus(This,pStatus)
#define ISpMMSysAudio_SetBufferInfo(This,pBuffInfo) (This)->lpVtbl->SetBufferInfo(This,pBuffInfo)
#define ISpMMSysAudio_GetBufferInfo(This,pBuffInfo) (This)->lpVtbl->GetBufferInfo(This,pBuffInfo)
#define ISpMMSysAudio_GetDefaultFormat(This,pFormatId,ppCoMemWaveFormatEx) (This)->lpVtbl->GetDefaultFormat(This,pFormatId,ppCoMemWaveFormatEx)
#define ISpMMSysAudio_EventHandle(This) (This)->lpVtbl->EventHandle(This)
#define ISpMMSysAudio_GetVolumeLevel(This,pLevel) (This)->lpVtbl->GetVolumeLevel(This,pLevel)
#define ISpMMSysAudio_SetVolumeLevel(This,Level) (This)->lpVtbl->SetVolumeLevel(This,Level)
#define ISpMMSysAudio_GetBufferNotifySize(This,pcbSize) (This)->lpVtbl->GetBufferNotifySize(This,pcbSize)
#define ISpMMSysAudio_SetBufferNotifySize(This,cbSize) (This)->lpVtbl->SetBufferNotifySize(This,cbSize)
/*** ISpMMSysAudio methods ***/
#define ISpMMSysAudio_GetDeviceId(This,puDeviceId) (This)->lpVtbl->GetDeviceId(This,puDeviceId)
#define ISpMMSysAudio_SetDeviceId(This,uDeviceId) (This)->lpVtbl->SetDeviceId(This,uDeviceId)
#define ISpMMSysAudio_GetMMHandle(This,pHandle) (This)->lpVtbl->GetMMHandle(This,pHandle)
#define ISpMMSysAudio_GetLineId(This,puLineId) (This)->lpVtbl->GetLineId(This,puLineId)
#define ISpMMSysAudio_SetLineId(This,uLineId) (This)->lpVtbl->SetLineId(This,uLineId)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpMMSysAudio_QueryInterface(ISpMMSysAudio* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpMMSysAudio_AddRef(ISpMMSysAudio* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpMMSysAudio_Release(ISpMMSysAudio* This) {
    return This->lpVtbl->Release(This);
}
/*** ISequentialStream methods ***/
static inline HRESULT ISpMMSysAudio_Read(ISpMMSysAudio* This,void *pv,ULONG cb,ULONG *pcbRead) {
    return This->lpVtbl->Read(This,pv,cb,pcbRead);
}
static inline HRESULT ISpMMSysAudio_Write(ISpMMSysAudio* This,const void *pv,ULONG cb,ULONG *pcbWritten) {
    return This->lpVtbl->Write(This,pv,cb,pcbWritten);
}
/*** IStream methods ***/
static inline HRESULT ISpMMSysAudio_Seek(ISpMMSysAudio* This,LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition) {
    return This->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition);
}
static inline HRESULT ISpMMSysAudio_SetSize(ISpMMSysAudio* This,ULARGE_INTEGER libNewSize) {
    return This->lpVtbl->SetSize(This,libNewSize);
}
static inline HRESULT ISpMMSysAudio_CopyTo(ISpMMSysAudio* This,IStream *pstm,ULARGE_INTEGER cb,ULARGE_INTEGER *pcbRead,ULARGE_INTEGER *pcbWritten) {
    return This->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten);
}
static inline HRESULT ISpMMSysAudio_Commit(ISpMMSysAudio* This,DWORD grfCommitFlags) {
    return This->lpVtbl->Commit(This,grfCommitFlags);
}
static inline HRESULT ISpMMSysAudio_Revert(ISpMMSysAudio* This) {
    return This->lpVtbl->Revert(This);
}
static inline HRESULT ISpMMSysAudio_LockRegion(ISpMMSysAudio* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->LockRegion(This,libOffset,cb,dwLockType);
}
static inline HRESULT ISpMMSysAudio_UnlockRegion(ISpMMSysAudio* This,ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) {
    return This->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType);
}
static inline HRESULT ISpMMSysAudio_Stat(ISpMMSysAudio* This,STATSTG *pstatstg,DWORD grfStatFlag) {
    return This->lpVtbl->Stat(This,pstatstg,grfStatFlag);
}
static inline HRESULT ISpMMSysAudio_Clone(ISpMMSysAudio* This,IStream **ppstm) {
    return This->lpVtbl->Clone(This,ppstm);
}
/*** ISpStreamFormat methods ***/
static inline HRESULT ISpMMSysAudio_GetFormat(ISpMMSysAudio* This,GUID *pguidFormatId,WAVEFORMATEX **ppCoMemWaveFormatEx) {
    return This->lpVtbl->GetFormat(This,pguidFormatId,ppCoMemWaveFormatEx);
}
/*** ISpAudio methods ***/
static inline HRESULT ISpMMSysAudio_SetState(ISpMMSysAudio* This,SPAUDIOSTATE NewState,ULONGLONG ullReserved) {
    return This->lpVtbl->SetState(This,NewState,ullReserved);
}
static inline HRESULT ISpMMSysAudio_SetFormat(ISpMMSysAudio* This,REFGUID rguidFmtId,const WAVEFORMATEX *pWaveFormatEx) {
    return This->lpVtbl->SetFormat(This,rguidFmtId,pWaveFormatEx);
}
static inline HRESULT ISpMMSysAudio_GetStatus(ISpMMSysAudio* This,SPAUDIOSTATUS *pStatus) {
    return This->lpVtbl->GetStatus(This,pStatus);
}
static inline HRESULT ISpMMSysAudio_SetBufferInfo(ISpMMSysAudio* This,const SPAUDIOBUFFERINFO *pBuffInfo) {
    return This->lpVtbl->SetBufferInfo(This,pBuffInfo);
}
static inline HRESULT ISpMMSysAudio_GetBufferInfo(ISpMMSysAudio* This,SPAUDIOBUFFERINFO *pBuffInfo) {
    return This->lpVtbl->GetBufferInfo(This,pBuffInfo);
}
static inline HRESULT ISpMMSysAudio_GetDefaultFormat(ISpMMSysAudio* This,GUID *pFormatId,WAVEFORMATEX **ppCoMemWaveFormatEx) {
    return This->lpVtbl->GetDefaultFormat(This,pFormatId,ppCoMemWaveFormatEx);
}
static inline HANDLE ISpMMSysAudio_EventHandle(ISpMMSysAudio* This) {
    return This->lpVtbl->EventHandle(This);
}
static inline HRESULT ISpMMSysAudio_GetVolumeLevel(ISpMMSysAudio* This,ULONG *pLevel) {
    return This->lpVtbl->GetVolumeLevel(This,pLevel);
}
static inline HRESULT ISpMMSysAudio_SetVolumeLevel(ISpMMSysAudio* This,ULONG Level) {
    return This->lpVtbl->SetVolumeLevel(This,Level);
}
static inline HRESULT ISpMMSysAudio_GetBufferNotifySize(ISpMMSysAudio* This,ULONG *pcbSize) {
    return This->lpVtbl->GetBufferNotifySize(This,pcbSize);
}
static inline HRESULT ISpMMSysAudio_SetBufferNotifySize(ISpMMSysAudio* This,ULONG cbSize) {
    return This->lpVtbl->SetBufferNotifySize(This,cbSize);
}
/*** ISpMMSysAudio methods ***/
static inline HRESULT ISpMMSysAudio_GetDeviceId(ISpMMSysAudio* This,UINT *puDeviceId) {
    return This->lpVtbl->GetDeviceId(This,puDeviceId);
}
static inline HRESULT ISpMMSysAudio_SetDeviceId(ISpMMSysAudio* This,UINT uDeviceId) {
    return This->lpVtbl->SetDeviceId(This,uDeviceId);
}
static inline HRESULT ISpMMSysAudio_GetMMHandle(ISpMMSysAudio* This,void **pHandle) {
    return This->lpVtbl->GetMMHandle(This,pHandle);
}
static inline HRESULT ISpMMSysAudio_GetLineId(ISpMMSysAudio* This,UINT *puLineId) {
    return This->lpVtbl->GetLineId(This,puLineId);
}
static inline HRESULT ISpMMSysAudio_SetLineId(ISpMMSysAudio* This,UINT uLineId) {
    return This->lpVtbl->SetLineId(This,uLineId);
}
#endif
#endif

#endif


#endif  /* __ISpMMSysAudio_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpTranscript interface
 */
#ifndef __ISpTranscript_INTERFACE_DEFINED__
#define __ISpTranscript_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpTranscript, 0x10f63bce, 0x201a, 0x11d3, 0xac,0x70, 0x00,0xc0,0x4f,0x8e,0xe6,0xc0);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("10f63bce-201a-11d3-ac70-00c04f8ee6c0")
ISpTranscript : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetTranscript(
        LPWSTR *ppszTranscript) = 0;

    virtual HRESULT STDMETHODCALLTYPE AppendTranscript(
        LPCWSTR pszTranscript) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpTranscript, 0x10f63bce, 0x201a, 0x11d3, 0xac,0x70, 0x00,0xc0,0x4f,0x8e,0xe6,0xc0)
#endif
#else
typedef struct ISpTranscriptVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpTranscript methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTranscript)(
        ISpTranscript *This,
        LPWSTR *ppszTranscript);

    HRESULT (STDMETHODCALLTYPE *AppendTranscript)(
        ISpTranscript *This,
        LPCWSTR pszTranscript);

    END_INTERFACE
} ISpTranscriptVtbl;

interface ISpTranscript {
    CONST_VTBL ISpTranscriptVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpTranscript_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpTranscript_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpTranscript_Release(This) (This)->lpVtbl->Release(This)
/*** ISpTranscript methods ***/
#define ISpTranscript_GetTranscript(This,ppszTranscript) (This)->lpVtbl->GetTranscript(This,ppszTranscript)
#define ISpTranscript_AppendTranscript(This,pszTranscript) (This)->lpVtbl->AppendTranscript(This,pszTranscript)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpTranscript_QueryInterface(ISpTranscript* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpTranscript_AddRef(ISpTranscript* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpTranscript_Release(ISpTranscript* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpTranscript methods ***/
static inline HRESULT ISpTranscript_GetTranscript(ISpTranscript* This,LPWSTR *ppszTranscript) {
    return This->lpVtbl->GetTranscript(This,ppszTranscript);
}
static inline HRESULT ISpTranscript_AppendTranscript(ISpTranscript* This,LPCWSTR pszTranscript) {
    return This->lpVtbl->AppendTranscript(This,pszTranscript);
}
#endif
#endif

#endif


#endif  /* __ISpTranscript_INTERFACE_DEFINED__ */

typedef WCHAR SPPHONEID;
typedef LPWSTR PSPPHONEID;
typedef LPCWSTR PCSPPHONEID;
typedef struct SPPHRASEELEMENT {
    ULONG ulAudioTimeOffset;
    ULONG ulAudioSizeTime;
    ULONG ulAudioStreamOffset;
    ULONG ulAudioSizeBytes;
    ULONG ulRetainedStreamOffset;
    ULONG ulRetainedSizeBytes;
    LPCWSTR pszDisplayText;
    LPCWSTR pszLexicalForm;
    const SPPHONEID *pszPronunciation;
    BYTE bDisplayAttributes;
    signed char RequiredConfidence;
    signed char ActualConfidence;
    BYTE Reserved;
    float SREngineConfidence;
} SPPHRASEELEMENT;
typedef struct SPPHRASERULE SPPHRASERULE;
typedef struct SPPHRASEPROPERTY SPPHRASEPROPERTY;
struct SPPHRASERULE {
    LPCWSTR pszName;
    ULONG ulId;
    ULONG ulFirstElement;
    ULONG ulCountOfElements;
    const SPPHRASERULE *pNextSibling;
    const SPPHRASERULE *pFirstChild;
    float SREngineConfidence;
    signed char Confidence;
};
struct SPPHRASEPROPERTY {
    LPCWSTR pszName;
    __C89_NAMELESS union {
        ULONG ulId;
        __C89_NAMELESS struct {
            byte bType;
            byte bReserved;
            unsigned short usArrayIndex;
        } __C89_NAMELESSSTRUCTNAME;
    } __C89_NAMELESSUNIONNAME;
    LPCWSTR pszValue;
    VARIANT vValue;
    ULONG ulFirstElement;
    ULONG ulCountOfElements;
    const SPPHRASEPROPERTY *pNextSibling;
    const SPPHRASEPROPERTY *pFirstChild;
    float SREngineConfidence;
    signed char Confidence;
};
typedef struct SPPHRASEREPLACEMENT {
    BYTE bDisplayAttributes;
    LPCWSTR pszReplacementText;
    ULONG ulFirstElement;
    ULONG ulCountOfElements;
} SPPHRASEREPLACEMENT;
typedef struct SPPHRASE {
    ULONG cbSize;
    WORD LangID;
    WORD wHomophoneGroupId;
    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 SPBINARYGRAMMAR {
    ULONG ulTotalSerializedSize;
} SPBINARYGRAMMAR;
#if 0
typedef void *SPSTATEHANDLE;
#else
DECLARE_HANDLE(SPSTATEHANDLE);
#endif
typedef struct SPWORDPRONUNCIATION {
    struct SPWORDPRONUNCIATION *pNextWordPronunciation;
    SPLEXICONTYPE eLexiconType;
    WORD LangID;
    WORD wPronunciationFlags;
    SPPARTOFSPEECH ePartOfSpeech;
    SPPHONEID szPronunciation[1];
} SPWORDPRONUNCIATION;
typedef struct SPWORDPRONUNCIATIONLIST {
    ULONG ulSize;
    BYTE *pvBuffer;
    SPWORDPRONUNCIATION *pFirstWordPronunciation;
} SPWORDPRONUNCIATIONLIST;
typedef struct SPWORD {
    struct SPWORD *pNextWord;
    WORD LangID;
    WORD wReserved;
    SPWORDTYPE eWordType;
    LPWSTR pszWord;
    SPWORDPRONUNCIATION *pFirstWordPronunciation;
} SPWORD;
typedef struct SPWORDLIST {
    ULONG ulSize;
    BYTE *pvBuffer;
    SPWORD *pFirstWord;
} SPWORDLIST;
/*****************************************************************************
 * ISpLexicon interface
 */
#ifndef __ISpLexicon_INTERFACE_DEFINED__
#define __ISpLexicon_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpLexicon, 0xda41a7c2, 0x5383, 0x4db2, 0x91,0x6b, 0x6c,0x17,0x19,0xe3,0xdb,0x58);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("da41a7c2-5383-4db2-916b-6c1719e3db58")
ISpLexicon : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetPronunciations(
        LPCWSTR pszWord,
        WORD LangID,
        DWORD dwFlags,
        SPWORDPRONUNCIATIONLIST *pWordPronunciationList) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddPronunciation(
        LPCWSTR pszWord,
        WORD LangID,
        SPPARTOFSPEECH ePartOfSpeech,
        PCSPPHONEID pszPronunciation) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemovePronunciation(
        LPCWSTR pszWord,
        WORD LangID,
        SPPARTOFSPEECH ePartOfSpeech,
        PCSPPHONEID pszPronunciation) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGeneration(
        DWORD *pdwGeneration) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGenerationChange(
        DWORD dwFlags,
        DWORD *pdwGeneration,
        SPWORDLIST *pWordList) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetWords(
        DWORD dwFlags,
        DWORD *pdwGeneration,
        DWORD *pdwCookie,
        SPWORDLIST *pWordList) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpLexicon, 0xda41a7c2, 0x5383, 0x4db2, 0x91,0x6b, 0x6c,0x17,0x19,0xe3,0xdb,0x58)
#endif
#else
typedef struct ISpLexiconVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpLexicon methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPronunciations)(
        ISpLexicon *This,
        LPCWSTR pszWord,
        WORD LangID,
        DWORD dwFlags,
        SPWORDPRONUNCIATIONLIST *pWordPronunciationList);

    HRESULT (STDMETHODCALLTYPE *AddPronunciation)(
        ISpLexicon *This,
        LPCWSTR pszWord,
        WORD LangID,
        SPPARTOFSPEECH ePartOfSpeech,
        PCSPPHONEID pszPronunciation);

    HRESULT (STDMETHODCALLTYPE *RemovePronunciation)(
        ISpLexicon *This,
        LPCWSTR pszWord,
        WORD LangID,
        SPPARTOFSPEECH ePartOfSpeech,
        PCSPPHONEID pszPronunciation);

    HRESULT (STDMETHODCALLTYPE *GetGeneration)(
        ISpLexicon *This,
        DWORD *pdwGeneration);

    HRESULT (STDMETHODCALLTYPE *GetGenerationChange)(
        ISpLexicon *This,
        DWORD dwFlags,
        DWORD *pdwGeneration,
        SPWORDLIST *pWordList);

    HRESULT (STDMETHODCALLTYPE *GetWords)(
        ISpLexicon *This,
        DWORD dwFlags,
        DWORD *pdwGeneration,
        DWORD *pdwCookie,
        SPWORDLIST *pWordList);

    END_INTERFACE
} ISpLexiconVtbl;

interface ISpLexicon {
    CONST_VTBL ISpLexiconVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpLexicon_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpLexicon_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpLexicon_Release(This) (This)->lpVtbl->Release(This)
/*** ISpLexicon methods ***/
#define ISpLexicon_GetPronunciations(This,pszWord,LangID,dwFlags,pWordPronunciationList) (This)->lpVtbl->GetPronunciations(This,pszWord,LangID,dwFlags,pWordPronunciationList)
#define ISpLexicon_AddPronunciation(This,pszWord,LangID,ePartOfSpeech,pszPronunciation) (This)->lpVtbl->AddPronunciation(This,pszWord,LangID,ePartOfSpeech,pszPronunciation)
#define ISpLexicon_RemovePronunciation(This,pszWord,LangID,ePartOfSpeech,pszPronunciation) (This)->lpVtbl->RemovePronunciation(This,pszWord,LangID,ePartOfSpeech,pszPronunciation)
#define ISpLexicon_GetGeneration(This,pdwGeneration) (This)->lpVtbl->GetGeneration(This,pdwGeneration)
#define ISpLexicon_GetGenerationChange(This,dwFlags,pdwGeneration,pWordList) (This)->lpVtbl->GetGenerationChange(This,dwFlags,pdwGeneration,pWordList)
#define ISpLexicon_GetWords(This,dwFlags,pdwGeneration,pdwCookie,pWordList) (This)->lpVtbl->GetWords(This,dwFlags,pdwGeneration,pdwCookie,pWordList)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpLexicon_QueryInterface(ISpLexicon* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpLexicon_AddRef(ISpLexicon* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpLexicon_Release(ISpLexicon* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpLexicon methods ***/
static inline HRESULT ISpLexicon_GetPronunciations(ISpLexicon* This,LPCWSTR pszWord,WORD LangID,DWORD dwFlags,SPWORDPRONUNCIATIONLIST *pWordPronunciationList) {
    return This->lpVtbl->GetPronunciations(This,pszWord,LangID,dwFlags,pWordPronunciationList);
}
static inline HRESULT ISpLexicon_AddPronunciation(ISpLexicon* This,LPCWSTR pszWord,WORD LangID,SPPARTOFSPEECH ePartOfSpeech,PCSPPHONEID pszPronunciation) {
    return This->lpVtbl->AddPronunciation(This,pszWord,LangID,ePartOfSpeech,pszPronunciation);
}
static inline HRESULT ISpLexicon_RemovePronunciation(ISpLexicon* This,LPCWSTR pszWord,WORD LangID,SPPARTOFSPEECH ePartOfSpeech,PCSPPHONEID pszPronunciation) {
    return This->lpVtbl->RemovePronunciation(This,pszWord,LangID,ePartOfSpeech,pszPronunciation);
}
static inline HRESULT ISpLexicon_GetGeneration(ISpLexicon* This,DWORD *pdwGeneration) {
    return This->lpVtbl->GetGeneration(This,pdwGeneration);
}
static inline HRESULT ISpLexicon_GetGenerationChange(ISpLexicon* This,DWORD dwFlags,DWORD *pdwGeneration,SPWORDLIST *pWordList) {
    return This->lpVtbl->GetGenerationChange(This,dwFlags,pdwGeneration,pWordList);
}
static inline HRESULT ISpLexicon_GetWords(ISpLexicon* This,DWORD dwFlags,DWORD *pdwGeneration,DWORD *pdwCookie,SPWORDLIST *pWordList) {
    return This->lpVtbl->GetWords(This,dwFlags,pdwGeneration,pdwCookie,pWordList);
}
#endif
#endif

#endif


#endif  /* __ISpLexicon_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpContainerLexicon interface
 */
#ifndef __ISpContainerLexicon_INTERFACE_DEFINED__
#define __ISpContainerLexicon_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpContainerLexicon, 0x8565572f, 0xc094, 0x41cc, 0xb5,0x6e, 0x10,0xbd,0x9c,0x3f,0xf0,0x44);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8565572f-c094-41cc-b56e-10bd9c3ff044")
ISpContainerLexicon : public ISpLexicon
{
    virtual HRESULT STDMETHODCALLTYPE AddLexicon(
        ISpLexicon *pAddLexicon,
        DWORD dwFlags) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpContainerLexicon, 0x8565572f, 0xc094, 0x41cc, 0xb5,0x6e, 0x10,0xbd,0x9c,0x3f,0xf0,0x44)
#endif
#else
typedef struct ISpContainerLexiconVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpLexicon methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPronunciations)(
        ISpContainerLexicon *This,
        LPCWSTR pszWord,
        WORD LangID,
        DWORD dwFlags,
        SPWORDPRONUNCIATIONLIST *pWordPronunciationList);

    HRESULT (STDMETHODCALLTYPE *AddPronunciation)(
        ISpContainerLexicon *This,
        LPCWSTR pszWord,
        WORD LangID,
        SPPARTOFSPEECH ePartOfSpeech,
        PCSPPHONEID pszPronunciation);

    HRESULT (STDMETHODCALLTYPE *RemovePronunciation)(
        ISpContainerLexicon *This,
        LPCWSTR pszWord,
        WORD LangID,
        SPPARTOFSPEECH ePartOfSpeech,
        PCSPPHONEID pszPronunciation);

    HRESULT (STDMETHODCALLTYPE *GetGeneration)(
        ISpContainerLexicon *This,
        DWORD *pdwGeneration);

    HRESULT (STDMETHODCALLTYPE *GetGenerationChange)(
        ISpContainerLexicon *This,
        DWORD dwFlags,
        DWORD *pdwGeneration,
        SPWORDLIST *pWordList);

    HRESULT (STDMETHODCALLTYPE *GetWords)(
        ISpContainerLexicon *This,
        DWORD dwFlags,
        DWORD *pdwGeneration,
        DWORD *pdwCookie,
        SPWORDLIST *pWordList);

    /*** ISpContainerLexicon methods ***/
    HRESULT (STDMETHODCALLTYPE *AddLexicon)(
        ISpContainerLexicon *This,
        ISpLexicon *pAddLexicon,
        DWORD dwFlags);

    END_INTERFACE
} ISpContainerLexiconVtbl;

interface ISpContainerLexicon {
    CONST_VTBL ISpContainerLexiconVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpContainerLexicon_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpContainerLexicon_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpContainerLexicon_Release(This) (This)->lpVtbl->Release(This)
/*** ISpLexicon methods ***/
#define ISpContainerLexicon_GetPronunciations(This,pszWord,LangID,dwFlags,pWordPronunciationList) (This)->lpVtbl->GetPronunciations(This,pszWord,LangID,dwFlags,pWordPronunciationList)
#define ISpContainerLexicon_AddPronunciation(This,pszWord,LangID,ePartOfSpeech,pszPronunciation) (This)->lpVtbl->AddPronunciation(This,pszWord,LangID,ePartOfSpeech,pszPronunciation)
#define ISpContainerLexicon_RemovePronunciation(This,pszWord,LangID,ePartOfSpeech,pszPronunciation) (This)->lpVtbl->RemovePronunciation(This,pszWord,LangID,ePartOfSpeech,pszPronunciation)
#define ISpContainerLexicon_GetGeneration(This,pdwGeneration) (This)->lpVtbl->GetGeneration(This,pdwGeneration)
#define ISpContainerLexicon_GetGenerationChange(This,dwFlags,pdwGeneration,pWordList) (This)->lpVtbl->GetGenerationChange(This,dwFlags,pdwGeneration,pWordList)
#define ISpContainerLexicon_GetWords(This,dwFlags,pdwGeneration,pdwCookie,pWordList) (This)->lpVtbl->GetWords(This,dwFlags,pdwGeneration,pdwCookie,pWordList)
/*** ISpContainerLexicon methods ***/
#define ISpContainerLexicon_AddLexicon(This,pAddLexicon,dwFlags) (This)->lpVtbl->AddLexicon(This,pAddLexicon,dwFlags)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpContainerLexicon_QueryInterface(ISpContainerLexicon* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpContainerLexicon_AddRef(ISpContainerLexicon* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpContainerLexicon_Release(ISpContainerLexicon* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpLexicon methods ***/
static inline HRESULT ISpContainerLexicon_GetPronunciations(ISpContainerLexicon* This,LPCWSTR pszWord,WORD LangID,DWORD dwFlags,SPWORDPRONUNCIATIONLIST *pWordPronunciationList) {
    return This->lpVtbl->GetPronunciations(This,pszWord,LangID,dwFlags,pWordPronunciationList);
}
static inline HRESULT ISpContainerLexicon_AddPronunciation(ISpContainerLexicon* This,LPCWSTR pszWord,WORD LangID,SPPARTOFSPEECH ePartOfSpeech,PCSPPHONEID pszPronunciation) {
    return This->lpVtbl->AddPronunciation(This,pszWord,LangID,ePartOfSpeech,pszPronunciation);
}
static inline HRESULT ISpContainerLexicon_RemovePronunciation(ISpContainerLexicon* This,LPCWSTR pszWord,WORD LangID,SPPARTOFSPEECH ePartOfSpeech,PCSPPHONEID pszPronunciation) {
    return This->lpVtbl->RemovePronunciation(This,pszWord,LangID,ePartOfSpeech,pszPronunciation);
}
static inline HRESULT ISpContainerLexicon_GetGeneration(ISpContainerLexicon* This,DWORD *pdwGeneration) {
    return This->lpVtbl->GetGeneration(This,pdwGeneration);
}
static inline HRESULT ISpContainerLexicon_GetGenerationChange(ISpContainerLexicon* This,DWORD dwFlags,DWORD *pdwGeneration,SPWORDLIST *pWordList) {
    return This->lpVtbl->GetGenerationChange(This,dwFlags,pdwGeneration,pWordList);
}
static inline HRESULT ISpContainerLexicon_GetWords(ISpContainerLexicon* This,DWORD dwFlags,DWORD *pdwGeneration,DWORD *pdwCookie,SPWORDLIST *pWordList) {
    return This->lpVtbl->GetWords(This,dwFlags,pdwGeneration,pdwCookie,pWordList);
}
/*** ISpContainerLexicon methods ***/
static inline HRESULT ISpContainerLexicon_AddLexicon(ISpContainerLexicon* This,ISpLexicon *pAddLexicon,DWORD dwFlags) {
    return This->lpVtbl->AddLexicon(This,pAddLexicon,dwFlags);
}
#endif
#endif

#endif


#endif  /* __ISpContainerLexicon_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpPhoneConverter interface
 */
#ifndef __ISpPhoneConverter_INTERFACE_DEFINED__
#define __ISpPhoneConverter_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpPhoneConverter, 0x8445c581, 0x0cac, 0x4a38, 0xab,0xfe, 0x9b,0x2c,0xe2,0x82,0x64,0x55);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8445c581-0cac-4a38-abfe-9b2ce2826455")
ISpPhoneConverter : public ISpObjectWithToken
{
    virtual HRESULT STDMETHODCALLTYPE PhoneToId(
        LPCWSTR pszPhone,
        SPPHONEID *pId) = 0;

    virtual HRESULT STDMETHODCALLTYPE IdToPhone(
        PCSPPHONEID pId,
        WCHAR *pszPhone) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpPhoneConverter, 0x8445c581, 0x0cac, 0x4a38, 0xab,0xfe, 0x9b,0x2c,0xe2,0x82,0x64,0x55)
#endif
#else
typedef struct ISpPhoneConverterVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ISpObjectWithToken methods ***/
    HRESULT (STDMETHODCALLTYPE *SetObjectToken)(
        ISpPhoneConverter *This,
        ISpObjectToken *pToken);

    HRESULT (STDMETHODCALLTYPE *GetObjectToken)(
        ISpPhoneConverter *This,
        ISpObjectToken **ppToken);

    /*** ISpPhoneConverter methods ***/
    HRESULT (STDMETHODCALLTYPE *PhoneToId)(
        ISpPhoneConverter *This,
        LPCWSTR pszPhone,
        SPPHONEID *pId);

    HRESULT (STDMETHODCALLTYPE *IdToPhone)(
        ISpPhoneConverter *This,
        PCSPPHONEID pId,
        WCHAR *pszPhone);

    END_INTERFACE
} ISpPhoneConverterVtbl;

interface ISpPhoneConverter {
    CONST_VTBL ISpPhoneConverterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpPhoneConverter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpPhoneConverter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpPhoneConverter_Release(This) (This)->lpVtbl->Release(This)
/*** ISpObjectWithToken methods ***/
#define ISpPhoneConverter_SetObjectToken(This,pToken) (This)->lpVtbl->SetObjectToken(This,pToken)
#define ISpPhoneConverter_GetObjectToken(This,ppToken) (This)->lpVtbl->GetObjectToken(This,ppToken)
/*** ISpPhoneConverter methods ***/
#define ISpPhoneConverter_PhoneToId(This,pszPhone,pId) (This)->lpVtbl->PhoneToId(This,pszPhone,pId)
#define ISpPhoneConverter_IdToPhone(This,pId,pszPhone) (This)->lpVtbl->IdToPhone(This,pId,pszPhone)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpPhoneConverter_QueryInterface(ISpPhoneConverter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpPhoneConverter_AddRef(ISpPhoneConverter* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpPhoneConverter_Release(ISpPhoneConverter* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpObjectWithToken methods ***/
static inline HRESULT ISpPhoneConverter_SetObjectToken(ISpPhoneConverter* This,ISpObjectToken *pToken) {
    return This->lpVtbl->SetObjectToken(This,pToken);
}
static inline HRESULT ISpPhoneConverter_GetObjectToken(ISpPhoneConverter* This,ISpObjectToken **ppToken) {
    return This->lpVtbl->GetObjectToken(This,ppToken);
}
/*** ISpPhoneConverter methods ***/
static inline HRESULT ISpPhoneConverter_PhoneToId(ISpPhoneConverter* This,LPCWSTR pszPhone,SPPHONEID *pId) {
    return This->lpVtbl->PhoneToId(This,pszPhone,pId);
}
static inline HRESULT ISpPhoneConverter_IdToPhone(ISpPhoneConverter* This,PCSPPHONEID pId,WCHAR *pszPhone) {
    return This->lpVtbl->IdToPhone(This,pId,pszPhone);
}
#endif
#endif

#endif


#endif  /* __ISpPhoneConverter_INTERFACE_DEFINED__ */

typedef struct SPVPITCH {
    LONG MiddleAdj;
    LONG RangeAdj;
} SPVPITCH;
typedef struct SPVCONTEXT {
    LPCWSTR pCategory;
    LPCWSTR pBefore;
    LPCWSTR pAfter;
} SPVCONTEXT;
typedef struct SPVSTATE {
    SPVACTIONS eAction;
    WORD LangID;
    WORD wReserved;
    LONG EmphAdj;
    LONG RateAdj;
    ULONG Volume;
    SPVPITCH PitchAdj;
    ULONG SilenceMSecs;
    SPPHONEID *pPhoneIds;
    SPPARTOFSPEECH ePartOfSpeech;
    SPVCONTEXT Context;
} SPVSTATE;
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 enum SPEAKFLAGS {
    SPF_DEFAULT = 0,
    SPF_ASYNC = 1,
    SPF_PURGEBEFORESPEAK = 2,
    SPF_IS_FILENAME = 4,
    SPF_IS_XML = 8,
    SPF_IS_NOT_XML = 0x10,
    SPF_PERSIST_XML = 0x20,
    SPF_NLP_SPEAK_PUNC = 0x40,
    SPF_NLP_MASK = SPF_NLP_SPEAK_PUNC,
    SPF_VOICE_MASK = (((((SPF_ASYNC | SPF_PURGEBEFORESPEAK) | SPF_IS_FILENAME) | SPF_IS_XML) | SPF_IS_NOT_XML) | SPF_NLP_MASK) | SPF_PERSIST_XML,
    SPF_UNUSED_FLAGS = ~SPF_VOICE_MASK
} SPEAKFLAGS;
/*****************************************************************************
 * 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 *pUnkOutput,
        WINBOOL fAllowFormatChanges) = 0;

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

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

    virtual HRESULT STDMETHODCALLTYPE Pause(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        ) = 0;

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

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

    virtual HRESULT STDMETHODCALLTYPE Speak(
        LPCWSTR pwcs,
        DWORD dwFlags,
        ULONG *pulStreamNumber) = 0;

    virtual HRESULT STDMETHODCALLTYPE SpeakStream(
        IStream *pStream,
        DWORD dwFlags,
        ULONG *pulStreamNumber) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStatus(
        SPVOICESTATUS *pStatus,
        LPWSTR *ppszLastBookmark) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        LPCWSTR pItemType,
        LONG lNumItems,
        ULONG *pulNumSkipped) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPriority(
        SPVPRIORITY ePriority) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetAlertBoundary(
        SPEVENTENUM eBoundary) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetRate(
        LONG RateAdjust) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetVolume(
        USHORT usVolume) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE WaitUntilDone(
        ULONG msTimeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSyncSpeakTimeout(
        ULONG msTimeout) = 0;

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

    virtual HANDLE STDMETHODCALLTYPE SpeakCompleteEvent(
        ) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE DisplayUI(
        HWND hwndParent,
        LPCWSTR pszTitle,
        LPCWSTR pszTypeOfUI,
        void *pvExtraData,
        ULONG cbExtraData) = 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 *pNotifySink);

    HRESULT (STDMETHODCALLTYPE *SetNotifyWindowMessage)(
        ISpVoice *This,
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackFunction)(
        ISpVoice *This,
        SPNOTIFYCALLBACK *pfnCallback,
        WPARAM wParam,
        LPARAM lParam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackInterface)(
        ISpVoice *This,
        ISpNotifyCallback *pSpCallback,
        WPARAM wParam,
        LPARAM lParam);

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

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

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

    /*** ISpEventSource methods ***/
    HRESULT (STDMETHODCALLTYPE *SetInterest)(
        ISpVoice *This,
        ULONGLONG ullEventInterest,
        ULONGLONG ullQueuedInterest);

    HRESULT (STDMETHODCALLTYPE *GetEvents)(
        ISpVoice *This,
        ULONG ulCount,
        SPEVENT *pEventArray,
        ULONG *pulFetched);

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

    /*** ISpVoice methods ***/
    HRESULT (STDMETHODCALLTYPE *SetOutput)(
        ISpVoice *This,
        IUnknown *pUnkOutput,
        WINBOOL fAllowFormatChanges);

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

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *Speak)(
        ISpVoice *This,
        LPCWSTR pwcs,
        DWORD dwFlags,
        ULONG *pulStreamNumber);

    HRESULT (STDMETHODCALLTYPE *SpeakStream)(
        ISpVoice *This,
        IStream *pStream,
        DWORD dwFlags,
        ULONG *pulStreamNumber);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        ISpVoice *This,
        SPVOICESTATUS *pStatus,
        LPWSTR *ppszLastBookmark);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        ISpVoice *This,
        LPCWSTR pItemType,
        LONG lNumItems,
        ULONG *pulNumSkipped);

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

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

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

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

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

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

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

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *IsUISupported)(
        ISpVoice *This,
        LPCWSTR pszTypeOfUI,
        void *pvExtraData,
        ULONG cbExtraData,
        WINBOOL *pfSupported);

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

    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,pNotifySink) (This)->lpVtbl->SetNotifySink(This,pNotifySink)
#define ISpVoice_SetNotifyWindowMessage(This,hWnd,Msg,wParam,lParam) (This)->lpVtbl->SetNotifyWindowMessage(This,hWnd,Msg,wParam,lParam)
#define ISpVoice_SetNotifyCallbackFunction(This,pfnCallback,wParam,lParam) (This)->lpVtbl->SetNotifyCallbackFunction(This,pfnCallback,wParam,lParam)
#define ISpVoice_SetNotifyCallbackInterface(This,pSpCallback,wParam,lParam) (This)->lpVtbl->SetNotifyCallbackInterface(This,pSpCallback,wParam,lParam)
#define ISpVoice_SetNotifyWin32Event(This) (This)->lpVtbl->SetNotifyWin32Event(This)
#define ISpVoice_WaitForNotifyEvent(This,dwMilliseconds) (This)->lpVtbl->WaitForNotifyEvent(This,dwMilliseconds)
#define ISpVoice_GetNotifyEventHandle(This) (This)->lpVtbl->GetNotifyEventHandle(This)
/*** ISpEventSource methods ***/
#define ISpVoice_SetInterest(This,ullEventInterest,ullQueuedInterest) (This)->lpVtbl->SetInterest(This,ullEventInterest,ullQueuedInterest)
#define ISpVoice_GetEvents(This,ulCount,pEventArray,pulFetched) (This)->lpVtbl->GetEvents(This,ulCount,pEventArray,pulFetched)
#define ISpVoice_GetInfo(This,pInfo) (This)->lpVtbl->GetInfo(This,pInfo)
/*** ISpVoice methods ***/
#define ISpVoice_SetOutput(This,pUnkOutput,fAllowFormatChanges) (This)->lpVtbl->SetOutput(This,pUnkOutput,fAllowFormatChanges)
#define ISpVoice_GetOutputObjectToken(This,ppObjectToken) (This)->lpVtbl->GetOutputObjectToken(This,ppObjectToken)
#define ISpVoice_GetOutputStream(This,ppStream) (This)->lpVtbl->GetOutputStream(This,ppStream)
#define ISpVoice_Pause(This) (This)->lpVtbl->Pause(This)
#define ISpVoice_Resume(This) (This)->lpVtbl->Resume(This)
#define ISpVoice_SetVoice(This,pToken) (This)->lpVtbl->SetVoice(This,pToken)
#define ISpVoice_GetVoice(This,ppToken) (This)->lpVtbl->GetVoice(This,ppToken)
#define ISpVoice_Speak(This,pwcs,dwFlags,pulStreamNumber) (This)->lpVtbl->Speak(This,pwcs,dwFlags,pulStreamNumber)
#define ISpVoice_SpeakStream(This,pStream,dwFlags,pulStreamNumber) (This)->lpVtbl->SpeakStream(This,pStream,dwFlags,pulStreamNumber)
#define ISpVoice_GetStatus(This,pStatus,ppszLastBookmark) (This)->lpVtbl->GetStatus(This,pStatus,ppszLastBookmark)
#define ISpVoice_Skip(This,pItemType,lNumItems,pulNumSkipped) (This)->lpVtbl->Skip(This,pItemType,lNumItems,pulNumSkipped)
#define ISpVoice_SetPriority(This,ePriority) (This)->lpVtbl->SetPriority(This,ePriority)
#define ISpVoice_GetPriority(This,pePriority) (This)->lpVtbl->GetPriority(This,pePriority)
#define ISpVoice_SetAlertBoundary(This,eBoundary) (This)->lpVtbl->SetAlertBoundary(This,eBoundary)
#define ISpVoice_GetAlertBoundary(This,peBoundary) (This)->lpVtbl->GetAlertBoundary(This,peBoundary)
#define ISpVoice_SetRate(This,RateAdjust) (This)->lpVtbl->SetRate(This,RateAdjust)
#define ISpVoice_GetRate(This,pRateAdjust) (This)->lpVtbl->GetRate(This,pRateAdjust)
#define ISpVoice_SetVolume(This,usVolume) (This)->lpVtbl->SetVolume(This,usVolume)
#define ISpVoice_GetVolume(This,pusVolume) (This)->lpVtbl->GetVolume(This,pusVolume)
#define ISpVoice_WaitUntilDone(This,msTimeout) (This)->lpVtbl->WaitUntilDone(This,msTimeout)
#define ISpVoice_SetSyncSpeakTimeout(This,msTimeout) (This)->lpVtbl->SetSyncSpeakTimeout(This,msTimeout)
#define ISpVoice_GetSyncSpeakTimeout(This,pmsTimeout) (This)->lpVtbl->GetSyncSpeakTimeout(This,pmsTimeout)
#define ISpVoice_SpeakCompleteEvent(This) (This)->lpVtbl->SpeakCompleteEvent(This)
#define ISpVoice_IsUISupported(This,pszTypeOfUI,pvExtraData,cbExtraData,pfSupported) (This)->lpVtbl->IsUISupported(This,pszTypeOfUI,pvExtraData,cbExtraData,pfSupported)
#define ISpVoice_DisplayUI(This,hwndParent,pszTitle,pszTypeOfUI,pvExtraData,cbExtraData) (This)->lpVtbl->DisplayUI(This,hwndParent,pszTitle,pszTypeOfUI,pvExtraData,cbExtraData)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpVoice_QueryInterface(ISpVoice* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpVoice_AddRef(ISpVoice* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpVoice_Release(ISpVoice* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpNotifySource methods ***/
static inline HRESULT ISpVoice_SetNotifySink(ISpVoice* This,ISpNotifySink *pNotifySink) {
    return This->lpVtbl->SetNotifySink(This,pNotifySink);
}
static inline HRESULT ISpVoice_SetNotifyWindowMessage(ISpVoice* This,HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->SetNotifyWindowMessage(This,hWnd,Msg,wParam,lParam);
}
static inline HRESULT ISpVoice_SetNotifyCallbackFunction(ISpVoice* This,SPNOTIFYCALLBACK *pfnCallback,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->SetNotifyCallbackFunction(This,pfnCallback,wParam,lParam);
}
static inline HRESULT ISpVoice_SetNotifyCallbackInterface(ISpVoice* This,ISpNotifyCallback *pSpCallback,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->SetNotifyCallbackInterface(This,pSpCallback,wParam,lParam);
}
static inline HRESULT ISpVoice_SetNotifyWin32Event(ISpVoice* This) {
    return This->lpVtbl->SetNotifyWin32Event(This);
}
static inline HRESULT ISpVoice_WaitForNotifyEvent(ISpVoice* This,DWORD dwMilliseconds) {
    return This->lpVtbl->WaitForNotifyEvent(This,dwMilliseconds);
}
static inline HANDLE ISpVoice_GetNotifyEventHandle(ISpVoice* This) {
    return This->lpVtbl->GetNotifyEventHandle(This);
}
/*** ISpEventSource methods ***/
static inline HRESULT ISpVoice_SetInterest(ISpVoice* This,ULONGLONG ullEventInterest,ULONGLONG ullQueuedInterest) {
    return This->lpVtbl->SetInterest(This,ullEventInterest,ullQueuedInterest);
}
static inline HRESULT ISpVoice_GetEvents(ISpVoice* This,ULONG ulCount,SPEVENT *pEventArray,ULONG *pulFetched) {
    return This->lpVtbl->GetEvents(This,ulCount,pEventArray,pulFetched);
}
static inline HRESULT ISpVoice_GetInfo(ISpVoice* This,SPEVENTSOURCEINFO *pInfo) {
    return This->lpVtbl->GetInfo(This,pInfo);
}
/*** ISpVoice methods ***/
static inline HRESULT ISpVoice_SetOutput(ISpVoice* This,IUnknown *pUnkOutput,WINBOOL fAllowFormatChanges) {
    return This->lpVtbl->SetOutput(This,pUnkOutput,fAllowFormatChanges);
}
static inline HRESULT ISpVoice_GetOutputObjectToken(ISpVoice* This,ISpObjectToken **ppObjectToken) {
    return This->lpVtbl->GetOutputObjectToken(This,ppObjectToken);
}
static inline HRESULT ISpVoice_GetOutputStream(ISpVoice* This,ISpStreamFormat **ppStream) {
    return This->lpVtbl->GetOutputStream(This,ppStream);
}
static inline HRESULT ISpVoice_Pause(ISpVoice* This) {
    return This->lpVtbl->Pause(This);
}
static inline HRESULT ISpVoice_Resume(ISpVoice* This) {
    return This->lpVtbl->Resume(This);
}
static inline HRESULT ISpVoice_SetVoice(ISpVoice* This,ISpObjectToken *pToken) {
    return This->lpVtbl->SetVoice(This,pToken);
}
static inline HRESULT ISpVoice_GetVoice(ISpVoice* This,ISpObjectToken **ppToken) {
    return This->lpVtbl->GetVoice(This,ppToken);
}
static inline HRESULT ISpVoice_Speak(ISpVoice* This,LPCWSTR pwcs,DWORD dwFlags,ULONG *pulStreamNumber) {
    return This->lpVtbl->Speak(This,pwcs,dwFlags,pulStreamNumber);
}
static inline HRESULT ISpVoice_SpeakStream(ISpVoice* This,IStream *pStream,DWORD dwFlags,ULONG *pulStreamNumber) {
    return This->lpVtbl->SpeakStream(This,pStream,dwFlags,pulStreamNumber);
}
static inline HRESULT ISpVoice_GetStatus(ISpVoice* This,SPVOICESTATUS *pStatus,LPWSTR *ppszLastBookmark) {
    return This->lpVtbl->GetStatus(This,pStatus,ppszLastBookmark);
}
static inline HRESULT ISpVoice_Skip(ISpVoice* This,LPCWSTR pItemType,LONG lNumItems,ULONG *pulNumSkipped) {
    return This->lpVtbl->Skip(This,pItemType,lNumItems,pulNumSkipped);
}
static inline HRESULT ISpVoice_SetPriority(ISpVoice* This,SPVPRIORITY ePriority) {
    return This->lpVtbl->SetPriority(This,ePriority);
}
static inline HRESULT ISpVoice_GetPriority(ISpVoice* This,SPVPRIORITY *pePriority) {
    return This->lpVtbl->GetPriority(This,pePriority);
}
static inline HRESULT ISpVoice_SetAlertBoundary(ISpVoice* This,SPEVENTENUM eBoundary) {
    return This->lpVtbl->SetAlertBoundary(This,eBoundary);
}
static inline HRESULT ISpVoice_GetAlertBoundary(ISpVoice* This,SPEVENTENUM *peBoundary) {
    return This->lpVtbl->GetAlertBoundary(This,peBoundary);
}
static inline HRESULT ISpVoice_SetRate(ISpVoice* This,LONG RateAdjust) {
    return This->lpVtbl->SetRate(This,RateAdjust);
}
static inline HRESULT ISpVoice_GetRate(ISpVoice* This,LONG *pRateAdjust) {
    return This->lpVtbl->GetRate(This,pRateAdjust);
}
static inline HRESULT ISpVoice_SetVolume(ISpVoice* This,USHORT usVolume) {
    return This->lpVtbl->SetVolume(This,usVolume);
}
static inline HRESULT ISpVoice_GetVolume(ISpVoice* This,USHORT *pusVolume) {
    return This->lpVtbl->GetVolume(This,pusVolume);
}
static inline HRESULT ISpVoice_WaitUntilDone(ISpVoice* This,ULONG msTimeout) {
    return This->lpVtbl->WaitUntilDone(This,msTimeout);
}
static inline HRESULT ISpVoice_SetSyncSpeakTimeout(ISpVoice* This,ULONG msTimeout) {
    return This->lpVtbl->SetSyncSpeakTimeout(This,msTimeout);
}
static inline HRESULT ISpVoice_GetSyncSpeakTimeout(ISpVoice* This,ULONG *pmsTimeout) {
    return This->lpVtbl->GetSyncSpeakTimeout(This,pmsTimeout);
}
static inline HANDLE ISpVoice_SpeakCompleteEvent(ISpVoice* This) {
    return This->lpVtbl->SpeakCompleteEvent(This);
}
static inline HRESULT ISpVoice_IsUISupported(ISpVoice* This,LPCWSTR pszTypeOfUI,void *pvExtraData,ULONG cbExtraData,WINBOOL *pfSupported) {
    return This->lpVtbl->IsUISupported(This,pszTypeOfUI,pvExtraData,cbExtraData,pfSupported);
}
static inline HRESULT ISpVoice_DisplayUI(ISpVoice* This,HWND hwndParent,LPCWSTR pszTitle,LPCWSTR pszTypeOfUI,void *pvExtraData,ULONG cbExtraData) {
    return This->lpVtbl->DisplayUI(This,hwndParent,pszTitle,pszTypeOfUI,pvExtraData,cbExtraData);
}
#endif
#endif

#endif


#endif  /* __ISpVoice_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 **ppCoMemPhrase) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE GetText(
        ULONG ulStart,
        ULONG ulCount,
        WINBOOL fUseTextReplacements,
        LPWSTR *ppszCoMemText,
        BYTE *pbDisplayAttributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE Discard(
        DWORD dwValueTypes) = 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 **ppCoMemPhrase);

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

    HRESULT (STDMETHODCALLTYPE *GetText)(
        ISpPhrase *This,
        ULONG ulStart,
        ULONG ulCount,
        WINBOOL fUseTextReplacements,
        LPWSTR *ppszCoMemText,
        BYTE *pbDisplayAttributes);

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

    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,ppCoMemPhrase) (This)->lpVtbl->GetPhrase(This,ppCoMemPhrase)
#define ISpPhrase_GetSerializedPhrase(This,ppCoMemPhrase) (This)->lpVtbl->GetSerializedPhrase(This,ppCoMemPhrase)
#define ISpPhrase_GetText(This,ulStart,ulCount,fUseTextReplacements,ppszCoMemText,pbDisplayAttributes) (This)->lpVtbl->GetText(This,ulStart,ulCount,fUseTextReplacements,ppszCoMemText,pbDisplayAttributes)
#define ISpPhrase_Discard(This,dwValueTypes) (This)->lpVtbl->Discard(This,dwValueTypes)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpPhrase_QueryInterface(ISpPhrase* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpPhrase_AddRef(ISpPhrase* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpPhrase_Release(ISpPhrase* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpPhrase methods ***/
static inline HRESULT ISpPhrase_GetPhrase(ISpPhrase* This,SPPHRASE **ppCoMemPhrase) {
    return This->lpVtbl->GetPhrase(This,ppCoMemPhrase);
}
static inline HRESULT ISpPhrase_GetSerializedPhrase(ISpPhrase* This,SPSERIALIZEDPHRASE **ppCoMemPhrase) {
    return This->lpVtbl->GetSerializedPhrase(This,ppCoMemPhrase);
}
static inline HRESULT ISpPhrase_GetText(ISpPhrase* This,ULONG ulStart,ULONG ulCount,WINBOOL fUseTextReplacements,LPWSTR *ppszCoMemText,BYTE *pbDisplayAttributes) {
    return This->lpVtbl->GetText(This,ulStart,ulCount,fUseTextReplacements,ppszCoMemText,pbDisplayAttributes);
}
static inline HRESULT ISpPhrase_Discard(ISpPhrase* This,DWORD dwValueTypes) {
    return This->lpVtbl->Discard(This,dwValueTypes);
}
#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 **ppParent,
        ULONG *pulStartElementInParent,
        ULONG *pcElementsInParent,
        ULONG *pcElementsInAlt) = 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 **ppCoMemPhrase);

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

    HRESULT (STDMETHODCALLTYPE *GetText)(
        ISpPhraseAlt *This,
        ULONG ulStart,
        ULONG ulCount,
        WINBOOL fUseTextReplacements,
        LPWSTR *ppszCoMemText,
        BYTE *pbDisplayAttributes);

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

    /*** ISpPhraseAlt methods ***/
    HRESULT (STDMETHODCALLTYPE *GetAltInfo)(
        ISpPhraseAlt *This,
        ISpPhrase **ppParent,
        ULONG *pulStartElementInParent,
        ULONG *pcElementsInParent,
        ULONG *pcElementsInAlt);

    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,ppCoMemPhrase) (This)->lpVtbl->GetPhrase(This,ppCoMemPhrase)
#define ISpPhraseAlt_GetSerializedPhrase(This,ppCoMemPhrase) (This)->lpVtbl->GetSerializedPhrase(This,ppCoMemPhrase)
#define ISpPhraseAlt_GetText(This,ulStart,ulCount,fUseTextReplacements,ppszCoMemText,pbDisplayAttributes) (This)->lpVtbl->GetText(This,ulStart,ulCount,fUseTextReplacements,ppszCoMemText,pbDisplayAttributes)
#define ISpPhraseAlt_Discard(This,dwValueTypes) (This)->lpVtbl->Discard(This,dwValueTypes)
/*** ISpPhraseAlt methods ***/
#define ISpPhraseAlt_GetAltInfo(This,ppParent,pulStartElementInParent,pcElementsInParent,pcElementsInAlt) (This)->lpVtbl->GetAltInfo(This,ppParent,pulStartElementInParent,pcElementsInParent,pcElementsInAlt)
#define ISpPhraseAlt_Commit(This) (This)->lpVtbl->Commit(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpPhraseAlt_QueryInterface(ISpPhraseAlt* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpPhraseAlt_AddRef(ISpPhraseAlt* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpPhraseAlt_Release(ISpPhraseAlt* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpPhrase methods ***/
static inline HRESULT ISpPhraseAlt_GetPhrase(ISpPhraseAlt* This,SPPHRASE **ppCoMemPhrase) {
    return This->lpVtbl->GetPhrase(This,ppCoMemPhrase);
}
static inline HRESULT ISpPhraseAlt_GetSerializedPhrase(ISpPhraseAlt* This,SPSERIALIZEDPHRASE **ppCoMemPhrase) {
    return This->lpVtbl->GetSerializedPhrase(This,ppCoMemPhrase);
}
static inline HRESULT ISpPhraseAlt_GetText(ISpPhraseAlt* This,ULONG ulStart,ULONG ulCount,WINBOOL fUseTextReplacements,LPWSTR *ppszCoMemText,BYTE *pbDisplayAttributes) {
    return This->lpVtbl->GetText(This,ulStart,ulCount,fUseTextReplacements,ppszCoMemText,pbDisplayAttributes);
}
static inline HRESULT ISpPhraseAlt_Discard(ISpPhraseAlt* This,DWORD dwValueTypes) {
    return This->lpVtbl->Discard(This,dwValueTypes);
}
/*** ISpPhraseAlt methods ***/
static inline HRESULT ISpPhraseAlt_GetAltInfo(ISpPhraseAlt* This,ISpPhrase **ppParent,ULONG *pulStartElementInParent,ULONG *pcElementsInParent,ULONG *pcElementsInAlt) {
    return This->lpVtbl->GetAltInfo(This,ppParent,pulStartElementInParent,pcElementsInParent,pcElementsInAlt);
}
static inline HRESULT ISpPhraseAlt_Commit(ISpPhraseAlt* This) {
    return This->lpVtbl->Commit(This);
}
#endif
#endif

#endif


#endif  /* __ISpPhraseAlt_INTERFACE_DEFINED__ */

typedef struct SPRECORESULTTIMES {
    FILETIME ftStreamTime;
    ULONGLONG ullLength;
    DWORD dwTickCount;
    ULONGLONG ullStart;
} SPRECORESULTTIMES;
typedef struct SPSERIALIZEDRESULT {
    ULONG ulSerializedSize;
} SPSERIALIZEDRESULT;
/*****************************************************************************
 * 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 *pTimes) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAlternates(
        ULONG ulStartElement,
        ULONG cElements,
        ULONG ulRequestCount,
        ISpPhraseAlt **ppPhrases,
        ULONG *pcPhrasesReturned) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAudio(
        ULONG ulStartElement,
        ULONG cElements,
        ISpStreamFormat **ppStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE SpeakAudio(
        ULONG ulStartElement,
        ULONG cElements,
        DWORD dwFlags,
        ULONG *pulStreamNumber) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE ScaleAudio(
        const GUID *pAudioFormatId,
        const WAVEFORMATEX *pWaveFormatEx) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRecoContext(
        ISpRecoContext **ppRecoContext) = 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 **ppCoMemPhrase);

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

    HRESULT (STDMETHODCALLTYPE *GetText)(
        ISpRecoResult *This,
        ULONG ulStart,
        ULONG ulCount,
        WINBOOL fUseTextReplacements,
        LPWSTR *ppszCoMemText,
        BYTE *pbDisplayAttributes);

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

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

    HRESULT (STDMETHODCALLTYPE *GetAlternates)(
        ISpRecoResult *This,
        ULONG ulStartElement,
        ULONG cElements,
        ULONG ulRequestCount,
        ISpPhraseAlt **ppPhrases,
        ULONG *pcPhrasesReturned);

    HRESULT (STDMETHODCALLTYPE *GetAudio)(
        ISpRecoResult *This,
        ULONG ulStartElement,
        ULONG cElements,
        ISpStreamFormat **ppStream);

    HRESULT (STDMETHODCALLTYPE *SpeakAudio)(
        ISpRecoResult *This,
        ULONG ulStartElement,
        ULONG cElements,
        DWORD dwFlags,
        ULONG *pulStreamNumber);

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

    HRESULT (STDMETHODCALLTYPE *ScaleAudio)(
        ISpRecoResult *This,
        const GUID *pAudioFormatId,
        const WAVEFORMATEX *pWaveFormatEx);

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

    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,ppCoMemPhrase) (This)->lpVtbl->GetPhrase(This,ppCoMemPhrase)
#define ISpRecoResult_GetSerializedPhrase(This,ppCoMemPhrase) (This)->lpVtbl->GetSerializedPhrase(This,ppCoMemPhrase)
#define ISpRecoResult_GetText(This,ulStart,ulCount,fUseTextReplacements,ppszCoMemText,pbDisplayAttributes) (This)->lpVtbl->GetText(This,ulStart,ulCount,fUseTextReplacements,ppszCoMemText,pbDisplayAttributes)
#define ISpRecoResult_Discard(This,dwValueTypes) (This)->lpVtbl->Discard(This,dwValueTypes)
/*** ISpRecoResult methods ***/
#define ISpRecoResult_GetResultTimes(This,pTimes) (This)->lpVtbl->GetResultTimes(This,pTimes)
#define ISpRecoResult_GetAlternates(This,ulStartElement,cElements,ulRequestCount,ppPhrases,pcPhrasesReturned) (This)->lpVtbl->GetAlternates(This,ulStartElement,cElements,ulRequestCount,ppPhrases,pcPhrasesReturned)
#define ISpRecoResult_GetAudio(This,ulStartElement,cElements,ppStream) (This)->lpVtbl->GetAudio(This,ulStartElement,cElements,ppStream)
#define ISpRecoResult_SpeakAudio(This,ulStartElement,cElements,dwFlags,pulStreamNumber) (This)->lpVtbl->SpeakAudio(This,ulStartElement,cElements,dwFlags,pulStreamNumber)
#define ISpRecoResult_Serialize(This,ppCoMemSerializedResult) (This)->lpVtbl->Serialize(This,ppCoMemSerializedResult)
#define ISpRecoResult_ScaleAudio(This,pAudioFormatId,pWaveFormatEx) (This)->lpVtbl->ScaleAudio(This,pAudioFormatId,pWaveFormatEx)
#define ISpRecoResult_GetRecoContext(This,ppRecoContext) (This)->lpVtbl->GetRecoContext(This,ppRecoContext)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpRecoResult_QueryInterface(ISpRecoResult* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpRecoResult_AddRef(ISpRecoResult* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpRecoResult_Release(ISpRecoResult* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpPhrase methods ***/
static inline HRESULT ISpRecoResult_GetPhrase(ISpRecoResult* This,SPPHRASE **ppCoMemPhrase) {
    return This->lpVtbl->GetPhrase(This,ppCoMemPhrase);
}
static inline HRESULT ISpRecoResult_GetSerializedPhrase(ISpRecoResult* This,SPSERIALIZEDPHRASE **ppCoMemPhrase) {
    return This->lpVtbl->GetSerializedPhrase(This,ppCoMemPhrase);
}
static inline HRESULT ISpRecoResult_GetText(ISpRecoResult* This,ULONG ulStart,ULONG ulCount,WINBOOL fUseTextReplacements,LPWSTR *ppszCoMemText,BYTE *pbDisplayAttributes) {
    return This->lpVtbl->GetText(This,ulStart,ulCount,fUseTextReplacements,ppszCoMemText,pbDisplayAttributes);
}
static inline HRESULT ISpRecoResult_Discard(ISpRecoResult* This,DWORD dwValueTypes) {
    return This->lpVtbl->Discard(This,dwValueTypes);
}
/*** ISpRecoResult methods ***/
static inline HRESULT ISpRecoResult_GetResultTimes(ISpRecoResult* This,SPRECORESULTTIMES *pTimes) {
    return This->lpVtbl->GetResultTimes(This,pTimes);
}
static inline HRESULT ISpRecoResult_GetAlternates(ISpRecoResult* This,ULONG ulStartElement,ULONG cElements,ULONG ulRequestCount,ISpPhraseAlt **ppPhrases,ULONG *pcPhrasesReturned) {
    return This->lpVtbl->GetAlternates(This,ulStartElement,cElements,ulRequestCount,ppPhrases,pcPhrasesReturned);
}
static inline HRESULT ISpRecoResult_GetAudio(ISpRecoResult* This,ULONG ulStartElement,ULONG cElements,ISpStreamFormat **ppStream) {
    return This->lpVtbl->GetAudio(This,ulStartElement,cElements,ppStream);
}
static inline HRESULT ISpRecoResult_SpeakAudio(ISpRecoResult* This,ULONG ulStartElement,ULONG cElements,DWORD dwFlags,ULONG *pulStreamNumber) {
    return This->lpVtbl->SpeakAudio(This,ulStartElement,cElements,dwFlags,pulStreamNumber);
}
static inline HRESULT ISpRecoResult_Serialize(ISpRecoResult* This,SPSERIALIZEDRESULT **ppCoMemSerializedResult) {
    return This->lpVtbl->Serialize(This,ppCoMemSerializedResult);
}
static inline HRESULT ISpRecoResult_ScaleAudio(ISpRecoResult* This,const GUID *pAudioFormatId,const WAVEFORMATEX *pWaveFormatEx) {
    return This->lpVtbl->ScaleAudio(This,pAudioFormatId,pWaveFormatEx);
}
static inline HRESULT ISpRecoResult_GetRecoContext(ISpRecoResult* This,ISpRecoContext **ppRecoContext) {
    return This->lpVtbl->GetRecoContext(This,ppRecoContext);
}
#endif
#endif

#endif


#endif  /* __ISpRecoResult_INTERFACE_DEFINED__ */

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 SPGRAMMARSTATE {
    SPGS_DISABLED = 0,
    SPGS_ENABLED = 1,
    SPGS_EXCLUSIVE = 3
} SPGRAMMARSTATE;
typedef enum SPCONTEXTSTATE {
    SPCS_DISABLED = 0,
    SPCS_ENABLED = 1
} SPCONTEXTSTATE;
typedef enum SPRULESTATE {
    SPRS_INACTIVE = 0,
    SPRS_ACTIVE = 1,
    SPRS_ACTIVE_WITH_AUTO_PAUSE = 3
} SPRULESTATE;
#define SP_STREAMPOS_ASAP (0)

#define SP_STREAMPOS_REALTIME (-1)

#define SPRULETRANS_TEXTBUFFER (SPSTATEHANDLE) (-1)
#define SPRULETRANS_WILDCARD (SPSTATEHANDLE) (-2)
#define SPRULETRANS_DICTATION (SPSTATEHANDLE) (-3)
typedef enum SPGRAMMARWORDTYPE {
    SPWT_DISPLAY = 0,
    SPWT_LEXICAL = 1,
    SPWT_PRONUNCIATION = 2
} SPGRAMMARWORDTYPE;
typedef struct tagSPPROPERTYINFO {
    LPCWSTR pszName;
    ULONG ulId;
    LPCWSTR pszValue;
    VARIANT vValue;
} SPPROPERTYINFO;
typedef enum SPCFGRULEATTRIBUTES {
    SPRAF_TopLevel = 0x1,
    SPRAF_Active = 0x2,
    SPRAF_Export = 0x4,
    SPRAF_Import = 0x8,
    SPRAF_Interpreter = 0x10,
    SPRAF_Dynamic = 0x20,
    SPRAF_AutoPause = 0x10000
} SPCFGRULEATTRIBUTES;
/*****************************************************************************
 * 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(
        WORD NewLanguage) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRule(
        LPCWSTR pszRuleName,
        DWORD dwRuleId,
        DWORD dwAttributes,
        WINBOOL fCreateIfNotExist,
        SPSTATEHANDLE *phInitialState) = 0;

    virtual HRESULT STDMETHODCALLTYPE ClearRule(
        SPSTATEHANDLE hState) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateNewState(
        SPSTATEHANDLE hState,
        SPSTATEHANDLE *phState) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddWordTransition(
        SPSTATEHANDLE hFromState,
        SPSTATEHANDLE hToState,
        LPCWSTR psz,
        LPCWSTR pszSeparators,
        SPGRAMMARWORDTYPE eWordType,
        float Weight,
        const SPPROPERTYINFO *pPropInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddRuleTransition(
        SPSTATEHANDLE hFromState,
        SPSTATEHANDLE hToState,
        SPSTATEHANDLE hRule,
        float Weight,
        const SPPROPERTYINFO *pPropInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddResource(
        SPSTATEHANDLE hRuleState,
        LPCWSTR pszResourceName,
        LPCWSTR pszResourceValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE Commit(
        DWORD dwReserved) = 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,
        WORD NewLanguage);

    HRESULT (STDMETHODCALLTYPE *GetRule)(
        ISpGrammarBuilder *This,
        LPCWSTR pszRuleName,
        DWORD dwRuleId,
        DWORD dwAttributes,
        WINBOOL fCreateIfNotExist,
        SPSTATEHANDLE *phInitialState);

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

    HRESULT (STDMETHODCALLTYPE *CreateNewState)(
        ISpGrammarBuilder *This,
        SPSTATEHANDLE hState,
        SPSTATEHANDLE *phState);

    HRESULT (STDMETHODCALLTYPE *AddWordTransition)(
        ISpGrammarBuilder *This,
        SPSTATEHANDLE hFromState,
        SPSTATEHANDLE hToState,
        LPCWSTR psz,
        LPCWSTR pszSeparators,
        SPGRAMMARWORDTYPE eWordType,
        float Weight,
        const SPPROPERTYINFO *pPropInfo);

    HRESULT (STDMETHODCALLTYPE *AddRuleTransition)(
        ISpGrammarBuilder *This,
        SPSTATEHANDLE hFromState,
        SPSTATEHANDLE hToState,
        SPSTATEHANDLE hRule,
        float Weight,
        const SPPROPERTYINFO *pPropInfo);

    HRESULT (STDMETHODCALLTYPE *AddResource)(
        ISpGrammarBuilder *This,
        SPSTATEHANDLE hRuleState,
        LPCWSTR pszResourceName,
        LPCWSTR pszResourceValue);

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

    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,NewLanguage) (This)->lpVtbl->ResetGrammar(This,NewLanguage)
#define ISpGrammarBuilder_GetRule(This,pszRuleName,dwRuleId,dwAttributes,fCreateIfNotExist,phInitialState) (This)->lpVtbl->GetRule(This,pszRuleName,dwRuleId,dwAttributes,fCreateIfNotExist,phInitialState)
#define ISpGrammarBuilder_ClearRule(This,hState) (This)->lpVtbl->ClearRule(This,hState)
#define ISpGrammarBuilder_CreateNewState(This,hState,phState) (This)->lpVtbl->CreateNewState(This,hState,phState)
#define ISpGrammarBuilder_AddWordTransition(This,hFromState,hToState,psz,pszSeparators,eWordType,Weight,pPropInfo) (This)->lpVtbl->AddWordTransition(This,hFromState,hToState,psz,pszSeparators,eWordType,Weight,pPropInfo)
#define ISpGrammarBuilder_AddRuleTransition(This,hFromState,hToState,hRule,Weight,pPropInfo) (This)->lpVtbl->AddRuleTransition(This,hFromState,hToState,hRule,Weight,pPropInfo)
#define ISpGrammarBuilder_AddResource(This,hRuleState,pszResourceName,pszResourceValue) (This)->lpVtbl->AddResource(This,hRuleState,pszResourceName,pszResourceValue)
#define ISpGrammarBuilder_Commit(This,dwReserved) (This)->lpVtbl->Commit(This,dwReserved)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpGrammarBuilder_QueryInterface(ISpGrammarBuilder* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpGrammarBuilder_AddRef(ISpGrammarBuilder* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpGrammarBuilder_Release(ISpGrammarBuilder* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpGrammarBuilder methods ***/
static inline HRESULT ISpGrammarBuilder_ResetGrammar(ISpGrammarBuilder* This,WORD NewLanguage) {
    return This->lpVtbl->ResetGrammar(This,NewLanguage);
}
static inline HRESULT ISpGrammarBuilder_GetRule(ISpGrammarBuilder* This,LPCWSTR pszRuleName,DWORD dwRuleId,DWORD dwAttributes,WINBOOL fCreateIfNotExist,SPSTATEHANDLE *phInitialState) {
    return This->lpVtbl->GetRule(This,pszRuleName,dwRuleId,dwAttributes,fCreateIfNotExist,phInitialState);
}
static inline HRESULT ISpGrammarBuilder_ClearRule(ISpGrammarBuilder* This,SPSTATEHANDLE hState) {
    return This->lpVtbl->ClearRule(This,hState);
}
static inline HRESULT ISpGrammarBuilder_CreateNewState(ISpGrammarBuilder* This,SPSTATEHANDLE hState,SPSTATEHANDLE *phState) {
    return This->lpVtbl->CreateNewState(This,hState,phState);
}
static inline HRESULT ISpGrammarBuilder_AddWordTransition(ISpGrammarBuilder* This,SPSTATEHANDLE hFromState,SPSTATEHANDLE hToState,LPCWSTR psz,LPCWSTR pszSeparators,SPGRAMMARWORDTYPE eWordType,float Weight,const SPPROPERTYINFO *pPropInfo) {
    return This->lpVtbl->AddWordTransition(This,hFromState,hToState,psz,pszSeparators,eWordType,Weight,pPropInfo);
}
static inline HRESULT ISpGrammarBuilder_AddRuleTransition(ISpGrammarBuilder* This,SPSTATEHANDLE hFromState,SPSTATEHANDLE hToState,SPSTATEHANDLE hRule,float Weight,const SPPROPERTYINFO *pPropInfo) {
    return This->lpVtbl->AddRuleTransition(This,hFromState,hToState,hRule,Weight,pPropInfo);
}
static inline HRESULT ISpGrammarBuilder_AddResource(ISpGrammarBuilder* This,SPSTATEHANDLE hRuleState,LPCWSTR pszResourceName,LPCWSTR pszResourceValue) {
    return This->lpVtbl->AddResource(This,hRuleState,pszResourceName,pszResourceValue);
}
static inline HRESULT ISpGrammarBuilder_Commit(ISpGrammarBuilder* This,DWORD dwReserved) {
    return This->lpVtbl->Commit(This,dwReserved);
}
#endif
#endif

#endif


#endif  /* __ISpGrammarBuilder_INTERFACE_DEFINED__ */

typedef enum SPLOADOPTIONS {
    SPLO_STATIC = 0,
    SPLO_DYNAMIC = 1
} SPLOADOPTIONS;
/*****************************************************************************
 * 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 *pullGrammarId) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE LoadCmdFromFile(
        LPCWSTR pszFileName,
        SPLOADOPTIONS Options) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadCmdFromObject(
        REFCLSID rcid,
        LPCWSTR pszGrammarName,
        SPLOADOPTIONS Options) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadCmdFromResource(
        HMODULE hModule,
        LPCWSTR pszResourceName,
        LPCWSTR pszResourceType,
        WORD wLanguage,
        SPLOADOPTIONS Options) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadCmdFromMemory(
        const SPBINARYGRAMMAR *pGrammar,
        SPLOADOPTIONS Options) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadCmdFromProprietaryGrammar(
        REFGUID rguidParam,
        LPCWSTR pszStringParam,
        const void *pvDataPrarm,
        ULONG cbDataSize,
        SPLOADOPTIONS Options) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRuleState(
        LPCWSTR pszName,
        void *pReserved,
        SPRULESTATE NewState) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRuleIdState(
        ULONG ulRuleId,
        SPRULESTATE NewState) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadDictation(
        LPCWSTR pszTopicName,
        SPLOADOPTIONS Options) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnloadDictation(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDictationState(
        SPRULESTATE NewState) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetWordSequenceData(
        const WCHAR *pText,
        ULONG cchText,
        const SPTEXTSELECTIONINFO *pInfo) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE IsPronounceable(
        LPCWSTR pszWord,
        SPWORDPRONOUNCEABLE *pWordPronounceable) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetGrammarState(
        SPGRAMMARSTATE eGrammarState) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveCmd(
        IStream *pStream,
        LPWSTR *ppszCoMemErrorText) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGrammarState(
        SPGRAMMARSTATE *peGrammarState) = 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,
        WORD NewLanguage);

    HRESULT (STDMETHODCALLTYPE *GetRule)(
        ISpRecoGrammar *This,
        LPCWSTR pszRuleName,
        DWORD dwRuleId,
        DWORD dwAttributes,
        WINBOOL fCreateIfNotExist,
        SPSTATEHANDLE *phInitialState);

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

    HRESULT (STDMETHODCALLTYPE *CreateNewState)(
        ISpRecoGrammar *This,
        SPSTATEHANDLE hState,
        SPSTATEHANDLE *phState);

    HRESULT (STDMETHODCALLTYPE *AddWordTransition)(
        ISpRecoGrammar *This,
        SPSTATEHANDLE hFromState,
        SPSTATEHANDLE hToState,
        LPCWSTR psz,
        LPCWSTR pszSeparators,
        SPGRAMMARWORDTYPE eWordType,
        float Weight,
        const SPPROPERTYINFO *pPropInfo);

    HRESULT (STDMETHODCALLTYPE *AddRuleTransition)(
        ISpRecoGrammar *This,
        SPSTATEHANDLE hFromState,
        SPSTATEHANDLE hToState,
        SPSTATEHANDLE hRule,
        float Weight,
        const SPPROPERTYINFO *pPropInfo);

    HRESULT (STDMETHODCALLTYPE *AddResource)(
        ISpRecoGrammar *This,
        SPSTATEHANDLE hRuleState,
        LPCWSTR pszResourceName,
        LPCWSTR pszResourceValue);

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

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

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

    HRESULT (STDMETHODCALLTYPE *LoadCmdFromFile)(
        ISpRecoGrammar *This,
        LPCWSTR pszFileName,
        SPLOADOPTIONS Options);

    HRESULT (STDMETHODCALLTYPE *LoadCmdFromObject)(
        ISpRecoGrammar *This,
        REFCLSID rcid,
        LPCWSTR pszGrammarName,
        SPLOADOPTIONS Options);

    HRESULT (STDMETHODCALLTYPE *LoadCmdFromResource)(
        ISpRecoGrammar *This,
        HMODULE hModule,
        LPCWSTR pszResourceName,
        LPCWSTR pszResourceType,
        WORD wLanguage,
        SPLOADOPTIONS Options);

    HRESULT (STDMETHODCALLTYPE *LoadCmdFromMemory)(
        ISpRecoGrammar *This,
        const SPBINARYGRAMMAR *pGrammar,
        SPLOADOPTIONS Options);

    HRESULT (STDMETHODCALLTYPE *LoadCmdFromProprietaryGrammar)(
        ISpRecoGrammar *This,
        REFGUID rguidParam,
        LPCWSTR pszStringParam,
        const void *pvDataPrarm,
        ULONG cbDataSize,
        SPLOADOPTIONS Options);

    HRESULT (STDMETHODCALLTYPE *SetRuleState)(
        ISpRecoGrammar *This,
        LPCWSTR pszName,
        void *pReserved,
        SPRULESTATE NewState);

    HRESULT (STDMETHODCALLTYPE *SetRuleIdState)(
        ISpRecoGrammar *This,
        ULONG ulRuleId,
        SPRULESTATE NewState);

    HRESULT (STDMETHODCALLTYPE *LoadDictation)(
        ISpRecoGrammar *This,
        LPCWSTR pszTopicName,
        SPLOADOPTIONS Options);

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

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

    HRESULT (STDMETHODCALLTYPE *SetWordSequenceData)(
        ISpRecoGrammar *This,
        const WCHAR *pText,
        ULONG cchText,
        const SPTEXTSELECTIONINFO *pInfo);

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

    HRESULT (STDMETHODCALLTYPE *IsPronounceable)(
        ISpRecoGrammar *This,
        LPCWSTR pszWord,
        SPWORDPRONOUNCEABLE *pWordPronounceable);

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

    HRESULT (STDMETHODCALLTYPE *SaveCmd)(
        ISpRecoGrammar *This,
        IStream *pStream,
        LPWSTR *ppszCoMemErrorText);

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

    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,NewLanguage) (This)->lpVtbl->ResetGrammar(This,NewLanguage)
#define ISpRecoGrammar_GetRule(This,pszRuleName,dwRuleId,dwAttributes,fCreateIfNotExist,phInitialState) (This)->lpVtbl->GetRule(This,pszRuleName,dwRuleId,dwAttributes,fCreateIfNotExist,phInitialState)
#define ISpRecoGrammar_ClearRule(This,hState) (This)->lpVtbl->ClearRule(This,hState)
#define ISpRecoGrammar_CreateNewState(This,hState,phState) (This)->lpVtbl->CreateNewState(This,hState,phState)
#define ISpRecoGrammar_AddWordTransition(This,hFromState,hToState,psz,pszSeparators,eWordType,Weight,pPropInfo) (This)->lpVtbl->AddWordTransition(This,hFromState,hToState,psz,pszSeparators,eWordType,Weight,pPropInfo)
#define ISpRecoGrammar_AddRuleTransition(This,hFromState,hToState,hRule,Weight,pPropInfo) (This)->lpVtbl->AddRuleTransition(This,hFromState,hToState,hRule,Weight,pPropInfo)
#define ISpRecoGrammar_AddResource(This,hRuleState,pszResourceName,pszResourceValue) (This)->lpVtbl->AddResource(This,hRuleState,pszResourceName,pszResourceValue)
#define ISpRecoGrammar_Commit(This,dwReserved) (This)->lpVtbl->Commit(This,dwReserved)
/*** ISpRecoGrammar methods ***/
#define ISpRecoGrammar_GetGrammarId(This,pullGrammarId) (This)->lpVtbl->GetGrammarId(This,pullGrammarId)
#define ISpRecoGrammar_GetRecoContext(This,ppRecoCtxt) (This)->lpVtbl->GetRecoContext(This,ppRecoCtxt)
#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,hModule,pszResourceName,pszResourceType,wLanguage,Options) (This)->lpVtbl->LoadCmdFromResource(This,hModule,pszResourceName,pszResourceType,wLanguage,Options)
#define ISpRecoGrammar_LoadCmdFromMemory(This,pGrammar,Options) (This)->lpVtbl->LoadCmdFromMemory(This,pGrammar,Options)
#define ISpRecoGrammar_LoadCmdFromProprietaryGrammar(This,rguidParam,pszStringParam,pvDataPrarm,cbDataSize,Options) (This)->lpVtbl->LoadCmdFromProprietaryGrammar(This,rguidParam,pszStringParam,pvDataPrarm,cbDataSize,Options)
#define ISpRecoGrammar_SetRuleState(This,pszName,pReserved,NewState) (This)->lpVtbl->SetRuleState(This,pszName,pReserved,NewState)
#define ISpRecoGrammar_SetRuleIdState(This,ulRuleId,NewState) (This)->lpVtbl->SetRuleIdState(This,ulRuleId,NewState)
#define ISpRecoGrammar_LoadDictation(This,pszTopicName,Options) (This)->lpVtbl->LoadDictation(This,pszTopicName,Options)
#define ISpRecoGrammar_UnloadDictation(This) (This)->lpVtbl->UnloadDictation(This)
#define ISpRecoGrammar_SetDictationState(This,NewState) (This)->lpVtbl->SetDictationState(This,NewState)
#define ISpRecoGrammar_SetWordSequenceData(This,pText,cchText,pInfo) (This)->lpVtbl->SetWordSequenceData(This,pText,cchText,pInfo)
#define ISpRecoGrammar_SetTextSelection(This,pInfo) (This)->lpVtbl->SetTextSelection(This,pInfo)
#define ISpRecoGrammar_IsPronounceable(This,pszWord,pWordPronounceable) (This)->lpVtbl->IsPronounceable(This,pszWord,pWordPronounceable)
#define ISpRecoGrammar_SetGrammarState(This,eGrammarState) (This)->lpVtbl->SetGrammarState(This,eGrammarState)
#define ISpRecoGrammar_SaveCmd(This,pStream,ppszCoMemErrorText) (This)->lpVtbl->SaveCmd(This,pStream,ppszCoMemErrorText)
#define ISpRecoGrammar_GetGrammarState(This,peGrammarState) (This)->lpVtbl->GetGrammarState(This,peGrammarState)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpRecoGrammar_QueryInterface(ISpRecoGrammar* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpRecoGrammar_AddRef(ISpRecoGrammar* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpRecoGrammar_Release(ISpRecoGrammar* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpGrammarBuilder methods ***/
static inline HRESULT ISpRecoGrammar_ResetGrammar(ISpRecoGrammar* This,WORD NewLanguage) {
    return This->lpVtbl->ResetGrammar(This,NewLanguage);
}
static inline HRESULT ISpRecoGrammar_GetRule(ISpRecoGrammar* This,LPCWSTR pszRuleName,DWORD dwRuleId,DWORD dwAttributes,WINBOOL fCreateIfNotExist,SPSTATEHANDLE *phInitialState) {
    return This->lpVtbl->GetRule(This,pszRuleName,dwRuleId,dwAttributes,fCreateIfNotExist,phInitialState);
}
static inline HRESULT ISpRecoGrammar_ClearRule(ISpRecoGrammar* This,SPSTATEHANDLE hState) {
    return This->lpVtbl->ClearRule(This,hState);
}
static inline HRESULT ISpRecoGrammar_CreateNewState(ISpRecoGrammar* This,SPSTATEHANDLE hState,SPSTATEHANDLE *phState) {
    return This->lpVtbl->CreateNewState(This,hState,phState);
}
static inline HRESULT ISpRecoGrammar_AddWordTransition(ISpRecoGrammar* This,SPSTATEHANDLE hFromState,SPSTATEHANDLE hToState,LPCWSTR psz,LPCWSTR pszSeparators,SPGRAMMARWORDTYPE eWordType,float Weight,const SPPROPERTYINFO *pPropInfo) {
    return This->lpVtbl->AddWordTransition(This,hFromState,hToState,psz,pszSeparators,eWordType,Weight,pPropInfo);
}
static inline HRESULT ISpRecoGrammar_AddRuleTransition(ISpRecoGrammar* This,SPSTATEHANDLE hFromState,SPSTATEHANDLE hToState,SPSTATEHANDLE hRule,float Weight,const SPPROPERTYINFO *pPropInfo) {
    return This->lpVtbl->AddRuleTransition(This,hFromState,hToState,hRule,Weight,pPropInfo);
}
static inline HRESULT ISpRecoGrammar_AddResource(ISpRecoGrammar* This,SPSTATEHANDLE hRuleState,LPCWSTR pszResourceName,LPCWSTR pszResourceValue) {
    return This->lpVtbl->AddResource(This,hRuleState,pszResourceName,pszResourceValue);
}
static inline HRESULT ISpRecoGrammar_Commit(ISpRecoGrammar* This,DWORD dwReserved) {
    return This->lpVtbl->Commit(This,dwReserved);
}
/*** ISpRecoGrammar methods ***/
static inline HRESULT ISpRecoGrammar_GetGrammarId(ISpRecoGrammar* This,ULONGLONG *pullGrammarId) {
    return This->lpVtbl->GetGrammarId(This,pullGrammarId);
}
static inline HRESULT ISpRecoGrammar_GetRecoContext(ISpRecoGrammar* This,ISpRecoContext **ppRecoCtxt) {
    return This->lpVtbl->GetRecoContext(This,ppRecoCtxt);
}
static inline HRESULT ISpRecoGrammar_LoadCmdFromFile(ISpRecoGrammar* This,LPCWSTR pszFileName,SPLOADOPTIONS Options) {
    return This->lpVtbl->LoadCmdFromFile(This,pszFileName,Options);
}
static inline HRESULT ISpRecoGrammar_LoadCmdFromObject(ISpRecoGrammar* This,REFCLSID rcid,LPCWSTR pszGrammarName,SPLOADOPTIONS Options) {
    return This->lpVtbl->LoadCmdFromObject(This,rcid,pszGrammarName,Options);
}
static inline HRESULT ISpRecoGrammar_LoadCmdFromResource(ISpRecoGrammar* This,HMODULE hModule,LPCWSTR pszResourceName,LPCWSTR pszResourceType,WORD wLanguage,SPLOADOPTIONS Options) {
    return This->lpVtbl->LoadCmdFromResource(This,hModule,pszResourceName,pszResourceType,wLanguage,Options);
}
static inline HRESULT ISpRecoGrammar_LoadCmdFromMemory(ISpRecoGrammar* This,const SPBINARYGRAMMAR *pGrammar,SPLOADOPTIONS Options) {
    return This->lpVtbl->LoadCmdFromMemory(This,pGrammar,Options);
}
static inline HRESULT ISpRecoGrammar_LoadCmdFromProprietaryGrammar(ISpRecoGrammar* This,REFGUID rguidParam,LPCWSTR pszStringParam,const void *pvDataPrarm,ULONG cbDataSize,SPLOADOPTIONS Options) {
    return This->lpVtbl->LoadCmdFromProprietaryGrammar(This,rguidParam,pszStringParam,pvDataPrarm,cbDataSize,Options);
}
static inline HRESULT ISpRecoGrammar_SetRuleState(ISpRecoGrammar* This,LPCWSTR pszName,void *pReserved,SPRULESTATE NewState) {
    return This->lpVtbl->SetRuleState(This,pszName,pReserved,NewState);
}
static inline HRESULT ISpRecoGrammar_SetRuleIdState(ISpRecoGrammar* This,ULONG ulRuleId,SPRULESTATE NewState) {
    return This->lpVtbl->SetRuleIdState(This,ulRuleId,NewState);
}
static inline HRESULT ISpRecoGrammar_LoadDictation(ISpRecoGrammar* This,LPCWSTR pszTopicName,SPLOADOPTIONS Options) {
    return This->lpVtbl->LoadDictation(This,pszTopicName,Options);
}
static inline HRESULT ISpRecoGrammar_UnloadDictation(ISpRecoGrammar* This) {
    return This->lpVtbl->UnloadDictation(This);
}
static inline HRESULT ISpRecoGrammar_SetDictationState(ISpRecoGrammar* This,SPRULESTATE NewState) {
    return This->lpVtbl->SetDictationState(This,NewState);
}
static inline HRESULT ISpRecoGrammar_SetWordSequenceData(ISpRecoGrammar* This,const WCHAR *pText,ULONG cchText,const SPTEXTSELECTIONINFO *pInfo) {
    return This->lpVtbl->SetWordSequenceData(This,pText,cchText,pInfo);
}
static inline HRESULT ISpRecoGrammar_SetTextSelection(ISpRecoGrammar* This,const SPTEXTSELECTIONINFO *pInfo) {
    return This->lpVtbl->SetTextSelection(This,pInfo);
}
static inline HRESULT ISpRecoGrammar_IsPronounceable(ISpRecoGrammar* This,LPCWSTR pszWord,SPWORDPRONOUNCEABLE *pWordPronounceable) {
    return This->lpVtbl->IsPronounceable(This,pszWord,pWordPronounceable);
}
static inline HRESULT ISpRecoGrammar_SetGrammarState(ISpRecoGrammar* This,SPGRAMMARSTATE eGrammarState) {
    return This->lpVtbl->SetGrammarState(This,eGrammarState);
}
static inline HRESULT ISpRecoGrammar_SaveCmd(ISpRecoGrammar* This,IStream *pStream,LPWSTR *ppszCoMemErrorText) {
    return This->lpVtbl->SaveCmd(This,pStream,ppszCoMemErrorText);
}
static inline HRESULT ISpRecoGrammar_GetGrammarState(ISpRecoGrammar* This,SPGRAMMARSTATE *peGrammarState) {
    return This->lpVtbl->GetGrammarState(This,peGrammarState);
}
#endif
#endif

#endif


#endif  /* __ISpRecoGrammar_INTERFACE_DEFINED__ */

typedef struct SPRECOCONTEXTSTATUS {
    SPINTERFERENCE eInterference;
    WCHAR szRequestTypeOfUI[255];
    DWORD dwReserved1;
    DWORD dwReserved2;
} SPRECOCONTEXTSTATUS;
typedef enum SPBOOKMARKOPTIONS {
    SPBO_NONE = 0,
    SPBO_PAUSE = 0x1
} SPBOOKMARKOPTIONS;
typedef enum SPAUDIOOPTIONS {
    SPAO_NONE = 0,
    SPAO_RETAIN_AUDIO = 0x1
} SPAUDIOOPTIONS;
/*****************************************************************************
 * 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 **ppRecognizer) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateGrammar(
        ULONGLONG ullGrammarId,
        ISpRecoGrammar **ppGrammar) = 0;

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

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

    virtual HRESULT STDMETHODCALLTYPE SetMaxAlternates(
        ULONG cAlternates) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAudioOptions(
        SPAUDIOOPTIONS Options,
        const GUID *pAudioFormatId,
        const WAVEFORMATEX *pWaveFormatEx) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAudioOptions(
        SPAUDIOOPTIONS *pOptions,
        GUID *pAudioFormatId,
        WAVEFORMATEX **ppCoMemWFEX) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeserializeResult(
        const SPSERIALIZEDRESULT *pSerializedResult,
        ISpRecoResult **ppResult) = 0;

    virtual HRESULT STDMETHODCALLTYPE Bookmark(
        SPBOOKMARKOPTIONS Options,
        ULONGLONG ullStreamPosition,
        LPARAM lparamEvent) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAdaptationData(
        LPCWSTR pAdaptationData,
        const ULONG cch) = 0;

    virtual HRESULT STDMETHODCALLTYPE Pause(
        DWORD dwReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        DWORD dwReserved) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetVoice(
        ISpVoice *pVoice,
        WINBOOL fAllowFormatChanges) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetVoicePurgeEvent(
        ULONGLONG ullEventInterest) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetContextState(
        SPCONTEXTSTATE eContextState) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetContextState(
        SPCONTEXTSTATE *peContextState) = 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 *pNotifySink);

    HRESULT (STDMETHODCALLTYPE *SetNotifyWindowMessage)(
        ISpRecoContext *This,
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackFunction)(
        ISpRecoContext *This,
        SPNOTIFYCALLBACK *pfnCallback,
        WPARAM wParam,
        LPARAM lParam);

    HRESULT (STDMETHODCALLTYPE *SetNotifyCallbackInterface)(
        ISpRecoContext *This,
        ISpNotifyCallback *pSpCallback,
        WPARAM wParam,
        LPARAM lParam);

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

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

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

    /*** ISpEventSource methods ***/
    HRESULT (STDMETHODCALLTYPE *SetInterest)(
        ISpRecoContext *This,
        ULONGLONG ullEventInterest,
        ULONGLONG ullQueuedInterest);

    HRESULT (STDMETHODCALLTYPE *GetEvents)(
        ISpRecoContext *This,
        ULONG ulCount,
        SPEVENT *pEventArray,
        ULONG *pulFetched);

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

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

    HRESULT (STDMETHODCALLTYPE *CreateGrammar)(
        ISpRecoContext *This,
        ULONGLONG ullGrammarId,
        ISpRecoGrammar **ppGrammar);

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

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

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

    HRESULT (STDMETHODCALLTYPE *SetAudioOptions)(
        ISpRecoContext *This,
        SPAUDIOOPTIONS Options,
        const GUID *pAudioFormatId,
        const WAVEFORMATEX *pWaveFormatEx);

    HRESULT (STDMETHODCALLTYPE *GetAudioOptions)(
        ISpRecoContext *This,
        SPAUDIOOPTIONS *pOptions,
        GUID *pAudioFormatId,
        WAVEFORMATEX **ppCoMemWFEX);

    HRESULT (STDMETHODCALLTYPE *DeserializeResult)(
        ISpRecoContext *This,
        const SPSERIALIZEDRESULT *pSerializedResult,
        ISpRecoResult **ppResult);

    HRESULT (STDMETHODCALLTYPE *Bookmark)(
        ISpRecoContext *This,
        SPBOOKMARKOPTIONS Options,
        ULONGLONG ullStreamPosition,
        LPARAM lparamEvent);

    HRESULT (STDMETHODCALLTYPE *SetAdaptationData)(
        ISpRecoContext *This,
        LPCWSTR pAdaptationData,
        const ULONG cch);

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

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

    HRESULT (STDMETHODCALLTYPE *SetVoice)(
        ISpRecoContext *This,
        ISpVoice *pVoice,
        WINBOOL fAllowFormatChanges);

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

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

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

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

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

    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,pNotifySink) (This)->lpVtbl->SetNotifySink(This,pNotifySink)
#define ISpRecoContext_SetNotifyWindowMessage(This,hWnd,Msg,wParam,lParam) (This)->lpVtbl->SetNotifyWindowMessage(This,hWnd,Msg,wParam,lParam)
#define ISpRecoContext_SetNotifyCallbackFunction(This,pfnCallback,wParam,lParam) (This)->lpVtbl->SetNotifyCallbackFunction(This,pfnCallback,wParam,lParam)
#define ISpRecoContext_SetNotifyCallbackInterface(This,pSpCallback,wParam,lParam) (This)->lpVtbl->SetNotifyCallbackInterface(This,pSpCallback,wParam,lParam)
#define ISpRecoContext_SetNotifyWin32Event(This) (This)->lpVtbl->SetNotifyWin32Event(This)
#define ISpRecoContext_WaitForNotifyEvent(This,dwMilliseconds) (This)->lpVtbl->WaitForNotifyEvent(This,dwMilliseconds)
#define ISpRecoContext_GetNotifyEventHandle(This) (This)->lpVtbl->GetNotifyEventHandle(This)
/*** ISpEventSource methods ***/
#define ISpRecoContext_SetInterest(This,ullEventInterest,ullQueuedInterest) (This)->lpVtbl->SetInterest(This,ullEventInterest,ullQueuedInterest)
#define ISpRecoContext_GetEvents(This,ulCount,pEventArray,pulFetched) (This)->lpVtbl->GetEvents(This,ulCount,pEventArray,pulFetched)
#define ISpRecoContext_GetInfo(This,pInfo) (This)->lpVtbl->GetInfo(This,pInfo)
/*** ISpRecoContext methods ***/
#define ISpRecoContext_GetRecognizer(This,ppRecognizer) (This)->lpVtbl->GetRecognizer(This,ppRecognizer)
#define ISpRecoContext_CreateGrammar(This,ullGrammarId,ppGrammar) (This)->lpVtbl->CreateGrammar(This,ullGrammarId,ppGrammar)
#define ISpRecoContext_GetStatus(This,pStatus) (This)->lpVtbl->GetStatus(This,pStatus)
#define ISpRecoContext_GetMaxAlternates(This,pcAlternates) (This)->lpVtbl->GetMaxAlternates(This,pcAlternates)
#define ISpRecoContext_SetMaxAlternates(This,cAlternates) (This)->lpVtbl->SetMaxAlternates(This,cAlternates)
#define ISpRecoContext_SetAudioOptions(This,Options,pAudioFormatId,pWaveFormatEx) (This)->lpVtbl->SetAudioOptions(This,Options,pAudioFormatId,pWaveFormatEx)
#define ISpRecoContext_GetAudioOptions(This,pOptions,pAudioFormatId,ppCoMemWFEX) (This)->lpVtbl->GetAudioOptions(This,pOptions,pAudioFormatId,ppCoMemWFEX)
#define ISpRecoContext_DeserializeResult(This,pSerializedResult,ppResult) (This)->lpVtbl->DeserializeResult(This,pSerializedResult,ppResult)
#define ISpRecoContext_Bookmark(This,Options,ullStreamPosition,lparamEvent) (This)->lpVtbl->Bookmark(This,Options,ullStreamPosition,lparamEvent)
#define ISpRecoContext_SetAdaptationData(This,pAdaptationData,cch) (This)->lpVtbl->SetAdaptationData(This,pAdaptationData,cch)
#define ISpRecoContext_Pause(This,dwReserved) (This)->lpVtbl->Pause(This,dwReserved)
#define ISpRecoContext_Resume(This,dwReserved) (This)->lpVtbl->Resume(This,dwReserved)
#define ISpRecoContext_SetVoice(This,pVoice,fAllowFormatChanges) (This)->lpVtbl->SetVoice(This,pVoice,fAllowFormatChanges)
#define ISpRecoContext_GetVoice(This,ppVoice) (This)->lpVtbl->GetVoice(This,ppVoice)
#define ISpRecoContext_SetVoicePurgeEvent(This,ullEventInterest) (This)->lpVtbl->SetVoicePurgeEvent(This,ullEventInterest)
#define ISpRecoContext_GetVoicePurgeEvent(This,pullEventInterest) (This)->lpVtbl->GetVoicePurgeEvent(This,pullEventInterest)
#define ISpRecoContext_SetContextState(This,eContextState) (This)->lpVtbl->SetContextState(This,eContextState)
#define ISpRecoContext_GetContextState(This,peContextState) (This)->lpVtbl->GetContextState(This,peContextState)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpRecoContext_QueryInterface(ISpRecoContext* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpRecoContext_AddRef(ISpRecoContext* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpRecoContext_Release(ISpRecoContext* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpNotifySource methods ***/
static inline HRESULT ISpRecoContext_SetNotifySink(ISpRecoContext* This,ISpNotifySink *pNotifySink) {
    return This->lpVtbl->SetNotifySink(This,pNotifySink);
}
static inline HRESULT ISpRecoContext_SetNotifyWindowMessage(ISpRecoContext* This,HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->SetNotifyWindowMessage(This,hWnd,Msg,wParam,lParam);
}
static inline HRESULT ISpRecoContext_SetNotifyCallbackFunction(ISpRecoContext* This,SPNOTIFYCALLBACK *pfnCallback,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->SetNotifyCallbackFunction(This,pfnCallback,wParam,lParam);
}
static inline HRESULT ISpRecoContext_SetNotifyCallbackInterface(ISpRecoContext* This,ISpNotifyCallback *pSpCallback,WPARAM wParam,LPARAM lParam) {
    return This->lpVtbl->SetNotifyCallbackInterface(This,pSpCallback,wParam,lParam);
}
static inline HRESULT ISpRecoContext_SetNotifyWin32Event(ISpRecoContext* This) {
    return This->lpVtbl->SetNotifyWin32Event(This);
}
static inline HRESULT ISpRecoContext_WaitForNotifyEvent(ISpRecoContext* This,DWORD dwMilliseconds) {
    return This->lpVtbl->WaitForNotifyEvent(This,dwMilliseconds);
}
static inline HANDLE ISpRecoContext_GetNotifyEventHandle(ISpRecoContext* This) {
    return This->lpVtbl->GetNotifyEventHandle(This);
}
/*** ISpEventSource methods ***/
static inline HRESULT ISpRecoContext_SetInterest(ISpRecoContext* This,ULONGLONG ullEventInterest,ULONGLONG ullQueuedInterest) {
    return This->lpVtbl->SetInterest(This,ullEventInterest,ullQueuedInterest);
}
static inline HRESULT ISpRecoContext_GetEvents(ISpRecoContext* This,ULONG ulCount,SPEVENT *pEventArray,ULONG *pulFetched) {
    return This->lpVtbl->GetEvents(This,ulCount,pEventArray,pulFetched);
}
static inline HRESULT ISpRecoContext_GetInfo(ISpRecoContext* This,SPEVENTSOURCEINFO *pInfo) {
    return This->lpVtbl->GetInfo(This,pInfo);
}
/*** ISpRecoContext methods ***/
static inline HRESULT ISpRecoContext_GetRecognizer(ISpRecoContext* This,ISpRecognizer **ppRecognizer) {
    return This->lpVtbl->GetRecognizer(This,ppRecognizer);
}
static inline HRESULT ISpRecoContext_CreateGrammar(ISpRecoContext* This,ULONGLONG ullGrammarId,ISpRecoGrammar **ppGrammar) {
    return This->lpVtbl->CreateGrammar(This,ullGrammarId,ppGrammar);
}
static inline HRESULT ISpRecoContext_GetStatus(ISpRecoContext* This,SPRECOCONTEXTSTATUS *pStatus) {
    return This->lpVtbl->GetStatus(This,pStatus);
}
static inline HRESULT ISpRecoContext_GetMaxAlternates(ISpRecoContext* This,ULONG *pcAlternates) {
    return This->lpVtbl->GetMaxAlternates(This,pcAlternates);
}
static inline HRESULT ISpRecoContext_SetMaxAlternates(ISpRecoContext* This,ULONG cAlternates) {
    return This->lpVtbl->SetMaxAlternates(This,cAlternates);
}
static inline HRESULT ISpRecoContext_SetAudioOptions(ISpRecoContext* This,SPAUDIOOPTIONS Options,const GUID *pAudioFormatId,const WAVEFORMATEX *pWaveFormatEx) {
    return This->lpVtbl->SetAudioOptions(This,Options,pAudioFormatId,pWaveFormatEx);
}
static inline HRESULT ISpRecoContext_GetAudioOptions(ISpRecoContext* This,SPAUDIOOPTIONS *pOptions,GUID *pAudioFormatId,WAVEFORMATEX **ppCoMemWFEX) {
    return This->lpVtbl->GetAudioOptions(This,pOptions,pAudioFormatId,ppCoMemWFEX);
}
static inline HRESULT ISpRecoContext_DeserializeResult(ISpRecoContext* This,const SPSERIALIZEDRESULT *pSerializedResult,ISpRecoResult **ppResult) {
    return This->lpVtbl->DeserializeResult(This,pSerializedResult,ppResult);
}
static inline HRESULT ISpRecoContext_Bookmark(ISpRecoContext* This,SPBOOKMARKOPTIONS Options,ULONGLONG ullStreamPosition,LPARAM lparamEvent) {
    return This->lpVtbl->Bookmark(This,Options,ullStreamPosition,lparamEvent);
}
static inline HRESULT ISpRecoContext_SetAdaptationData(ISpRecoContext* This,LPCWSTR pAdaptationData,const ULONG cch) {
    return This->lpVtbl->SetAdaptationData(This,pAdaptationData,cch);
}
static inline HRESULT ISpRecoContext_Pause(ISpRecoContext* This,DWORD dwReserved) {
    return This->lpVtbl->Pause(This,dwReserved);
}
static inline HRESULT ISpRecoContext_Resume(ISpRecoContext* This,DWORD dwReserved) {
    return This->lpVtbl->Resume(This,dwReserved);
}
static inline HRESULT ISpRecoContext_SetVoice(ISpRecoContext* This,ISpVoice *pVoice,WINBOOL fAllowFormatChanges) {
    return This->lpVtbl->SetVoice(This,pVoice,fAllowFormatChanges);
}
static inline HRESULT ISpRecoContext_GetVoice(ISpRecoContext* This,ISpVoice **ppVoice) {
    return This->lpVtbl->GetVoice(This,ppVoice);
}
static inline HRESULT ISpRecoContext_SetVoicePurgeEvent(ISpRecoContext* This,ULONGLONG ullEventInterest) {
    return This->lpVtbl->SetVoicePurgeEvent(This,ullEventInterest);
}
static inline HRESULT ISpRecoContext_GetVoicePurgeEvent(ISpRecoContext* This,ULONGLONG *pullEventInterest) {
    return This->lpVtbl->GetVoicePurgeEvent(This,pullEventInterest);
}
static inline HRESULT ISpRecoContext_SetContextState(ISpRecoContext* This,SPCONTEXTSTATE eContextState) {
    return This->lpVtbl->SetContextState(This,eContextState);
}
static inline HRESULT ISpRecoContext_GetContextState(ISpRecoContext* This,SPCONTEXTSTATE *peContextState) {
    return This->lpVtbl->GetContextState(This,peContextState);
}
#endif
#endif

#endif


#endif  /* __ISpRecoContext_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(
        LPCWSTR pName,
        LONG lValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyNum(
        LPCWSTR pName,
        LONG *plValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPropertyString(
        LPCWSTR pName,
        LPCWSTR pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyString(
        LPCWSTR pName,
        LPWSTR *ppCoMemValue) = 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,
        LPCWSTR pName,
        LONG lValue);

    HRESULT (STDMETHODCALLTYPE *GetPropertyNum)(
        ISpProperties *This,
        LPCWSTR pName,
        LONG *plValue);

    HRESULT (STDMETHODCALLTYPE *SetPropertyString)(
        ISpProperties *This,
        LPCWSTR pName,
        LPCWSTR pValue);

    HRESULT (STDMETHODCALLTYPE *GetPropertyString)(
        ISpProperties *This,
        LPCWSTR pName,
        LPWSTR *ppCoMemValue);

    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,pName,lValue) (This)->lpVtbl->SetPropertyNum(This,pName,lValue)
#define ISpProperties_GetPropertyNum(This,pName,plValue) (This)->lpVtbl->GetPropertyNum(This,pName,plValue)
#define ISpProperties_SetPropertyString(This,pName,pValue) (This)->lpVtbl->SetPropertyString(This,pName,pValue)
#define ISpProperties_GetPropertyString(This,pName,ppCoMemValue) (This)->lpVtbl->GetPropertyString(This,pName,ppCoMemValue)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpProperties_QueryInterface(ISpProperties* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpProperties_AddRef(ISpProperties* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpProperties_Release(ISpProperties* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpProperties methods ***/
static inline HRESULT ISpProperties_SetPropertyNum(ISpProperties* This,LPCWSTR pName,LONG lValue) {
    return This->lpVtbl->SetPropertyNum(This,pName,lValue);
}
static inline HRESULT ISpProperties_GetPropertyNum(ISpProperties* This,LPCWSTR pName,LONG *plValue) {
    return This->lpVtbl->GetPropertyNum(This,pName,plValue);
}
static inline HRESULT ISpProperties_SetPropertyString(ISpProperties* This,LPCWSTR pName,LPCWSTR pValue) {
    return This->lpVtbl->SetPropertyString(This,pName,pValue);
}
static inline HRESULT ISpProperties_GetPropertyString(ISpProperties* This,LPCWSTR pName,LPWSTR *ppCoMemValue) {
    return This->lpVtbl->GetPropertyString(This,pName,ppCoMemValue);
}
#endif
#endif

#endif


#endif  /* __ISpProperties_INTERFACE_DEFINED__ */

#define SP_MAX_LANGIDS (20)

typedef struct SPRECOGNIZERSTATUS {
    SPAUDIOSTATUS AudioStatus;
    ULONGLONG ullRecognitionStreamPos;
    ULONG ulStreamNumber;
    ULONG ulNumActive;
    CLSID clsidEngine;
    ULONG cLangIDs;
    WORD aLangID[20];
    ULONGLONG ullRecognitionStreamTime;
} SPRECOGNIZERSTATUS;
typedef enum SPWAVEFORMATTYPE {
    SPWF_INPUT = 0,
    SPWF_SRENGINE = 1
} SPSTREAMFORMATTYPE;
typedef enum SPRECOSTATE {
    SPRST_INACTIVE = 0,
    SPRST_ACTIVE = 1,
    SPRST_ACTIVE_ALWAYS = 2,
    SPRST_INACTIVE_WITH_PURGE = 3,
    SPRST_NUM_STATES = 4
} SPRECOSTATE;
/*****************************************************************************
 * 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 *pRecognizer) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetInput(
        IUnknown *pUnkInput,
        WINBOOL fAllowFormatChanges) = 0;

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

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

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

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

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

    virtual HRESULT STDMETHODCALLTYPE IsSharedInstance(
        ) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetRecoState(
        SPRECOSTATE NewState) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE GetFormat(
        SPSTREAMFORMATTYPE WaveFormatType,
        GUID *pFormatId,
        WAVEFORMATEX **ppCoMemWFEX) = 0;

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

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

    virtual HRESULT STDMETHODCALLTYPE EmulateRecognition(
        ISpPhrase *pPhrase) = 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,
        LPCWSTR pName,
        LONG lValue);

    HRESULT (STDMETHODCALLTYPE *GetPropertyNum)(
        ISpRecognizer *This,
        LPCWSTR pName,
        LONG *plValue);

    HRESULT (STDMETHODCALLTYPE *SetPropertyString)(
        ISpRecognizer *This,
        LPCWSTR pName,
        LPCWSTR pValue);

    HRESULT (STDMETHODCALLTYPE *GetPropertyString)(
        ISpRecognizer *This,
        LPCWSTR pName,
        LPWSTR *ppCoMemValue);

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

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

    HRESULT (STDMETHODCALLTYPE *SetInput)(
        ISpRecognizer *This,
        IUnknown *pUnkInput,
        WINBOOL fAllowFormatChanges);

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

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

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

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

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *GetFormat)(
        ISpRecognizer *This,
        SPSTREAMFORMATTYPE WaveFormatType,
        GUID *pFormatId,
        WAVEFORMATEX **ppCoMemWFEX);

    HRESULT (STDMETHODCALLTYPE *IsUISupported)(
        ISpRecognizer *This,
        LPCWSTR pszTypeOfUI,
        void *pvExtraData,
        ULONG cbExtraData,
        WINBOOL *pfSupported);

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

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

    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,pName,lValue) (This)->lpVtbl->SetPropertyNum(This,pName,lValue)
#define ISpRecognizer_GetPropertyNum(This,pName,plValue) (This)->lpVtbl->GetPropertyNum(This,pName,plValue)
#define ISpRecognizer_SetPropertyString(This,pName,pValue) (This)->lpVtbl->SetPropertyString(This,pName,pValue)
#define ISpRecognizer_GetPropertyString(This,pName,ppCoMemValue) (This)->lpVtbl->GetPropertyString(This,pName,ppCoMemValue)
/*** ISpRecognizer methods ***/
#define ISpRecognizer_SetRecognizer(This,pRecognizer) (This)->lpVtbl->SetRecognizer(This,pRecognizer)
#define ISpRecognizer_GetRecognizer(This,ppRecognizer) (This)->lpVtbl->GetRecognizer(This,ppRecognizer)
#define ISpRecognizer_SetInput(This,pUnkInput,fAllowFormatChanges) (This)->lpVtbl->SetInput(This,pUnkInput,fAllowFormatChanges)
#define ISpRecognizer_GetInputObjectToken(This,ppToken) (This)->lpVtbl->GetInputObjectToken(This,ppToken)
#define ISpRecognizer_GetInputStream(This,ppStream) (This)->lpVtbl->GetInputStream(This,ppStream)
#define ISpRecognizer_CreateRecoContext(This,ppNewCtxt) (This)->lpVtbl->CreateRecoContext(This,ppNewCtxt)
#define ISpRecognizer_GetRecoProfile(This,ppToken) (This)->lpVtbl->GetRecoProfile(This,ppToken)
#define ISpRecognizer_SetRecoProfile(This,pToken) (This)->lpVtbl->SetRecoProfile(This,pToken)
#define ISpRecognizer_IsSharedInstance(This) (This)->lpVtbl->IsSharedInstance(This)
#define ISpRecognizer_GetRecoState(This,pState) (This)->lpVtbl->GetRecoState(This,pState)
#define ISpRecognizer_SetRecoState(This,NewState) (This)->lpVtbl->SetRecoState(This,NewState)
#define ISpRecognizer_GetStatus(This,pStatus) (This)->lpVtbl->GetStatus(This,pStatus)
#define ISpRecognizer_GetFormat(This,WaveFormatType,pFormatId,ppCoMemWFEX) (This)->lpVtbl->GetFormat(This,WaveFormatType,pFormatId,ppCoMemWFEX)
#define ISpRecognizer_IsUISupported(This,pszTypeOfUI,pvExtraData,cbExtraData,pfSupported) (This)->lpVtbl->IsUISupported(This,pszTypeOfUI,pvExtraData,cbExtraData,pfSupported)
#define ISpRecognizer_DisplayUI(This,hwndParent,pszTitle,pszTypeOfUI,pvExtraData,cbExtraData) (This)->lpVtbl->DisplayUI(This,hwndParent,pszTitle,pszTypeOfUI,pvExtraData,cbExtraData)
#define ISpRecognizer_EmulateRecognition(This,pPhrase) (This)->lpVtbl->EmulateRecognition(This,pPhrase)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpRecognizer_QueryInterface(ISpRecognizer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpRecognizer_AddRef(ISpRecognizer* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpRecognizer_Release(ISpRecognizer* This) {
    return This->lpVtbl->Release(This);
}
/*** ISpProperties methods ***/
static inline HRESULT ISpRecognizer_SetPropertyNum(ISpRecognizer* This,LPCWSTR pName,LONG lValue) {
    return This->lpVtbl->SetPropertyNum(This,pName,lValue);
}
static inline HRESULT ISpRecognizer_GetPropertyNum(ISpRecognizer* This,LPCWSTR pName,LONG *plValue) {
    return This->lpVtbl->GetPropertyNum(This,pName,plValue);
}
static inline HRESULT ISpRecognizer_SetPropertyString(ISpRecognizer* This,LPCWSTR pName,LPCWSTR pValue) {
    return This->lpVtbl->SetPropertyString(This,pName,pValue);
}
static inline HRESULT ISpRecognizer_GetPropertyString(ISpRecognizer* This,LPCWSTR pName,LPWSTR *ppCoMemValue) {
    return This->lpVtbl->GetPropertyString(This,pName,ppCoMemValue);
}
/*** ISpRecognizer methods ***/
static inline HRESULT ISpRecognizer_SetRecognizer(ISpRecognizer* This,ISpObjectToken *pRecognizer) {
    return This->lpVtbl->SetRecognizer(This,pRecognizer);
}
static inline HRESULT ISpRecognizer_GetRecognizer(ISpRecognizer* This,ISpObjectToken **ppRecognizer) {
    return This->lpVtbl->GetRecognizer(This,ppRecognizer);
}
static inline HRESULT ISpRecognizer_SetInput(ISpRecognizer* This,IUnknown *pUnkInput,WINBOOL fAllowFormatChanges) {
    return This->lpVtbl->SetInput(This,pUnkInput,fAllowFormatChanges);
}
static inline HRESULT ISpRecognizer_GetInputObjectToken(ISpRecognizer* This,ISpObjectToken **ppToken) {
    return This->lpVtbl->GetInputObjectToken(This,ppToken);
}
static inline HRESULT ISpRecognizer_GetInputStream(ISpRecognizer* This,ISpStreamFormat **ppStream) {
    return This->lpVtbl->GetInputStream(This,ppStream);
}
static inline HRESULT ISpRecognizer_CreateRecoContext(ISpRecognizer* This,ISpRecoContext **ppNewCtxt) {
    return This->lpVtbl->CreateRecoContext(This,ppNewCtxt);
}
static inline HRESULT ISpRecognizer_GetRecoProfile(ISpRecognizer* This,ISpObjectToken **ppToken) {
    return This->lpVtbl->GetRecoProfile(This,ppToken);
}
static inline HRESULT ISpRecognizer_SetRecoProfile(ISpRecognizer* This,ISpObjectToken *pToken) {
    return This->lpVtbl->SetRecoProfile(This,pToken);
}
static inline HRESULT ISpRecognizer_IsSharedInstance(ISpRecognizer* This) {
    return This->lpVtbl->IsSharedInstance(This);
}
static inline HRESULT ISpRecognizer_GetRecoState(ISpRecognizer* This,SPRECOSTATE *pState) {
    return This->lpVtbl->GetRecoState(This,pState);
}
static inline HRESULT ISpRecognizer_SetRecoState(ISpRecognizer* This,SPRECOSTATE NewState) {
    return This->lpVtbl->SetRecoState(This,NewState);
}
static inline HRESULT ISpRecognizer_GetStatus(ISpRecognizer* This,SPRECOGNIZERSTATUS *pStatus) {
    return This->lpVtbl->GetStatus(This,pStatus);
}
static inline HRESULT ISpRecognizer_GetFormat(ISpRecognizer* This,SPSTREAMFORMATTYPE WaveFormatType,GUID *pFormatId,WAVEFORMATEX **ppCoMemWFEX) {
    return This->lpVtbl->GetFormat(This,WaveFormatType,pFormatId,ppCoMemWFEX);
}
static inline HRESULT ISpRecognizer_IsUISupported(ISpRecognizer* This,LPCWSTR pszTypeOfUI,void *pvExtraData,ULONG cbExtraData,WINBOOL *pfSupported) {
    return This->lpVtbl->IsUISupported(This,pszTypeOfUI,pvExtraData,cbExtraData,pfSupported);
}
static inline HRESULT ISpRecognizer_DisplayUI(ISpRecognizer* This,HWND hwndParent,LPCWSTR pszTitle,LPCWSTR pszTypeOfUI,void *pvExtraData,ULONG cbExtraData) {
    return This->lpVtbl->DisplayUI(This,hwndParent,pszTitle,pszTypeOfUI,pvExtraData,cbExtraData);
}
static inline HRESULT ISpRecognizer_EmulateRecognition(ISpRecognizer* This,ISpPhrase *pPhrase) {
    return This->lpVtbl->EmulateRecognition(This,pPhrase);
}
#endif
#endif

#endif


#endif  /* __ISpRecognizer_INTERFACE_DEFINED__ */

#ifndef __SpeechLib_LIBRARY_DEFINED__
#define __SpeechLib_LIBRARY_DEFINED__

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

#ifndef __ISpeechDataKey_FWD_DEFINED__
#define __ISpeechDataKey_FWD_DEFINED__
typedef interface ISpeechDataKey ISpeechDataKey;
#ifdef __cplusplus
interface ISpeechDataKey;
#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 __ISpeechObjectTokenCategory_FWD_DEFINED__
#define __ISpeechObjectTokenCategory_FWD_DEFINED__
typedef interface ISpeechObjectTokenCategory ISpeechObjectTokenCategory;
#ifdef __cplusplus
interface ISpeechObjectTokenCategory;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechAudioBufferInfo_FWD_DEFINED__
#define __ISpeechAudioBufferInfo_FWD_DEFINED__
typedef interface ISpeechAudioBufferInfo ISpeechAudioBufferInfo;
#ifdef __cplusplus
interface ISpeechAudioBufferInfo;
#endif /* __cplusplus */
#endif

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

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

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

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

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

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

#ifndef __ISpeechCustomStream_FWD_DEFINED__
#define __ISpeechCustomStream_FWD_DEFINED__
typedef interface ISpeechCustomStream ISpeechCustomStream;
#ifdef __cplusplus
interface ISpeechCustomStream;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechAudio_FWD_DEFINED__
#define __ISpeechAudio_FWD_DEFINED__
typedef interface ISpeechAudio ISpeechAudio;
#ifdef __cplusplus
interface ISpeechAudio;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechMMSysAudio_FWD_DEFINED__
#define __ISpeechMMSysAudio_FWD_DEFINED__
typedef interface ISpeechMMSysAudio ISpeechMMSysAudio;
#ifdef __cplusplus
interface ISpeechMMSysAudio;
#endif /* __cplusplus */
#endif

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

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

#ifndef ___ISpeechVoiceEvents_FWD_DEFINED__
#define ___ISpeechVoiceEvents_FWD_DEFINED__
typedef interface _ISpeechVoiceEvents _ISpeechVoiceEvents;
#ifdef __cplusplus
interface _ISpeechVoiceEvents;
#endif /* __cplusplus */
#endif

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

#ifndef __ISpeechRecognizerStatus_FWD_DEFINED__
#define __ISpeechRecognizerStatus_FWD_DEFINED__
typedef interface ISpeechRecognizerStatus ISpeechRecognizerStatus;
#ifdef __cplusplus
interface ISpeechRecognizerStatus;
#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 ___ISpeechRecoContextEvents_FWD_DEFINED__
#define ___ISpeechRecoContextEvents_FWD_DEFINED__
typedef interface _ISpeechRecoContextEvents _ISpeechRecoContextEvents;
#ifdef __cplusplus
interface _ISpeechRecoContextEvents;
#endif /* __cplusplus */
#endif

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

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

#ifndef __ISpeechGrammarRuleState_FWD_DEFINED__
#define __ISpeechGrammarRuleState_FWD_DEFINED__
typedef interface ISpeechGrammarRuleState ISpeechGrammarRuleState;
#ifdef __cplusplus
interface ISpeechGrammarRuleState;
#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 __ISpeechTextSelectionInformation_FWD_DEFINED__
#define __ISpeechTextSelectionInformation_FWD_DEFINED__
typedef interface ISpeechTextSelectionInformation ISpeechTextSelectionInformation;
#ifdef __cplusplus
interface ISpeechTextSelectionInformation;
#endif /* __cplusplus */
#endif

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

#ifndef __ISpeechRecoResultTimes_FWD_DEFINED__
#define __ISpeechRecoResultTimes_FWD_DEFINED__
typedef interface ISpeechRecoResultTimes ISpeechRecoResultTimes;
#ifdef __cplusplus
interface ISpeechRecoResultTimes;
#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 __ISpeechPhraseInfo_FWD_DEFINED__
#define __ISpeechPhraseInfo_FWD_DEFINED__
typedef interface ISpeechPhraseInfo ISpeechPhraseInfo;
#ifdef __cplusplus
interface ISpeechPhraseInfo;
#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 __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 __ISpeechPhraseRule_FWD_DEFINED__
#define __ISpeechPhraseRule_FWD_DEFINED__
typedef interface ISpeechPhraseRule ISpeechPhraseRule;
#ifdef __cplusplus
interface ISpeechPhraseRule;
#endif /* __cplusplus */
#endif

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

#ifndef __ISpeechLexicon_FWD_DEFINED__
#define __ISpeechLexicon_FWD_DEFINED__
typedef interface ISpeechLexicon ISpeechLexicon;
#ifdef __cplusplus
interface ISpeechLexicon;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechLexiconWords_FWD_DEFINED__
#define __ISpeechLexiconWords_FWD_DEFINED__
typedef interface ISpeechLexiconWords ISpeechLexiconWords;
#ifdef __cplusplus
interface ISpeechLexiconWords;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechLexiconWord_FWD_DEFINED__
#define __ISpeechLexiconWord_FWD_DEFINED__
typedef interface ISpeechLexiconWord ISpeechLexiconWord;
#ifdef __cplusplus
interface ISpeechLexiconWord;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechLexiconPronunciations_FWD_DEFINED__
#define __ISpeechLexiconPronunciations_FWD_DEFINED__
typedef interface ISpeechLexiconPronunciations ISpeechLexiconPronunciations;
#ifdef __cplusplus
interface ISpeechLexiconPronunciations;
#endif /* __cplusplus */
#endif

#ifndef __ISpeechLexiconPronunciation_FWD_DEFINED__
#define __ISpeechLexiconPronunciation_FWD_DEFINED__
typedef interface ISpeechLexiconPronunciation ISpeechLexiconPronunciation;
#ifdef __cplusplus
interface ISpeechLexiconPronunciation;
#endif /* __cplusplus */
#endif

typedef LONG SpeechLanguageId;
#define __SpeechStringConstants_MODULE_DEFINED__
#ifndef __SpeechStringConstants_MODULE_DEFINED__
#define __SpeechStringConstants_MODULE_DEFINED__
#define SpeechRegistryUserRoot (L"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech")

#define SpeechRegistryLocalMachineRoot (L"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech")

#define SpeechCategoryAudioOut (L"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioOutput")

#define SpeechCategoryAudioIn (L"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput")

#define SpeechCategoryVoices (L"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices")

#define SpeechCategoryRecognizers (L"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Recognizers")

#define SpeechCategoryAppLexicons (L"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AppLexicons")

#define SpeechCategoryPhoneConverters (L"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\PhoneConverters")

#define SpeechCategoryRecoProfiles (L"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\RecoProfiles")

#define SpeechTokenIdUserLexicon (L"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\CurrentUserLexicon")

#define SpeechTokenValueCLSID (L"CLSID")

#define SpeechTokenKeyFiles (L"Files")

#define SpeechTokenKeyUI (L"UI")

#define SpeechTokenKeyAttributes (L"Attributes")

#define SpeechVoiceCategoryTTSRate (L"DefaultTTSRate")

#define SpeechPropertyResourceUsage (L"ResourceUsage")

#define SpeechPropertyHighConfidenceThreshold (L"HighConfidenceThreshold")

#define SpeechPropertyNormalConfidenceThreshold (L"NormalConfidenceThreshold")

#define SpeechPropertyLowConfidenceThreshold (L"LowConfidenceThreshold")

#define SpeechPropertyResponseSpeed (L"ResponseSpeed")

#define SpeechPropertyComplexResponseSpeed (L"ComplexResponseSpeed")

#define SpeechPropertyAdaptationOn (L"AdaptationOn")

#define SpeechDictationTopicSpelling (L"Spelling")

#define SpeechGrammarTagWildcard (L"...")

#define SpeechGrammarTagDictation (L"*")

#define SpeechGrammarTagUnlimitedDictation (L"*+")

#define SpeechEngineProperties (L"EngineProperties")

#define SpeechAddRemoveWord (L"AddRemoveWord")

#define SpeechUserTraining (L"UserTraining")

#define SpeechMicTraining (L"MicTraining")

#define SpeechRecoProfileProperties (L"RecoProfileProperties")

#define SpeechAudioProperties (L"AudioProperties")

#define SpeechAudioVolume (L"AudioVolume")

#define SpeechVoiceSkipTypeSentence (L"Sentence")

#define SpeechAudioFormatGUIDWave (L"{C31ADBAE-527F-4ff5-A230-F62BB61FF70C}")

#define SpeechAudioFormatGUIDText (L"{7CEEF9F9-3D13-11d2-9EE7-00C04F797396}")

#endif /* __SpeechStringConstants_MODULE_DEFINED__ */
#ifndef __SpeechConstants_MODULE_DEFINED__
#define __SpeechConstants_MODULE_DEFINED__
#define Speech_Default_Weight (DEFAULT_WEIGHT)

#define Speech_Max_Word_Length (SP_MAX_WORD_LENGTH)

#define Speech_Max_Pron_Length (SP_MAX_PRON_LENGTH)

#define Speech_StreamPos_Asap (SP_STREAMPOS_ASAP)

#define Speech_StreamPos_RealTime (SP_STREAMPOS_REALTIME)

#define SpeechAllElements (SPPR_ALL_ELEMENTS)

#endif /* __SpeechConstants_MODULE_DEFINED__ */
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 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;
typedef enum SpeechDataKeyLocation {
    SDKLDefaultLocation = SPDKL_DefaultLocation,
    SDKLCurrentUser = SPDKL_CurrentUser,
    SDKLLocalMachine = SPDKL_LocalMachine,
    SDKLCurrentConfig = SPDKL_CurrentConfig
} SpeechDataKeyLocation;
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 SpeechTokenShellFolder {
    STSF_AppData = 0x1a,
    STSF_LocalAppData = 0x1c,
    STSF_CommonAppData = 0x23,
    STSF_FlagCreate = 0x8000
} SpeechTokenShellFolder;
typedef enum DISPID_SpeechObjectTokens {
    DISPID_SOTsCount = 1,
    DISPID_SOTsItem = DISPID_VALUE,
    DISPID_SOTs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechObjectTokens;
typedef enum DISPID_SpeechObjectTokenCategory {
    DISPID_SOTCId = 1,
    DISPID_SOTCDefault = 2,
    DISPID_SOTCSetId = 3,
    DISPID_SOTCGetDataKey = 4,
    DISPID_SOTCEnumerateTokens = 5
} DISPID_SpeechObjectTokenCategory;
/*****************************************************************************
 * 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 ValueName,
        VARIANT Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBinaryValue(
        const BSTR ValueName,
        VARIANT *Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetStringValue(
        const BSTR ValueName,
        const BSTR Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStringValue(
        const BSTR ValueName,
        BSTR *Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetLongValue(
        const BSTR ValueName,
        LONG Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLongValue(
        const BSTR ValueName,
        LONG *Value) = 0;

    virtual HRESULT STDMETHODCALLTYPE OpenKey(
        const BSTR SubKeyName,
        ISpeechDataKey **SubKey) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateKey(
        const BSTR SubKeyName,
        ISpeechDataKey **SubKey) = 0;

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

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

    virtual HRESULT STDMETHODCALLTYPE EnumKeys(
        LONG Index,
        BSTR *SubKeyName) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumValues(
        LONG Index,
        BSTR *ValueName) = 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 ValueName,
        VARIANT Value);

    HRESULT (STDMETHODCALLTYPE *GetBinaryValue)(
        ISpeechDataKey *This,
        const BSTR ValueName,
        VARIANT *Value);

    HRESULT (STDMETHODCALLTYPE *SetStringValue)(
        ISpeechDataKey *This,
        const BSTR ValueName,
        const BSTR Value);

    HRESULT (STDMETHODCALLTYPE *GetStringValue)(
        ISpeechDataKey *This,
        const BSTR ValueName,
        BSTR *Value);

    HRESULT (STDMETHODCALLTYPE *SetLongValue)(
        ISpeechDataKey *This,
        const BSTR ValueName,
        LONG Value);

    HRESULT (STDMETHODCALLTYPE *GetLongValue)(
        ISpeechDataKey *This,
        const BSTR ValueName,
        LONG *Value);

    HRESULT (STDMETHODCALLTYPE *OpenKey)(
        ISpeechDataKey *This,
        const BSTR SubKeyName,
        ISpeechDataKey **SubKey);

    HRESULT (STDMETHODCALLTYPE *CreateKey)(
        ISpeechDataKey *This,
        const BSTR SubKeyName,
        ISpeechDataKey **SubKey);

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

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

    HRESULT (STDMETHODCALLTYPE *EnumKeys)(
        ISpeechDataKey *This,
        LONG Index,
        BSTR *SubKeyName);

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

    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,ValueName,Value) (This)->lpVtbl->SetBinaryValue(This,ValueName,Value)
#define ISpeechDataKey_GetBinaryValue(This,ValueName,Value) (This)->lpVtbl->GetBinaryValue(This,ValueName,Value)
#define ISpeechDataKey_SetStringValue(This,ValueName,Value) (This)->lpVtbl->SetStringValue(This,ValueName,Value)
#define ISpeechDataKey_GetStringValue(This,ValueName,Value) (This)->lpVtbl->GetStringValue(This,ValueName,Value)
#define ISpeechDataKey_SetLongValue(This,ValueName,Value) (This)->lpVtbl->SetLongValue(This,ValueName,Value)
#define ISpeechDataKey_GetLongValue(This,ValueName,Value) (This)->lpVtbl->GetLongValue(This,ValueName,Value)
#define ISpeechDataKey_OpenKey(This,SubKeyName,SubKey) (This)->lpVtbl->OpenKey(This,SubKeyName,SubKey)
#define ISpeechDataKey_CreateKey(This,SubKeyName,SubKey) (This)->lpVtbl->CreateKey(This,SubKeyName,SubKey)
#define ISpeechDataKey_DeleteKey(This,SubKeyName) (This)->lpVtbl->DeleteKey(This,SubKeyName)
#define ISpeechDataKey_DeleteValue(This,ValueName) (This)->lpVtbl->DeleteValue(This,ValueName)
#define ISpeechDataKey_EnumKeys(This,Index,SubKeyName) (This)->lpVtbl->EnumKeys(This,Index,SubKeyName)
#define ISpeechDataKey_EnumValues(This,Index,ValueName) (This)->lpVtbl->EnumValues(This,Index,ValueName)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechDataKey_QueryInterface(ISpeechDataKey* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechDataKey_AddRef(ISpeechDataKey* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechDataKey_Release(ISpeechDataKey* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechDataKey_GetTypeInfoCount(ISpeechDataKey* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechDataKey_GetTypeInfo(ISpeechDataKey* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechDataKey_SetBinaryValue(ISpeechDataKey* This,const BSTR ValueName,VARIANT Value) {
    return This->lpVtbl->SetBinaryValue(This,ValueName,Value);
}
static inline HRESULT ISpeechDataKey_GetBinaryValue(ISpeechDataKey* This,const BSTR ValueName,VARIANT *Value) {
    return This->lpVtbl->GetBinaryValue(This,ValueName,Value);
}
static inline HRESULT ISpeechDataKey_SetStringValue(ISpeechDataKey* This,const BSTR ValueName,const BSTR Value) {
    return This->lpVtbl->SetStringValue(This,ValueName,Value);
}
static inline HRESULT ISpeechDataKey_GetStringValue(ISpeechDataKey* This,const BSTR ValueName,BSTR *Value) {
    return This->lpVtbl->GetStringValue(This,ValueName,Value);
}
static inline HRESULT ISpeechDataKey_SetLongValue(ISpeechDataKey* This,const BSTR ValueName,LONG Value) {
    return This->lpVtbl->SetLongValue(This,ValueName,Value);
}
static inline HRESULT ISpeechDataKey_GetLongValue(ISpeechDataKey* This,const BSTR ValueName,LONG *Value) {
    return This->lpVtbl->GetLongValue(This,ValueName,Value);
}
static inline HRESULT ISpeechDataKey_OpenKey(ISpeechDataKey* This,const BSTR SubKeyName,ISpeechDataKey **SubKey) {
    return This->lpVtbl->OpenKey(This,SubKeyName,SubKey);
}
static inline HRESULT ISpeechDataKey_CreateKey(ISpeechDataKey* This,const BSTR SubKeyName,ISpeechDataKey **SubKey) {
    return This->lpVtbl->CreateKey(This,SubKeyName,SubKey);
}
static inline HRESULT ISpeechDataKey_DeleteKey(ISpeechDataKey* This,const BSTR SubKeyName) {
    return This->lpVtbl->DeleteKey(This,SubKeyName);
}
static inline HRESULT ISpeechDataKey_DeleteValue(ISpeechDataKey* This,const BSTR ValueName) {
    return This->lpVtbl->DeleteValue(This,ValueName);
}
static inline HRESULT ISpeechDataKey_EnumKeys(ISpeechDataKey* This,LONG Index,BSTR *SubKeyName) {
    return This->lpVtbl->EnumKeys(This,Index,SubKeyName);
}
static inline HRESULT ISpeechDataKey_EnumValues(ISpeechDataKey* This,LONG Index,BSTR *ValueName) {
    return This->lpVtbl->EnumValues(This,Index,ValueName);
}
#endif
#endif

#endif


#endif  /* __ISpeechDataKey_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *ObjectId) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DataKey(
        ISpeechDataKey **DataKey) = 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 CategoryID = L"",
        VARIANT_BOOL CreateIfNotExist = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAttribute(
        BSTR AttributeName,
        BSTR *AttributeValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateInstance(
        IUnknown *pUnkOuter,
        SpeechTokenContext ClsContext,
        IUnknown **Object) = 0;

    virtual HRESULT STDMETHODCALLTYPE Remove(
        BSTR ObjectStorageCLSID) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStorageFileName(
        BSTR ObjectStorageCLSID,
        BSTR KeyName,
        BSTR FileName,
        SpeechTokenShellFolder Folder,
        BSTR *FilePath) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveStorageFileName(
        BSTR ObjectStorageCLSID,
        BSTR KeyName,
        VARIANT_BOOL DeleteFile) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsUISupported(
        const BSTR TypeOfUI,
        const VARIANT *ExtraData,
        IUnknown *Object,
        VARIANT_BOOL *Supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisplayUI(
        LONG hWnd,
        BSTR Title,
        const BSTR TypeOfUI,
        const VARIANT *ExtraData = 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 *ObjectId);

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

    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 CategoryID,
        VARIANT_BOOL CreateIfNotExist);

    HRESULT (STDMETHODCALLTYPE *GetAttribute)(
        ISpeechObjectToken *This,
        BSTR AttributeName,
        BSTR *AttributeValue);

    HRESULT (STDMETHODCALLTYPE *CreateInstance)(
        ISpeechObjectToken *This,
        IUnknown *pUnkOuter,
        SpeechTokenContext ClsContext,
        IUnknown **Object);

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

    HRESULT (STDMETHODCALLTYPE *GetStorageFileName)(
        ISpeechObjectToken *This,
        BSTR ObjectStorageCLSID,
        BSTR KeyName,
        BSTR FileName,
        SpeechTokenShellFolder Folder,
        BSTR *FilePath);

    HRESULT (STDMETHODCALLTYPE *RemoveStorageFileName)(
        ISpeechObjectToken *This,
        BSTR ObjectStorageCLSID,
        BSTR KeyName,
        VARIANT_BOOL DeleteFile);

    HRESULT (STDMETHODCALLTYPE *IsUISupported)(
        ISpeechObjectToken *This,
        const BSTR TypeOfUI,
        const VARIANT *ExtraData,
        IUnknown *Object,
        VARIANT_BOOL *Supported);

    HRESULT (STDMETHODCALLTYPE *DisplayUI)(
        ISpeechObjectToken *This,
        LONG hWnd,
        BSTR Title,
        const BSTR TypeOfUI,
        const VARIANT *ExtraData,
        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,ObjectId) (This)->lpVtbl->get_Id(This,ObjectId)
#define ISpeechObjectToken_get_DataKey(This,DataKey) (This)->lpVtbl->get_DataKey(This,DataKey)
#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,CategoryID,CreateIfNotExist) (This)->lpVtbl->SetId(This,Id,CategoryID,CreateIfNotExist)
#define ISpeechObjectToken_GetAttribute(This,AttributeName,AttributeValue) (This)->lpVtbl->GetAttribute(This,AttributeName,AttributeValue)
#define ISpeechObjectToken_CreateInstance(This,pUnkOuter,ClsContext,Object) (This)->lpVtbl->CreateInstance(This,pUnkOuter,ClsContext,Object)
#define ISpeechObjectToken_Remove(This,ObjectStorageCLSID) (This)->lpVtbl->Remove(This,ObjectStorageCLSID)
#define ISpeechObjectToken_GetStorageFileName(This,ObjectStorageCLSID,KeyName,FileName,Folder,FilePath) (This)->lpVtbl->GetStorageFileName(This,ObjectStorageCLSID,KeyName,FileName,Folder,FilePath)
#define ISpeechObjectToken_RemoveStorageFileName(This,ObjectStorageCLSID,KeyName,DeleteFile) (This)->lpVtbl->RemoveStorageFileName(This,ObjectStorageCLSID,KeyName,DeleteFile)
#define ISpeechObjectToken_IsUISupported(This,TypeOfUI,ExtraData,Object,Supported) (This)->lpVtbl->IsUISupported(This,TypeOfUI,ExtraData,Object,Supported)
#define ISpeechObjectToken_DisplayUI(This,hWnd,Title,TypeOfUI,ExtraData,Object) (This)->lpVtbl->DisplayUI(This,hWnd,Title,TypeOfUI,ExtraData,Object)
#define ISpeechObjectToken_MatchesAttributes(This,Attributes,Matches) (This)->lpVtbl->MatchesAttributes(This,Attributes,Matches)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechObjectToken_QueryInterface(ISpeechObjectToken* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechObjectToken_AddRef(ISpeechObjectToken* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechObjectToken_Release(ISpeechObjectToken* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechObjectToken_GetTypeInfoCount(ISpeechObjectToken* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechObjectToken_GetTypeInfo(ISpeechObjectToken* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechObjectToken_get_Id(ISpeechObjectToken* This,BSTR *ObjectId) {
    return This->lpVtbl->get_Id(This,ObjectId);
}
static inline HRESULT ISpeechObjectToken_get_DataKey(ISpeechObjectToken* This,ISpeechDataKey **DataKey) {
    return This->lpVtbl->get_DataKey(This,DataKey);
}
static inline HRESULT ISpeechObjectToken_get_Category(ISpeechObjectToken* This,ISpeechObjectTokenCategory **Category) {
    return This->lpVtbl->get_Category(This,Category);
}
static inline HRESULT ISpeechObjectToken_GetDescription(ISpeechObjectToken* This,LONG Locale,BSTR *Description) {
    return This->lpVtbl->GetDescription(This,Locale,Description);
}
static inline HRESULT ISpeechObjectToken_SetId(ISpeechObjectToken* This,BSTR Id,BSTR CategoryID,VARIANT_BOOL CreateIfNotExist) {
    return This->lpVtbl->SetId(This,Id,CategoryID,CreateIfNotExist);
}
static inline HRESULT ISpeechObjectToken_GetAttribute(ISpeechObjectToken* This,BSTR AttributeName,BSTR *AttributeValue) {
    return This->lpVtbl->GetAttribute(This,AttributeName,AttributeValue);
}
static inline HRESULT ISpeechObjectToken_CreateInstance(ISpeechObjectToken* This,IUnknown *pUnkOuter,SpeechTokenContext ClsContext,IUnknown **Object) {
    return This->lpVtbl->CreateInstance(This,pUnkOuter,ClsContext,Object);
}
static inline HRESULT ISpeechObjectToken_Remove(ISpeechObjectToken* This,BSTR ObjectStorageCLSID) {
    return This->lpVtbl->Remove(This,ObjectStorageCLSID);
}
static inline HRESULT ISpeechObjectToken_GetStorageFileName(ISpeechObjectToken* This,BSTR ObjectStorageCLSID,BSTR KeyName,BSTR FileName,SpeechTokenShellFolder Folder,BSTR *FilePath) {
    return This->lpVtbl->GetStorageFileName(This,ObjectStorageCLSID,KeyName,FileName,Folder,FilePath);
}
static inline HRESULT ISpeechObjectToken_RemoveStorageFileName(ISpeechObjectToken* This,BSTR ObjectStorageCLSID,BSTR KeyName,VARIANT_BOOL DeleteFile) {
    return This->lpVtbl->RemoveStorageFileName(This,ObjectStorageCLSID,KeyName,DeleteFile);
}
static inline HRESULT ISpeechObjectToken_IsUISupported(ISpeechObjectToken* This,const BSTR TypeOfUI,const VARIANT *ExtraData,IUnknown *Object,VARIANT_BOOL *Supported) {
    return This->lpVtbl->IsUISupported(This,TypeOfUI,ExtraData,Object,Supported);
}
static inline HRESULT ISpeechObjectToken_DisplayUI(ISpeechObjectToken* This,LONG hWnd,BSTR Title,const BSTR TypeOfUI,const VARIANT *ExtraData,IUnknown *Object) {
    return This->lpVtbl->DisplayUI(This,hWnd,Title,TypeOfUI,ExtraData,Object);
}
static inline HRESULT ISpeechObjectToken_MatchesAttributes(ISpeechObjectToken* This,BSTR Attributes,VARIANT_BOOL *Matches) {
    return This->lpVtbl->MatchesAttributes(This,Attributes,Matches);
}
#endif
#endif

#endif


#endif  /* __ISpeechObjectToken_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 **ppEnumVARIANT) = 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 **ppEnumVARIANT);

    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,ppEnumVARIANT) (This)->lpVtbl->get__NewEnum(This,ppEnumVARIANT)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechObjectTokens_QueryInterface(ISpeechObjectTokens* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechObjectTokens_AddRef(ISpeechObjectTokens* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechObjectTokens_Release(ISpeechObjectTokens* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechObjectTokens_GetTypeInfoCount(ISpeechObjectTokens* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechObjectTokens_GetTypeInfo(ISpeechObjectTokens* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechObjectTokens_get_Count(ISpeechObjectTokens* This,LONG *Count) {
    return This->lpVtbl->get_Count(This,Count);
}
static inline HRESULT ISpeechObjectTokens_Item(ISpeechObjectTokens* This,LONG Index,ISpeechObjectToken **Token) {
    return This->lpVtbl->Item(This,Index,Token);
}
static inline HRESULT ISpeechObjectTokens_get__NewEnum(ISpeechObjectTokens* This,IUnknown **ppEnumVARIANT) {
    return This->lpVtbl->get__NewEnum(This,ppEnumVARIANT);
}
#endif
#endif

#endif


#endif  /* __ISpeechObjectTokens_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 TokenId) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetId(
        const BSTR Id,
        VARIANT_BOOL CreateIfNotExist = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDataKey(
        SpeechDataKeyLocation Location,
        ISpeechDataKey **DataKey) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumerateTokens(
        BSTR RequiredAttributes,
        BSTR OptionalAttributes,
        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 TokenId);

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

    HRESULT (STDMETHODCALLTYPE *SetId)(
        ISpeechObjectTokenCategory *This,
        const BSTR Id,
        VARIANT_BOOL CreateIfNotExist);

    HRESULT (STDMETHODCALLTYPE *GetDataKey)(
        ISpeechObjectTokenCategory *This,
        SpeechDataKeyLocation Location,
        ISpeechDataKey **DataKey);

    HRESULT (STDMETHODCALLTYPE *EnumerateTokens)(
        ISpeechObjectTokenCategory *This,
        BSTR RequiredAttributes,
        BSTR OptionalAttributes,
        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,TokenId) (This)->lpVtbl->put_Default(This,TokenId)
#define ISpeechObjectTokenCategory_get_Default(This,TokenId) (This)->lpVtbl->get_Default(This,TokenId)
#define ISpeechObjectTokenCategory_SetId(This,Id,CreateIfNotExist) (This)->lpVtbl->SetId(This,Id,CreateIfNotExist)
#define ISpeechObjectTokenCategory_GetDataKey(This,Location,DataKey) (This)->lpVtbl->GetDataKey(This,Location,DataKey)
#define ISpeechObjectTokenCategory_EnumerateTokens(This,RequiredAttributes,OptionalAttributes,Tokens) (This)->lpVtbl->EnumerateTokens(This,RequiredAttributes,OptionalAttributes,Tokens)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechObjectTokenCategory_QueryInterface(ISpeechObjectTokenCategory* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechObjectTokenCategory_AddRef(ISpeechObjectTokenCategory* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechObjectTokenCategory_Release(ISpeechObjectTokenCategory* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechObjectTokenCategory_GetTypeInfoCount(ISpeechObjectTokenCategory* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechObjectTokenCategory_GetTypeInfo(ISpeechObjectTokenCategory* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechObjectTokenCategory_get_Id(ISpeechObjectTokenCategory* This,BSTR *Id) {
    return This->lpVtbl->get_Id(This,Id);
}
static inline HRESULT ISpeechObjectTokenCategory_put_Default(ISpeechObjectTokenCategory* This,const BSTR TokenId) {
    return This->lpVtbl->put_Default(This,TokenId);
}
static inline HRESULT ISpeechObjectTokenCategory_get_Default(ISpeechObjectTokenCategory* This,BSTR *TokenId) {
    return This->lpVtbl->get_Default(This,TokenId);
}
static inline HRESULT ISpeechObjectTokenCategory_SetId(ISpeechObjectTokenCategory* This,const BSTR Id,VARIANT_BOOL CreateIfNotExist) {
    return This->lpVtbl->SetId(This,Id,CreateIfNotExist);
}
static inline HRESULT ISpeechObjectTokenCategory_GetDataKey(ISpeechObjectTokenCategory* This,SpeechDataKeyLocation Location,ISpeechDataKey **DataKey) {
    return This->lpVtbl->GetDataKey(This,Location,DataKey);
}
static inline HRESULT ISpeechObjectTokenCategory_EnumerateTokens(ISpeechObjectTokenCategory* This,BSTR RequiredAttributes,BSTR OptionalAttributes,ISpeechObjectTokens **Tokens) {
    return This->lpVtbl->EnumerateTokens(This,RequiredAttributes,OptionalAttributes,Tokens);
}
#endif
#endif

#endif


#endif  /* __ISpeechObjectTokenCategory_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;
typedef enum DISPID_SpeechBaseStream {
    DISPID_SBSFormat = 1,
    DISPID_SBSRead = 2,
    DISPID_SBSWrite = 3,
    DISPID_SBSSeek = 4
} DISPID_SpeechBaseStream;
typedef enum SpeechStreamSeekPositionType {
    SSSPTRelativeToStart = STREAM_SEEK_SET,
    SSSPTRelativeToCurrentPosition = STREAM_SEEK_CUR,
    SSSPTRelativeToEnd = STREAM_SEEK_END
} SpeechStreamSeekPositionType;
typedef enum DISPID_SpeechAudio {
    DISPID_SAStatus = 200,
    DISPID_SABufferInfo = 201,
    DISPID_SADefaultFormat = 202,
    DISPID_SAVolume = 203,
    DISPID_SABufferNotifySize = 204,
    DISPID_SAEventHandle = 205,
    DISPID_SASetState = 206
} DISPID_SpeechAudio;
typedef enum SpeechAudioState {
    SASClosed = SPAS_CLOSED,
    SASStop = SPAS_STOP,
    SASPause = SPAS_PAUSE,
    SASRun = SPAS_RUN
} SpeechAudioState;
typedef enum DISPID_SpeechMMSysAudio {
    DISPID_SMSADeviceId = 300,
    DISPID_SMSALineId = 301,
    DISPID_SMSAMMHandle = 302
} DISPID_SpeechMMSysAudio;
typedef enum DISPID_SpeechFileStream {
    DISPID_SFSOpen = 100,
    DISPID_SFSClose = 101
} DISPID_SpeechFileStream;
typedef enum SpeechStreamFileMode {
    SSFMOpenForRead = SPFM_OPEN_READONLY,
    SSFMOpenReadWrite = SPFM_OPEN_READWRITE,
    SSFMCreate = SPFM_CREATE,
    SSFMCreateForWrite = SPFM_CREATE_ALWAYS
} SpeechStreamFileMode;
typedef enum DISPID_SpeechCustomStream {
    DISPID_SCSBaseStream = 100
} DISPID_SpeechCustomStream;
typedef enum DISPID_SpeechMemoryStream {
    DISPID_SMSSetData = 100,
    DISPID_SMSGetData = 101
} DISPID_SpeechMemoryStream;
typedef enum DISPID_SpeechAudioStatus {
    DISPID_SASFreeBufferSpace = 1,
    DISPID_SASNonBlockingIO = 2,
    DISPID_SASState = 3,
    DISPID_SASCurrentSeekPosition = 4,
    DISPID_SASCurrentDevicePosition = 5
} DISPID_SpeechAudioStatus;
typedef enum DISPID_SpeechAudioBufferInfo {
    DISPID_SABIMinNotification = 1,
    DISPID_SABIBufferSize = 2,
    DISPID_SABIEventBias = 3
} DISPID_SpeechAudioBufferInfo;
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;
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;
typedef enum SpeechVoicePriority {
    SVPNormal = SPVPRI_NORMAL,
    SVPAlert = SPVPRI_ALERT,
    SVPOver = SPVPRI_OVER
} SpeechVoicePriority;
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,
    SVSFNLPMask = SPF_NLP_MASK,
    SVSFVoiceMask = SPF_VOICE_MASK,
    SVSFUnusedFlags = SPF_UNUSED_FLAGS
} SpeechVoiceSpeakFlags;
typedef enum SpeechVoiceEvents {
    SVEStartInputStream = 0x2,
    SVEEndInputStream = 0x4,
    SVEVoiceChange = 0x8,
    SVEBookmark = 0x10,
    SVEWordBoundary = 0x20,
    SVEPhoneme = 0x40,
    SVESentenceBoundary = 0x80,
    SVEViseme = 0x100,
    SVEAudioLevel = 0x200,
    SVEPrivate = 0x8000,
    SVEAllEvents = 0x83fe
} SpeechVoiceEvents;
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;
typedef enum SpeechRunState {
    SRSEDone = SPRS_DONE,
    SRSEIsSpeaking = SPRS_IS_SPEAKING
} SpeechRunState;
/*****************************************************************************
 * 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 *AudioFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Type(
        SpeechAudioFormatType AudioFormat) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE put_Guid(
        BSTR Guid) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE SetWaveFormatEx(
        ISpeechWaveFormatEx *SpeechWaveFormatEx) = 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 *AudioFormat);

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

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

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

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

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

    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,AudioFormat) (This)->lpVtbl->get_Type(This,AudioFormat)
#define ISpeechAudioFormat_put_Type(This,AudioFormat) (This)->lpVtbl->put_Type(This,AudioFormat)
#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,SpeechWaveFormatEx) (This)->lpVtbl->GetWaveFormatEx(This,SpeechWaveFormatEx)
#define ISpeechAudioFormat_SetWaveFormatEx(This,SpeechWaveFormatEx) (This)->lpVtbl->SetWaveFormatEx(This,SpeechWaveFormatEx)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechAudioFormat_QueryInterface(ISpeechAudioFormat* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechAudioFormat_AddRef(ISpeechAudioFormat* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechAudioFormat_Release(ISpeechAudioFormat* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechAudioFormat_GetTypeInfoCount(ISpeechAudioFormat* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechAudioFormat_GetTypeInfo(ISpeechAudioFormat* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechAudioFormat_get_Type(ISpeechAudioFormat* This,SpeechAudioFormatType *AudioFormat) {
    return This->lpVtbl->get_Type(This,AudioFormat);
}
static inline HRESULT ISpeechAudioFormat_put_Type(ISpeechAudioFormat* This,SpeechAudioFormatType AudioFormat) {
    return This->lpVtbl->put_Type(This,AudioFormat);
}
static inline HRESULT ISpeechAudioFormat_get_Guid(ISpeechAudioFormat* This,BSTR *Guid) {
    return This->lpVtbl->get_Guid(This,Guid);
}
static inline HRESULT ISpeechAudioFormat_put_Guid(ISpeechAudioFormat* This,BSTR Guid) {
    return This->lpVtbl->put_Guid(This,Guid);
}
static inline HRESULT ISpeechAudioFormat_GetWaveFormatEx(ISpeechAudioFormat* This,ISpeechWaveFormatEx **SpeechWaveFormatEx) {
    return This->lpVtbl->GetWaveFormatEx(This,SpeechWaveFormatEx);
}
static inline HRESULT ISpeechAudioFormat_SetWaveFormatEx(ISpeechAudioFormat* This,ISpeechWaveFormatEx *SpeechWaveFormatEx) {
    return This->lpVtbl->SetWaveFormatEx(This,SpeechWaveFormatEx);
}
#endif
#endif

#endif


#endif  /* __ISpeechAudioFormat_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 **AudioFormat) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE Read(
        VARIANT *Buffer,
        LONG NumberOfBytes,
        LONG *BytesRead) = 0;

    virtual HRESULT STDMETHODCALLTYPE Write(
        VARIANT Buffer,
        LONG *BytesWritten) = 0;

    virtual HRESULT STDMETHODCALLTYPE Seek(
        VARIANT Position,
        SpeechStreamSeekPositionType Origin,
        VARIANT *NewPosition) = 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 **AudioFormat);

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

    HRESULT (STDMETHODCALLTYPE *Read)(
        ISpeechBaseStream *This,
        VARIANT *Buffer,
        LONG NumberOfBytes,
        LONG *BytesRead);

    HRESULT (STDMETHODCALLTYPE *Write)(
        ISpeechBaseStream *This,
        VARIANT Buffer,
        LONG *BytesWritten);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        ISpeechBaseStream *This,
        VARIANT Position,
        SpeechStreamSeekPositionType Origin,
        VARIANT *NewPosition);

    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,AudioFormat) (This)->lpVtbl->get_Format(This,AudioFormat)
#define ISpeechBaseStream_putref_Format(This,AudioFormat) (This)->lpVtbl->putref_Format(This,AudioFormat)
#define ISpeechBaseStream_Read(This,Buffer,NumberOfBytes,BytesRead) (This)->lpVtbl->Read(This,Buffer,NumberOfBytes,BytesRead)
#define ISpeechBaseStream_Write(This,Buffer,BytesWritten) (This)->lpVtbl->Write(This,Buffer,BytesWritten)
#define ISpeechBaseStream_Seek(This,Position,Origin,NewPosition) (This)->lpVtbl->Seek(This,Position,Origin,NewPosition)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechBaseStream_QueryInterface(ISpeechBaseStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechBaseStream_AddRef(ISpeechBaseStream* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechBaseStream_Release(ISpeechBaseStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechBaseStream_GetTypeInfoCount(ISpeechBaseStream* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechBaseStream_GetTypeInfo(ISpeechBaseStream* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechBaseStream_get_Format(ISpeechBaseStream* This,ISpeechAudioFormat **AudioFormat) {
    return This->lpVtbl->get_Format(This,AudioFormat);
}
static inline HRESULT ISpeechBaseStream_putref_Format(ISpeechBaseStream* This,ISpeechAudioFormat *AudioFormat) {
    return This->lpVtbl->putref_Format(This,AudioFormat);
}
static inline HRESULT ISpeechBaseStream_Read(ISpeechBaseStream* This,VARIANT *Buffer,LONG NumberOfBytes,LONG *BytesRead) {
    return This->lpVtbl->Read(This,Buffer,NumberOfBytes,BytesRead);
}
static inline HRESULT ISpeechBaseStream_Write(ISpeechBaseStream* This,VARIANT Buffer,LONG *BytesWritten) {
    return This->lpVtbl->Write(This,Buffer,BytesWritten);
}
static inline HRESULT ISpeechBaseStream_Seek(ISpeechBaseStream* This,VARIANT Position,SpeechStreamSeekPositionType Origin,VARIANT *NewPosition) {
    return This->lpVtbl->Seek(This,Position,Origin,NewPosition);
}
#endif
#endif

#endif


#endif  /* __ISpeechBaseStream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechAudio interface
 */
#ifndef __ISpeechAudio_INTERFACE_DEFINED__
#define __ISpeechAudio_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechAudio, 0xcff8e175, 0x019e, 0x11d3, 0xa0,0x8e, 0x00,0xc0,0x4f,0x8e,0xf9,0xb5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("cff8e175-019e-11d3-a08e-00c04f8ef9b5")
ISpeechAudio : public ISpeechBaseStream
{
    virtual HRESULT STDMETHODCALLTYPE get_Status(
        ISpeechAudioStatus **Status) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_BufferInfo(
        ISpeechAudioBufferInfo **BufferInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DefaultFormat(
        ISpeechAudioFormat **StreamFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Volume(
        LONG *Volume) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Volume(
        LONG Volume) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_BufferNotifySize(
        LONG *BufferNotifySize) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_BufferNotifySize(
        LONG BufferNotifySize) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EventHandle(
        LONG *EventHandle) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetState(
        SpeechAudioState State) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechAudio, 0xcff8e175, 0x019e, 0x11d3, 0xa0,0x8e, 0x00,0xc0,0x4f,0x8e,0xf9,0xb5)
#endif
#else
typedef struct ISpeechAudioVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *putref_Format)(
        ISpeechAudio *This,
        ISpeechAudioFormat *AudioFormat);

    HRESULT (STDMETHODCALLTYPE *Read)(
        ISpeechAudio *This,
        VARIANT *Buffer,
        LONG NumberOfBytes,
        LONG *BytesRead);

    HRESULT (STDMETHODCALLTYPE *Write)(
        ISpeechAudio *This,
        VARIANT Buffer,
        LONG *BytesWritten);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        ISpeechAudio *This,
        VARIANT Position,
        SpeechStreamSeekPositionType Origin,
        VARIANT *NewPosition);

    /*** ISpeechAudio methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Status)(
        ISpeechAudio *This,
        ISpeechAudioStatus **Status);

    HRESULT (STDMETHODCALLTYPE *get_BufferInfo)(
        ISpeechAudio *This,
        ISpeechAudioBufferInfo **BufferInfo);

    HRESULT (STDMETHODCALLTYPE *get_DefaultFormat)(
        ISpeechAudio *This,
        ISpeechAudioFormat **StreamFormat);

    HRESULT (STDMETHODCALLTYPE *get_Volume)(
        ISpeechAudio *This,
        LONG *Volume);

    HRESULT (STDMETHODCALLTYPE *put_Volume)(
        ISpeechAudio *This,
        LONG Volume);

    HRESULT (STDMETHODCALLTYPE *get_BufferNotifySize)(
        ISpeechAudio *This,
        LONG *BufferNotifySize);

    HRESULT (STDMETHODCALLTYPE *put_BufferNotifySize)(
        ISpeechAudio *This,
        LONG BufferNotifySize);

    HRESULT (STDMETHODCALLTYPE *get_EventHandle)(
        ISpeechAudio *This,
        LONG *EventHandle);

    HRESULT (STDMETHODCALLTYPE *SetState)(
        ISpeechAudio *This,
        SpeechAudioState State);

    END_INTERFACE
} ISpeechAudioVtbl;

interface ISpeechAudio {
    CONST_VTBL ISpeechAudioVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechAudio_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechAudio_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechAudio_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechAudio_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechAudio_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechAudio_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechAudio_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 ISpeechAudio_get_Format(This,AudioFormat) (This)->lpVtbl->get_Format(This,AudioFormat)
#define ISpeechAudio_putref_Format(This,AudioFormat) (This)->lpVtbl->putref_Format(This,AudioFormat)
#define ISpeechAudio_Read(This,Buffer,NumberOfBytes,BytesRead) (This)->lpVtbl->Read(This,Buffer,NumberOfBytes,BytesRead)
#define ISpeechAudio_Write(This,Buffer,BytesWritten) (This)->lpVtbl->Write(This,Buffer,BytesWritten)
#define ISpeechAudio_Seek(This,Position,Origin,NewPosition) (This)->lpVtbl->Seek(This,Position,Origin,NewPosition)
/*** ISpeechAudio methods ***/
#define ISpeechAudio_get_Status(This,Status) (This)->lpVtbl->get_Status(This,Status)
#define ISpeechAudio_get_BufferInfo(This,BufferInfo) (This)->lpVtbl->get_BufferInfo(This,BufferInfo)
#define ISpeechAudio_get_DefaultFormat(This,StreamFormat) (This)->lpVtbl->get_DefaultFormat(This,StreamFormat)
#define ISpeechAudio_get_Volume(This,Volume) (This)->lpVtbl->get_Volume(This,Volume)
#define ISpeechAudio_put_Volume(This,Volume) (This)->lpVtbl->put_Volume(This,Volume)
#define ISpeechAudio_get_BufferNotifySize(This,BufferNotifySize) (This)->lpVtbl->get_BufferNotifySize(This,BufferNotifySize)
#define ISpeechAudio_put_BufferNotifySize(This,BufferNotifySize) (This)->lpVtbl->put_BufferNotifySize(This,BufferNotifySize)
#define ISpeechAudio_get_EventHandle(This,EventHandle) (This)->lpVtbl->get_EventHandle(This,EventHandle)
#define ISpeechAudio_SetState(This,State) (This)->lpVtbl->SetState(This,State)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechAudio_QueryInterface(ISpeechAudio* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechAudio_AddRef(ISpeechAudio* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechAudio_Release(ISpeechAudio* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechAudio_GetTypeInfoCount(ISpeechAudio* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechAudio_GetTypeInfo(ISpeechAudio* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ISpeechAudio_GetIDsOfNames(ISpeechAudio* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ISpeechAudio_Invoke(ISpeechAudio* 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 inline HRESULT ISpeechAudio_get_Format(ISpeechAudio* This,ISpeechAudioFormat **AudioFormat) {
    return This->lpVtbl->get_Format(This,AudioFormat);
}
static inline HRESULT ISpeechAudio_putref_Format(ISpeechAudio* This,ISpeechAudioFormat *AudioFormat) {
    return This->lpVtbl->putref_Format(This,AudioFormat);
}
static inline HRESULT ISpeechAudio_Read(ISpeechAudio* This,VARIANT *Buffer,LONG NumberOfBytes,LONG *BytesRead) {
    return This->lpVtbl->Read(This,Buffer,NumberOfBytes,BytesRead);
}
static inline HRESULT ISpeechAudio_Write(ISpeechAudio* This,VARIANT Buffer,LONG *BytesWritten) {
    return This->lpVtbl->Write(This,Buffer,BytesWritten);
}
static inline HRESULT ISpeechAudio_Seek(ISpeechAudio* This,VARIANT Position,SpeechStreamSeekPositionType Origin,VARIANT *NewPosition) {
    return This->lpVtbl->Seek(This,Position,Origin,NewPosition);
}
/*** ISpeechAudio methods ***/
static inline HRESULT ISpeechAudio_get_Status(ISpeechAudio* This,ISpeechAudioStatus **Status) {
    return This->lpVtbl->get_Status(This,Status);
}
static inline HRESULT ISpeechAudio_get_BufferInfo(ISpeechAudio* This,ISpeechAudioBufferInfo **BufferInfo) {
    return This->lpVtbl->get_BufferInfo(This,BufferInfo);
}
static inline HRESULT ISpeechAudio_get_DefaultFormat(ISpeechAudio* This,ISpeechAudioFormat **StreamFormat) {
    return This->lpVtbl->get_DefaultFormat(This,StreamFormat);
}
static inline HRESULT ISpeechAudio_get_Volume(ISpeechAudio* This,LONG *Volume) {
    return This->lpVtbl->get_Volume(This,Volume);
}
static inline HRESULT ISpeechAudio_put_Volume(ISpeechAudio* This,LONG Volume) {
    return This->lpVtbl->put_Volume(This,Volume);
}
static inline HRESULT ISpeechAudio_get_BufferNotifySize(ISpeechAudio* This,LONG *BufferNotifySize) {
    return This->lpVtbl->get_BufferNotifySize(This,BufferNotifySize);
}
static inline HRESULT ISpeechAudio_put_BufferNotifySize(ISpeechAudio* This,LONG BufferNotifySize) {
    return This->lpVtbl->put_BufferNotifySize(This,BufferNotifySize);
}
static inline HRESULT ISpeechAudio_get_EventHandle(ISpeechAudio* This,LONG *EventHandle) {
    return This->lpVtbl->get_EventHandle(This,EventHandle);
}
static inline HRESULT ISpeechAudio_SetState(ISpeechAudio* This,SpeechAudioState State) {
    return This->lpVtbl->SetState(This,State);
}
#endif
#endif

#endif


#endif  /* __ISpeechAudio_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechMMSysAudio interface
 */
#ifndef __ISpeechMMSysAudio_INTERFACE_DEFINED__
#define __ISpeechMMSysAudio_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechMMSysAudio, 0x3c76af6d, 0x1fd7, 0x4831, 0x81,0xd1, 0x3b,0x71,0xd5,0xa1,0x3c,0x44);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3c76af6d-1fd7-4831-81d1-3b71d5a13c44")
ISpeechMMSysAudio : public ISpeechAudio
{
    virtual HRESULT STDMETHODCALLTYPE get_DeviceId(
        LONG *DeviceId) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_DeviceId(
        LONG DeviceId) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LineId(
        LONG *LineId) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_LineId(
        LONG LineId) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_MMHandle(
        LONG *Handle) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechMMSysAudio, 0x3c76af6d, 0x1fd7, 0x4831, 0x81,0xd1, 0x3b,0x71,0xd5,0xa1,0x3c,0x44)
#endif
#else
typedef struct ISpeechMMSysAudioVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *putref_Format)(
        ISpeechMMSysAudio *This,
        ISpeechAudioFormat *AudioFormat);

    HRESULT (STDMETHODCALLTYPE *Read)(
        ISpeechMMSysAudio *This,
        VARIANT *Buffer,
        LONG NumberOfBytes,
        LONG *BytesRead);

    HRESULT (STDMETHODCALLTYPE *Write)(
        ISpeechMMSysAudio *This,
        VARIANT Buffer,
        LONG *BytesWritten);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        ISpeechMMSysAudio *This,
        VARIANT Position,
        SpeechStreamSeekPositionType Origin,
        VARIANT *NewPosition);

    /*** ISpeechAudio methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Status)(
        ISpeechMMSysAudio *This,
        ISpeechAudioStatus **Status);

    HRESULT (STDMETHODCALLTYPE *get_BufferInfo)(
        ISpeechMMSysAudio *This,
        ISpeechAudioBufferInfo **BufferInfo);

    HRESULT (STDMETHODCALLTYPE *get_DefaultFormat)(
        ISpeechMMSysAudio *This,
        ISpeechAudioFormat **StreamFormat);

    HRESULT (STDMETHODCALLTYPE *get_Volume)(
        ISpeechMMSysAudio *This,
        LONG *Volume);

    HRESULT (STDMETHODCALLTYPE *put_Volume)(
        ISpeechMMSysAudio *This,
        LONG Volume);

    HRESULT (STDMETHODCALLTYPE *get_BufferNotifySize)(
        ISpeechMMSysAudio *This,
        LONG *BufferNotifySize);

    HRESULT (STDMETHODCALLTYPE *put_BufferNotifySize)(
        ISpeechMMSysAudio *This,
        LONG BufferNotifySize);

    HRESULT (STDMETHODCALLTYPE *get_EventHandle)(
        ISpeechMMSysAudio *This,
        LONG *EventHandle);

    HRESULT (STDMETHODCALLTYPE *SetState)(
        ISpeechMMSysAudio *This,
        SpeechAudioState State);

    /*** ISpeechMMSysAudio methods ***/
    HRESULT (STDMETHODCALLTYPE *get_DeviceId)(
        ISpeechMMSysAudio *This,
        LONG *DeviceId);

    HRESULT (STDMETHODCALLTYPE *put_DeviceId)(
        ISpeechMMSysAudio *This,
        LONG DeviceId);

    HRESULT (STDMETHODCALLTYPE *get_LineId)(
        ISpeechMMSysAudio *This,
        LONG *LineId);

    HRESULT (STDMETHODCALLTYPE *put_LineId)(
        ISpeechMMSysAudio *This,
        LONG LineId);

    HRESULT (STDMETHODCALLTYPE *get_MMHandle)(
        ISpeechMMSysAudio *This,
        LONG *Handle);

    END_INTERFACE
} ISpeechMMSysAudioVtbl;

interface ISpeechMMSysAudio {
    CONST_VTBL ISpeechMMSysAudioVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechMMSysAudio_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechMMSysAudio_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechMMSysAudio_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechMMSysAudio_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechMMSysAudio_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechMMSysAudio_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechMMSysAudio_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 ISpeechMMSysAudio_get_Format(This,AudioFormat) (This)->lpVtbl->get_Format(This,AudioFormat)
#define ISpeechMMSysAudio_putref_Format(This,AudioFormat) (This)->lpVtbl->putref_Format(This,AudioFormat)
#define ISpeechMMSysAudio_Read(This,Buffer,NumberOfBytes,BytesRead) (This)->lpVtbl->Read(This,Buffer,NumberOfBytes,BytesRead)
#define ISpeechMMSysAudio_Write(This,Buffer,BytesWritten) (This)->lpVtbl->Write(This,Buffer,BytesWritten)
#define ISpeechMMSysAudio_Seek(This,Position,Origin,NewPosition) (This)->lpVtbl->Seek(This,Position,Origin,NewPosition)
/*** ISpeechAudio methods ***/
#define ISpeechMMSysAudio_get_Status(This,Status) (This)->lpVtbl->get_Status(This,Status)
#define ISpeechMMSysAudio_get_BufferInfo(This,BufferInfo) (This)->lpVtbl->get_BufferInfo(This,BufferInfo)
#define ISpeechMMSysAudio_get_DefaultFormat(This,StreamFormat) (This)->lpVtbl->get_DefaultFormat(This,StreamFormat)
#define ISpeechMMSysAudio_get_Volume(This,Volume) (This)->lpVtbl->get_Volume(This,Volume)
#define ISpeechMMSysAudio_put_Volume(This,Volume) (This)->lpVtbl->put_Volume(This,Volume)
#define ISpeechMMSysAudio_get_BufferNotifySize(This,BufferNotifySize) (This)->lpVtbl->get_BufferNotifySize(This,BufferNotifySize)
#define ISpeechMMSysAudio_put_BufferNotifySize(This,BufferNotifySize) (This)->lpVtbl->put_BufferNotifySize(This,BufferNotifySize)
#define ISpeechMMSysAudio_get_EventHandle(This,EventHandle) (This)->lpVtbl->get_EventHandle(This,EventHandle)
#define ISpeechMMSysAudio_SetState(This,State) (This)->lpVtbl->SetState(This,State)
/*** ISpeechMMSysAudio methods ***/
#define ISpeechMMSysAudio_get_DeviceId(This,DeviceId) (This)->lpVtbl->get_DeviceId(This,DeviceId)
#define ISpeechMMSysAudio_put_DeviceId(This,DeviceId) (This)->lpVtbl->put_DeviceId(This,DeviceId)
#define ISpeechMMSysAudio_get_LineId(This,LineId) (This)->lpVtbl->get_LineId(This,LineId)
#define ISpeechMMSysAudio_put_LineId(This,LineId) (This)->lpVtbl->put_LineId(This,LineId)
#define ISpeechMMSysAudio_get_MMHandle(This,Handle) (This)->lpVtbl->get_MMHandle(This,Handle)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechMMSysAudio_QueryInterface(ISpeechMMSysAudio* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechMMSysAudio_AddRef(ISpeechMMSysAudio* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechMMSysAudio_Release(ISpeechMMSysAudio* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechMMSysAudio_GetTypeInfoCount(ISpeechMMSysAudio* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechMMSysAudio_GetTypeInfo(ISpeechMMSysAudio* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ISpeechMMSysAudio_GetIDsOfNames(ISpeechMMSysAudio* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ISpeechMMSysAudio_Invoke(ISpeechMMSysAudio* 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 inline HRESULT ISpeechMMSysAudio_get_Format(ISpeechMMSysAudio* This,ISpeechAudioFormat **AudioFormat) {
    return This->lpVtbl->get_Format(This,AudioFormat);
}
static inline HRESULT ISpeechMMSysAudio_putref_Format(ISpeechMMSysAudio* This,ISpeechAudioFormat *AudioFormat) {
    return This->lpVtbl->putref_Format(This,AudioFormat);
}
static inline HRESULT ISpeechMMSysAudio_Read(ISpeechMMSysAudio* This,VARIANT *Buffer,LONG NumberOfBytes,LONG *BytesRead) {
    return This->lpVtbl->Read(This,Buffer,NumberOfBytes,BytesRead);
}
static inline HRESULT ISpeechMMSysAudio_Write(ISpeechMMSysAudio* This,VARIANT Buffer,LONG *BytesWritten) {
    return This->lpVtbl->Write(This,Buffer,BytesWritten);
}
static inline HRESULT ISpeechMMSysAudio_Seek(ISpeechMMSysAudio* This,VARIANT Position,SpeechStreamSeekPositionType Origin,VARIANT *NewPosition) {
    return This->lpVtbl->Seek(This,Position,Origin,NewPosition);
}
/*** ISpeechAudio methods ***/
static inline HRESULT ISpeechMMSysAudio_get_Status(ISpeechMMSysAudio* This,ISpeechAudioStatus **Status) {
    return This->lpVtbl->get_Status(This,Status);
}
static inline HRESULT ISpeechMMSysAudio_get_BufferInfo(ISpeechMMSysAudio* This,ISpeechAudioBufferInfo **BufferInfo) {
    return This->lpVtbl->get_BufferInfo(This,BufferInfo);
}
static inline HRESULT ISpeechMMSysAudio_get_DefaultFormat(ISpeechMMSysAudio* This,ISpeechAudioFormat **StreamFormat) {
    return This->lpVtbl->get_DefaultFormat(This,StreamFormat);
}
static inline HRESULT ISpeechMMSysAudio_get_Volume(ISpeechMMSysAudio* This,LONG *Volume) {
    return This->lpVtbl->get_Volume(This,Volume);
}
static inline HRESULT ISpeechMMSysAudio_put_Volume(ISpeechMMSysAudio* This,LONG Volume) {
    return This->lpVtbl->put_Volume(This,Volume);
}
static inline HRESULT ISpeechMMSysAudio_get_BufferNotifySize(ISpeechMMSysAudio* This,LONG *BufferNotifySize) {
    return This->lpVtbl->get_BufferNotifySize(This,BufferNotifySize);
}
static inline HRESULT ISpeechMMSysAudio_put_BufferNotifySize(ISpeechMMSysAudio* This,LONG BufferNotifySize) {
    return This->lpVtbl->put_BufferNotifySize(This,BufferNotifySize);
}
static inline HRESULT ISpeechMMSysAudio_get_EventHandle(ISpeechMMSysAudio* This,LONG *EventHandle) {
    return This->lpVtbl->get_EventHandle(This,EventHandle);
}
static inline HRESULT ISpeechMMSysAudio_SetState(ISpeechMMSysAudio* This,SpeechAudioState State) {
    return This->lpVtbl->SetState(This,State);
}
/*** ISpeechMMSysAudio methods ***/
static inline HRESULT ISpeechMMSysAudio_get_DeviceId(ISpeechMMSysAudio* This,LONG *DeviceId) {
    return This->lpVtbl->get_DeviceId(This,DeviceId);
}
static inline HRESULT ISpeechMMSysAudio_put_DeviceId(ISpeechMMSysAudio* This,LONG DeviceId) {
    return This->lpVtbl->put_DeviceId(This,DeviceId);
}
static inline HRESULT ISpeechMMSysAudio_get_LineId(ISpeechMMSysAudio* This,LONG *LineId) {
    return This->lpVtbl->get_LineId(This,LineId);
}
static inline HRESULT ISpeechMMSysAudio_put_LineId(ISpeechMMSysAudio* This,LONG LineId) {
    return This->lpVtbl->put_LineId(This,LineId);
}
static inline HRESULT ISpeechMMSysAudio_get_MMHandle(ISpeechMMSysAudio* This,LONG *Handle) {
    return This->lpVtbl->get_MMHandle(This,Handle);
}
#endif
#endif

#endif


#endif  /* __ISpeechMMSysAudio_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 FileMode = SSFMOpenForRead,
        VARIANT_BOOL DoEvents = 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 **AudioFormat);

    HRESULT (STDMETHODCALLTYPE *putref_Format)(
        ISpeechFileStream *This,
        ISpeechAudioFormat *AudioFormat);

    HRESULT (STDMETHODCALLTYPE *Read)(
        ISpeechFileStream *This,
        VARIANT *Buffer,
        LONG NumberOfBytes,
        LONG *BytesRead);

    HRESULT (STDMETHODCALLTYPE *Write)(
        ISpeechFileStream *This,
        VARIANT Buffer,
        LONG *BytesWritten);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        ISpeechFileStream *This,
        VARIANT Position,
        SpeechStreamSeekPositionType Origin,
        VARIANT *NewPosition);

    /*** ISpeechFileStream methods ***/
    HRESULT (STDMETHODCALLTYPE *Open)(
        ISpeechFileStream *This,
        BSTR FileName,
        SpeechStreamFileMode FileMode,
        VARIANT_BOOL DoEvents);

    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,AudioFormat) (This)->lpVtbl->get_Format(This,AudioFormat)
#define ISpeechFileStream_putref_Format(This,AudioFormat) (This)->lpVtbl->putref_Format(This,AudioFormat)
#define ISpeechFileStream_Read(This,Buffer,NumberOfBytes,BytesRead) (This)->lpVtbl->Read(This,Buffer,NumberOfBytes,BytesRead)
#define ISpeechFileStream_Write(This,Buffer,BytesWritten) (This)->lpVtbl->Write(This,Buffer,BytesWritten)
#define ISpeechFileStream_Seek(This,Position,Origin,NewPosition) (This)->lpVtbl->Seek(This,Position,Origin,NewPosition)
/*** ISpeechFileStream methods ***/
#define ISpeechFileStream_Open(This,FileName,FileMode,DoEvents) (This)->lpVtbl->Open(This,FileName,FileMode,DoEvents)
#define ISpeechFileStream_Close(This) (This)->lpVtbl->Close(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechFileStream_QueryInterface(ISpeechFileStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechFileStream_AddRef(ISpeechFileStream* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechFileStream_Release(ISpeechFileStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechFileStream_GetTypeInfoCount(ISpeechFileStream* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechFileStream_GetTypeInfo(ISpeechFileStream* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechFileStream_get_Format(ISpeechFileStream* This,ISpeechAudioFormat **AudioFormat) {
    return This->lpVtbl->get_Format(This,AudioFormat);
}
static inline HRESULT ISpeechFileStream_putref_Format(ISpeechFileStream* This,ISpeechAudioFormat *AudioFormat) {
    return This->lpVtbl->putref_Format(This,AudioFormat);
}
static inline HRESULT ISpeechFileStream_Read(ISpeechFileStream* This,VARIANT *Buffer,LONG NumberOfBytes,LONG *BytesRead) {
    return This->lpVtbl->Read(This,Buffer,NumberOfBytes,BytesRead);
}
static inline HRESULT ISpeechFileStream_Write(ISpeechFileStream* This,VARIANT Buffer,LONG *BytesWritten) {
    return This->lpVtbl->Write(This,Buffer,BytesWritten);
}
static inline HRESULT ISpeechFileStream_Seek(ISpeechFileStream* This,VARIANT Position,SpeechStreamSeekPositionType Origin,VARIANT *NewPosition) {
    return This->lpVtbl->Seek(This,Position,Origin,NewPosition);
}
/*** ISpeechFileStream methods ***/
static inline HRESULT ISpeechFileStream_Open(ISpeechFileStream* This,BSTR FileName,SpeechStreamFileMode FileMode,VARIANT_BOOL DoEvents) {
    return This->lpVtbl->Open(This,FileName,FileMode,DoEvents);
}
static inline HRESULT ISpeechFileStream_Close(ISpeechFileStream* This) {
    return This->lpVtbl->Close(This);
}
#endif
#endif

#endif


#endif  /* __ISpeechFileStream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechCustomStream interface
 */
#ifndef __ISpeechCustomStream_INTERFACE_DEFINED__
#define __ISpeechCustomStream_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechCustomStream, 0x1a9e9f4f, 0x104f, 0x4db8, 0xa1,0x15, 0xef,0xd7,0xfd,0x0c,0x97,0xae);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1a9e9f4f-104f-4db8-a115-efd7fd0c97ae")
ISpeechCustomStream : public ISpeechBaseStream
{
    virtual HRESULT STDMETHODCALLTYPE get_BaseStream(
        IUnknown **ppUnkStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_BaseStream(
        IUnknown *pUnkStream) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechCustomStream, 0x1a9e9f4f, 0x104f, 0x4db8, 0xa1,0x15, 0xef,0xd7,0xfd,0x0c,0x97,0xae)
#endif
#else
typedef struct ISpeechCustomStreamVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *putref_Format)(
        ISpeechCustomStream *This,
        ISpeechAudioFormat *AudioFormat);

    HRESULT (STDMETHODCALLTYPE *Read)(
        ISpeechCustomStream *This,
        VARIANT *Buffer,
        LONG NumberOfBytes,
        LONG *BytesRead);

    HRESULT (STDMETHODCALLTYPE *Write)(
        ISpeechCustomStream *This,
        VARIANT Buffer,
        LONG *BytesWritten);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        ISpeechCustomStream *This,
        VARIANT Position,
        SpeechStreamSeekPositionType Origin,
        VARIANT *NewPosition);

    /*** ISpeechCustomStream methods ***/
    HRESULT (STDMETHODCALLTYPE *get_BaseStream)(
        ISpeechCustomStream *This,
        IUnknown **ppUnkStream);

    HRESULT (STDMETHODCALLTYPE *putref_BaseStream)(
        ISpeechCustomStream *This,
        IUnknown *pUnkStream);

    END_INTERFACE
} ISpeechCustomStreamVtbl;

interface ISpeechCustomStream {
    CONST_VTBL ISpeechCustomStreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechCustomStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechCustomStream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechCustomStream_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechCustomStream_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechCustomStream_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechCustomStream_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechCustomStream_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 ISpeechCustomStream_get_Format(This,AudioFormat) (This)->lpVtbl->get_Format(This,AudioFormat)
#define ISpeechCustomStream_putref_Format(This,AudioFormat) (This)->lpVtbl->putref_Format(This,AudioFormat)
#define ISpeechCustomStream_Read(This,Buffer,NumberOfBytes,BytesRead) (This)->lpVtbl->Read(This,Buffer,NumberOfBytes,BytesRead)
#define ISpeechCustomStream_Write(This,Buffer,BytesWritten) (This)->lpVtbl->Write(This,Buffer,BytesWritten)
#define ISpeechCustomStream_Seek(This,Position,Origin,NewPosition) (This)->lpVtbl->Seek(This,Position,Origin,NewPosition)
/*** ISpeechCustomStream methods ***/
#define ISpeechCustomStream_get_BaseStream(This,ppUnkStream) (This)->lpVtbl->get_BaseStream(This,ppUnkStream)
#define ISpeechCustomStream_putref_BaseStream(This,pUnkStream) (This)->lpVtbl->putref_BaseStream(This,pUnkStream)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechCustomStream_QueryInterface(ISpeechCustomStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechCustomStream_AddRef(ISpeechCustomStream* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechCustomStream_Release(ISpeechCustomStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechCustomStream_GetTypeInfoCount(ISpeechCustomStream* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechCustomStream_GetTypeInfo(ISpeechCustomStream* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ISpeechCustomStream_GetIDsOfNames(ISpeechCustomStream* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ISpeechCustomStream_Invoke(ISpeechCustomStream* 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 inline HRESULT ISpeechCustomStream_get_Format(ISpeechCustomStream* This,ISpeechAudioFormat **AudioFormat) {
    return This->lpVtbl->get_Format(This,AudioFormat);
}
static inline HRESULT ISpeechCustomStream_putref_Format(ISpeechCustomStream* This,ISpeechAudioFormat *AudioFormat) {
    return This->lpVtbl->putref_Format(This,AudioFormat);
}
static inline HRESULT ISpeechCustomStream_Read(ISpeechCustomStream* This,VARIANT *Buffer,LONG NumberOfBytes,LONG *BytesRead) {
    return This->lpVtbl->Read(This,Buffer,NumberOfBytes,BytesRead);
}
static inline HRESULT ISpeechCustomStream_Write(ISpeechCustomStream* This,VARIANT Buffer,LONG *BytesWritten) {
    return This->lpVtbl->Write(This,Buffer,BytesWritten);
}
static inline HRESULT ISpeechCustomStream_Seek(ISpeechCustomStream* This,VARIANT Position,SpeechStreamSeekPositionType Origin,VARIANT *NewPosition) {
    return This->lpVtbl->Seek(This,Position,Origin,NewPosition);
}
/*** ISpeechCustomStream methods ***/
static inline HRESULT ISpeechCustomStream_get_BaseStream(ISpeechCustomStream* This,IUnknown **ppUnkStream) {
    return This->lpVtbl->get_BaseStream(This,ppUnkStream);
}
static inline HRESULT ISpeechCustomStream_putref_BaseStream(ISpeechCustomStream* This,IUnknown *pUnkStream) {
    return This->lpVtbl->putref_BaseStream(This,pUnkStream);
}
#endif
#endif

#endif


#endif  /* __ISpeechCustomStream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *pData) = 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 **AudioFormat);

    HRESULT (STDMETHODCALLTYPE *putref_Format)(
        ISpeechMemoryStream *This,
        ISpeechAudioFormat *AudioFormat);

    HRESULT (STDMETHODCALLTYPE *Read)(
        ISpeechMemoryStream *This,
        VARIANT *Buffer,
        LONG NumberOfBytes,
        LONG *BytesRead);

    HRESULT (STDMETHODCALLTYPE *Write)(
        ISpeechMemoryStream *This,
        VARIANT Buffer,
        LONG *BytesWritten);

    HRESULT (STDMETHODCALLTYPE *Seek)(
        ISpeechMemoryStream *This,
        VARIANT Position,
        SpeechStreamSeekPositionType Origin,
        VARIANT *NewPosition);

    /*** ISpeechMemoryStream methods ***/
    HRESULT (STDMETHODCALLTYPE *SetData)(
        ISpeechMemoryStream *This,
        VARIANT Data);

    HRESULT (STDMETHODCALLTYPE *GetData)(
        ISpeechMemoryStream *This,
        VARIANT *pData);

    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,AudioFormat) (This)->lpVtbl->get_Format(This,AudioFormat)
#define ISpeechMemoryStream_putref_Format(This,AudioFormat) (This)->lpVtbl->putref_Format(This,AudioFormat)
#define ISpeechMemoryStream_Read(This,Buffer,NumberOfBytes,BytesRead) (This)->lpVtbl->Read(This,Buffer,NumberOfBytes,BytesRead)
#define ISpeechMemoryStream_Write(This,Buffer,BytesWritten) (This)->lpVtbl->Write(This,Buffer,BytesWritten)
#define ISpeechMemoryStream_Seek(This,Position,Origin,NewPosition) (This)->lpVtbl->Seek(This,Position,Origin,NewPosition)
/*** ISpeechMemoryStream methods ***/
#define ISpeechMemoryStream_SetData(This,Data) (This)->lpVtbl->SetData(This,Data)
#define ISpeechMemoryStream_GetData(This,pData) (This)->lpVtbl->GetData(This,pData)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechMemoryStream_QueryInterface(ISpeechMemoryStream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechMemoryStream_AddRef(ISpeechMemoryStream* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechMemoryStream_Release(ISpeechMemoryStream* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechMemoryStream_GetTypeInfoCount(ISpeechMemoryStream* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechMemoryStream_GetTypeInfo(ISpeechMemoryStream* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechMemoryStream_get_Format(ISpeechMemoryStream* This,ISpeechAudioFormat **AudioFormat) {
    return This->lpVtbl->get_Format(This,AudioFormat);
}
static inline HRESULT ISpeechMemoryStream_putref_Format(ISpeechMemoryStream* This,ISpeechAudioFormat *AudioFormat) {
    return This->lpVtbl->putref_Format(This,AudioFormat);
}
static inline HRESULT ISpeechMemoryStream_Read(ISpeechMemoryStream* This,VARIANT *Buffer,LONG NumberOfBytes,LONG *BytesRead) {
    return This->lpVtbl->Read(This,Buffer,NumberOfBytes,BytesRead);
}
static inline HRESULT ISpeechMemoryStream_Write(ISpeechMemoryStream* This,VARIANT Buffer,LONG *BytesWritten) {
    return This->lpVtbl->Write(This,Buffer,BytesWritten);
}
static inline HRESULT ISpeechMemoryStream_Seek(ISpeechMemoryStream* This,VARIANT Position,SpeechStreamSeekPositionType Origin,VARIANT *NewPosition) {
    return This->lpVtbl->Seek(This,Position,Origin,NewPosition);
}
/*** ISpeechMemoryStream methods ***/
static inline HRESULT ISpeechMemoryStream_SetData(ISpeechMemoryStream* This,VARIANT Data) {
    return This->lpVtbl->SetData(This,Data);
}
static inline HRESULT ISpeechMemoryStream_GetData(ISpeechMemoryStream* This,VARIANT *pData) {
    return This->lpVtbl->GetData(This,pData);
}
#endif
#endif

#endif


#endif  /* __ISpeechMemoryStream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *FreeBufferSpace) = 0;

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

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

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

    virtual HRESULT STDMETHODCALLTYPE get_CurrentDevicePosition(
        VARIANT *CurrentDevicePosition) = 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 *FreeBufferSpace);

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

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

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

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

    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,FreeBufferSpace) (This)->lpVtbl->get_FreeBufferSpace(This,FreeBufferSpace)
#define ISpeechAudioStatus_get_NonBlockingIO(This,NonBlockingIO) (This)->lpVtbl->get_NonBlockingIO(This,NonBlockingIO)
#define ISpeechAudioStatus_get_State(This,State) (This)->lpVtbl->get_State(This,State)
#define ISpeechAudioStatus_get_CurrentSeekPosition(This,CurrentSeekPosition) (This)->lpVtbl->get_CurrentSeekPosition(This,CurrentSeekPosition)
#define ISpeechAudioStatus_get_CurrentDevicePosition(This,CurrentDevicePosition) (This)->lpVtbl->get_CurrentDevicePosition(This,CurrentDevicePosition)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechAudioStatus_QueryInterface(ISpeechAudioStatus* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechAudioStatus_AddRef(ISpeechAudioStatus* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechAudioStatus_Release(ISpeechAudioStatus* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechAudioStatus_GetTypeInfoCount(ISpeechAudioStatus* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechAudioStatus_GetTypeInfo(ISpeechAudioStatus* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechAudioStatus_get_FreeBufferSpace(ISpeechAudioStatus* This,LONG *FreeBufferSpace) {
    return This->lpVtbl->get_FreeBufferSpace(This,FreeBufferSpace);
}
static inline HRESULT ISpeechAudioStatus_get_NonBlockingIO(ISpeechAudioStatus* This,LONG *NonBlockingIO) {
    return This->lpVtbl->get_NonBlockingIO(This,NonBlockingIO);
}
static inline HRESULT ISpeechAudioStatus_get_State(ISpeechAudioStatus* This,SpeechAudioState *State) {
    return This->lpVtbl->get_State(This,State);
}
static inline HRESULT ISpeechAudioStatus_get_CurrentSeekPosition(ISpeechAudioStatus* This,VARIANT *CurrentSeekPosition) {
    return This->lpVtbl->get_CurrentSeekPosition(This,CurrentSeekPosition);
}
static inline HRESULT ISpeechAudioStatus_get_CurrentDevicePosition(ISpeechAudioStatus* This,VARIANT *CurrentDevicePosition) {
    return This->lpVtbl->get_CurrentDevicePosition(This,CurrentDevicePosition);
}
#endif
#endif

#endif


#endif  /* __ISpeechAudioStatus_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechAudioBufferInfo interface
 */
#ifndef __ISpeechAudioBufferInfo_INTERFACE_DEFINED__
#define __ISpeechAudioBufferInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechAudioBufferInfo, 0x11b103d8, 0x1142, 0x4edf, 0xa0,0x93, 0x82,0xfb,0x39,0x15,0xf8,0xcc);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("11b103d8-1142-4edf-a093-82fb3915f8cc")
ISpeechAudioBufferInfo : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_MinNotification(
        LONG *MinNotification) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_MinNotification(
        LONG MinNotification) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_BufferSize(
        LONG *BufferSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_BufferSize(
        LONG BufferSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EventBias(
        LONG *EventBias) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_EventBias(
        LONG EventBias) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechAudioBufferInfo, 0x11b103d8, 0x1142, 0x4edf, 0xa0,0x93, 0x82,0xfb,0x39,0x15,0xf8,0xcc)
#endif
#else
typedef struct ISpeechAudioBufferInfoVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    /*** ISpeechAudioBufferInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *get_MinNotification)(
        ISpeechAudioBufferInfo *This,
        LONG *MinNotification);

    HRESULT (STDMETHODCALLTYPE *put_MinNotification)(
        ISpeechAudioBufferInfo *This,
        LONG MinNotification);

    HRESULT (STDMETHODCALLTYPE *get_BufferSize)(
        ISpeechAudioBufferInfo *This,
        LONG *BufferSize);

    HRESULT (STDMETHODCALLTYPE *put_BufferSize)(
        ISpeechAudioBufferInfo *This,
        LONG BufferSize);

    HRESULT (STDMETHODCALLTYPE *get_EventBias)(
        ISpeechAudioBufferInfo *This,
        LONG *EventBias);

    HRESULT (STDMETHODCALLTYPE *put_EventBias)(
        ISpeechAudioBufferInfo *This,
        LONG EventBias);

    END_INTERFACE
} ISpeechAudioBufferInfoVtbl;

interface ISpeechAudioBufferInfo {
    CONST_VTBL ISpeechAudioBufferInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechAudioBufferInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechAudioBufferInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechAudioBufferInfo_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechAudioBufferInfo_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechAudioBufferInfo_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechAudioBufferInfo_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechAudioBufferInfo_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechAudioBufferInfo methods ***/
#define ISpeechAudioBufferInfo_get_MinNotification(This,MinNotification) (This)->lpVtbl->get_MinNotification(This,MinNotification)
#define ISpeechAudioBufferInfo_put_MinNotification(This,MinNotification) (This)->lpVtbl->put_MinNotification(This,MinNotification)
#define ISpeechAudioBufferInfo_get_BufferSize(This,BufferSize) (This)->lpVtbl->get_BufferSize(This,BufferSize)
#define ISpeechAudioBufferInfo_put_BufferSize(This,BufferSize) (This)->lpVtbl->put_BufferSize(This,BufferSize)
#define ISpeechAudioBufferInfo_get_EventBias(This,EventBias) (This)->lpVtbl->get_EventBias(This,EventBias)
#define ISpeechAudioBufferInfo_put_EventBias(This,EventBias) (This)->lpVtbl->put_EventBias(This,EventBias)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechAudioBufferInfo_QueryInterface(ISpeechAudioBufferInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechAudioBufferInfo_AddRef(ISpeechAudioBufferInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechAudioBufferInfo_Release(ISpeechAudioBufferInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechAudioBufferInfo_GetTypeInfoCount(ISpeechAudioBufferInfo* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechAudioBufferInfo_GetTypeInfo(ISpeechAudioBufferInfo* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ISpeechAudioBufferInfo_GetIDsOfNames(ISpeechAudioBufferInfo* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ISpeechAudioBufferInfo_Invoke(ISpeechAudioBufferInfo* 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);
}
/*** ISpeechAudioBufferInfo methods ***/
static inline HRESULT ISpeechAudioBufferInfo_get_MinNotification(ISpeechAudioBufferInfo* This,LONG *MinNotification) {
    return This->lpVtbl->get_MinNotification(This,MinNotification);
}
static inline HRESULT ISpeechAudioBufferInfo_put_MinNotification(ISpeechAudioBufferInfo* This,LONG MinNotification) {
    return This->lpVtbl->put_MinNotification(This,MinNotification);
}
static inline HRESULT ISpeechAudioBufferInfo_get_BufferSize(ISpeechAudioBufferInfo* This,LONG *BufferSize) {
    return This->lpVtbl->get_BufferSize(This,BufferSize);
}
static inline HRESULT ISpeechAudioBufferInfo_put_BufferSize(ISpeechAudioBufferInfo* This,LONG BufferSize) {
    return This->lpVtbl->put_BufferSize(This,BufferSize);
}
static inline HRESULT ISpeechAudioBufferInfo_get_EventBias(ISpeechAudioBufferInfo* This,LONG *EventBias) {
    return This->lpVtbl->get_EventBias(This,EventBias);
}
static inline HRESULT ISpeechAudioBufferInfo_put_EventBias(ISpeechAudioBufferInfo* This,LONG EventBias) {
    return This->lpVtbl->put_EventBias(This,EventBias);
}
#endif
#endif

#endif


#endif  /* __ISpeechAudioBufferInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *FormatTag) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_FormatTag(
        short FormatTag) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE put_Channels(
        short Channels) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE put_SamplesPerSec(
        LONG SamplesPerSec) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE put_AvgBytesPerSec(
        LONG AvgBytesPerSec) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE put_BlockAlign(
        short BlockAlign) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE put_BitsPerSample(
        short BitsPerSample) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE put_ExtraData(
        VARIANT ExtraData) = 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 *FormatTag);

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

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

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

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

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

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

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

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

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

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

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

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

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

    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,FormatTag) (This)->lpVtbl->get_FormatTag(This,FormatTag)
#define ISpeechWaveFormatEx_put_FormatTag(This,FormatTag) (This)->lpVtbl->put_FormatTag(This,FormatTag)
#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,SamplesPerSec) (This)->lpVtbl->get_SamplesPerSec(This,SamplesPerSec)
#define ISpeechWaveFormatEx_put_SamplesPerSec(This,SamplesPerSec) (This)->lpVtbl->put_SamplesPerSec(This,SamplesPerSec)
#define ISpeechWaveFormatEx_get_AvgBytesPerSec(This,AvgBytesPerSec) (This)->lpVtbl->get_AvgBytesPerSec(This,AvgBytesPerSec)
#define ISpeechWaveFormatEx_put_AvgBytesPerSec(This,AvgBytesPerSec) (This)->lpVtbl->put_AvgBytesPerSec(This,AvgBytesPerSec)
#define ISpeechWaveFormatEx_get_BlockAlign(This,BlockAlign) (This)->lpVtbl->get_BlockAlign(This,BlockAlign)
#define ISpeechWaveFormatEx_put_BlockAlign(This,BlockAlign) (This)->lpVtbl->put_BlockAlign(This,BlockAlign)
#define ISpeechWaveFormatEx_get_BitsPerSample(This,BitsPerSample) (This)->lpVtbl->get_BitsPerSample(This,BitsPerSample)
#define ISpeechWaveFormatEx_put_BitsPerSample(This,BitsPerSample) (This)->lpVtbl->put_BitsPerSample(This,BitsPerSample)
#define ISpeechWaveFormatEx_get_ExtraData(This,ExtraData) (This)->lpVtbl->get_ExtraData(This,ExtraData)
#define ISpeechWaveFormatEx_put_ExtraData(This,ExtraData) (This)->lpVtbl->put_ExtraData(This,ExtraData)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechWaveFormatEx_QueryInterface(ISpeechWaveFormatEx* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechWaveFormatEx_AddRef(ISpeechWaveFormatEx* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechWaveFormatEx_Release(ISpeechWaveFormatEx* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechWaveFormatEx_GetTypeInfoCount(ISpeechWaveFormatEx* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechWaveFormatEx_GetTypeInfo(ISpeechWaveFormatEx* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechWaveFormatEx_get_FormatTag(ISpeechWaveFormatEx* This,short *FormatTag) {
    return This->lpVtbl->get_FormatTag(This,FormatTag);
}
static inline HRESULT ISpeechWaveFormatEx_put_FormatTag(ISpeechWaveFormatEx* This,short FormatTag) {
    return This->lpVtbl->put_FormatTag(This,FormatTag);
}
static inline HRESULT ISpeechWaveFormatEx_get_Channels(ISpeechWaveFormatEx* This,short *Channels) {
    return This->lpVtbl->get_Channels(This,Channels);
}
static inline HRESULT ISpeechWaveFormatEx_put_Channels(ISpeechWaveFormatEx* This,short Channels) {
    return This->lpVtbl->put_Channels(This,Channels);
}
static inline HRESULT ISpeechWaveFormatEx_get_SamplesPerSec(ISpeechWaveFormatEx* This,LONG *SamplesPerSec) {
    return This->lpVtbl->get_SamplesPerSec(This,SamplesPerSec);
}
static inline HRESULT ISpeechWaveFormatEx_put_SamplesPerSec(ISpeechWaveFormatEx* This,LONG SamplesPerSec) {
    return This->lpVtbl->put_SamplesPerSec(This,SamplesPerSec);
}
static inline HRESULT ISpeechWaveFormatEx_get_AvgBytesPerSec(ISpeechWaveFormatEx* This,LONG *AvgBytesPerSec) {
    return This->lpVtbl->get_AvgBytesPerSec(This,AvgBytesPerSec);
}
static inline HRESULT ISpeechWaveFormatEx_put_AvgBytesPerSec(ISpeechWaveFormatEx* This,LONG AvgBytesPerSec) {
    return This->lpVtbl->put_AvgBytesPerSec(This,AvgBytesPerSec);
}
static inline HRESULT ISpeechWaveFormatEx_get_BlockAlign(ISpeechWaveFormatEx* This,short *BlockAlign) {
    return This->lpVtbl->get_BlockAlign(This,BlockAlign);
}
static inline HRESULT ISpeechWaveFormatEx_put_BlockAlign(ISpeechWaveFormatEx* This,short BlockAlign) {
    return This->lpVtbl->put_BlockAlign(This,BlockAlign);
}
static inline HRESULT ISpeechWaveFormatEx_get_BitsPerSample(ISpeechWaveFormatEx* This,short *BitsPerSample) {
    return This->lpVtbl->get_BitsPerSample(This,BitsPerSample);
}
static inline HRESULT ISpeechWaveFormatEx_put_BitsPerSample(ISpeechWaveFormatEx* This,short BitsPerSample) {
    return This->lpVtbl->put_BitsPerSample(This,BitsPerSample);
}
static inline HRESULT ISpeechWaveFormatEx_get_ExtraData(ISpeechWaveFormatEx* This,VARIANT *ExtraData) {
    return This->lpVtbl->get_ExtraData(This,ExtraData);
}
static inline HRESULT ISpeechWaveFormatEx_put_ExtraData(ISpeechWaveFormatEx* This,VARIANT ExtraData) {
    return This->lpVtbl->put_ExtraData(This,ExtraData);
}
#endif
#endif

#endif


#endif  /* __ISpeechWaveFormatEx_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 **AudioOutput) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_AudioOutput(
        ISpeechObjectToken *AudioOutput) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioOutputStream(
        ISpeechBaseStream **AudioOutputStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_AudioOutputStream(
        ISpeechBaseStream *AudioOutputStream) = 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 *EventInterestFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_EventInterests(
        SpeechVoiceEvents EventInterestFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Priority(
        SpeechVoicePriority Priority) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Priority(
        SpeechVoicePriority *Priority) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_AlertBoundary(
        SpeechVoiceEvents Boundary) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AlertBoundary(
        SpeechVoiceEvents *Boundary) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_SynchronousSpeakTimeout(
        LONG msTimeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_SynchronousSpeakTimeout(
        LONG *msTimeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE Speak(
        BSTR Text,
        SpeechVoiceSpeakFlags Flags,
        LONG *StreamNumber) = 0;

    virtual HRESULT STDMETHODCALLTYPE SpeakStream(
        ISpeechBaseStream *Stream,
        SpeechVoiceSpeakFlags Flags,
        LONG *StreamNumber) = 0;

    virtual HRESULT STDMETHODCALLTYPE Pause(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resume(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        const BSTR Type,
        LONG NumItems,
        LONG *NumSkipped) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetVoices(
        BSTR RequiredAttributes,
        BSTR OptionalAttributes,
        ISpeechObjectTokens **ObjectTokens) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAudioOutputs(
        BSTR RequiredAttributes,
        BSTR OptionalAttributes,
        ISpeechObjectTokens **ObjectTokens) = 0;

    virtual HRESULT STDMETHODCALLTYPE WaitUntilDone(
        LONG msTimeout,
        VARIANT_BOOL *Done) = 0;

    virtual HRESULT STDMETHODCALLTYPE SpeakCompleteEvent(
        LONG *Handle) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsUISupported(
        const BSTR TypeOfUI,
        const VARIANT *ExtraData,
        VARIANT_BOOL *Supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisplayUI(
        LONG hWndParent,
        BSTR Title,
        const BSTR TypeOfUI,
        const VARIANT *ExtraData = 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 **AudioOutput);

    HRESULT (STDMETHODCALLTYPE *putref_AudioOutput)(
        ISpeechVoice *This,
        ISpeechObjectToken *AudioOutput);

    HRESULT (STDMETHODCALLTYPE *get_AudioOutputStream)(
        ISpeechVoice *This,
        ISpeechBaseStream **AudioOutputStream);

    HRESULT (STDMETHODCALLTYPE *putref_AudioOutputStream)(
        ISpeechVoice *This,
        ISpeechBaseStream *AudioOutputStream);

    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 *EventInterestFlags);

    HRESULT (STDMETHODCALLTYPE *put_EventInterests)(
        ISpeechVoice *This,
        SpeechVoiceEvents EventInterestFlags);

    HRESULT (STDMETHODCALLTYPE *put_Priority)(
        ISpeechVoice *This,
        SpeechVoicePriority Priority);

    HRESULT (STDMETHODCALLTYPE *get_Priority)(
        ISpeechVoice *This,
        SpeechVoicePriority *Priority);

    HRESULT (STDMETHODCALLTYPE *put_AlertBoundary)(
        ISpeechVoice *This,
        SpeechVoiceEvents Boundary);

    HRESULT (STDMETHODCALLTYPE *get_AlertBoundary)(
        ISpeechVoice *This,
        SpeechVoiceEvents *Boundary);

    HRESULT (STDMETHODCALLTYPE *put_SynchronousSpeakTimeout)(
        ISpeechVoice *This,
        LONG msTimeout);

    HRESULT (STDMETHODCALLTYPE *get_SynchronousSpeakTimeout)(
        ISpeechVoice *This,
        LONG *msTimeout);

    HRESULT (STDMETHODCALLTYPE *Speak)(
        ISpeechVoice *This,
        BSTR Text,
        SpeechVoiceSpeakFlags Flags,
        LONG *StreamNumber);

    HRESULT (STDMETHODCALLTYPE *SpeakStream)(
        ISpeechVoice *This,
        ISpeechBaseStream *Stream,
        SpeechVoiceSpeakFlags Flags,
        LONG *StreamNumber);

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

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

    HRESULT (STDMETHODCALLTYPE *Skip)(
        ISpeechVoice *This,
        const BSTR Type,
        LONG NumItems,
        LONG *NumSkipped);

    HRESULT (STDMETHODCALLTYPE *GetVoices)(
        ISpeechVoice *This,
        BSTR RequiredAttributes,
        BSTR OptionalAttributes,
        ISpeechObjectTokens **ObjectTokens);

    HRESULT (STDMETHODCALLTYPE *GetAudioOutputs)(
        ISpeechVoice *This,
        BSTR RequiredAttributes,
        BSTR OptionalAttributes,
        ISpeechObjectTokens **ObjectTokens);

    HRESULT (STDMETHODCALLTYPE *WaitUntilDone)(
        ISpeechVoice *This,
        LONG msTimeout,
        VARIANT_BOOL *Done);

    HRESULT (STDMETHODCALLTYPE *SpeakCompleteEvent)(
        ISpeechVoice *This,
        LONG *Handle);

    HRESULT (STDMETHODCALLTYPE *IsUISupported)(
        ISpeechVoice *This,
        const BSTR TypeOfUI,
        const VARIANT *ExtraData,
        VARIANT_BOOL *Supported);

    HRESULT (STDMETHODCALLTYPE *DisplayUI)(
        ISpeechVoice *This,
        LONG hWndParent,
        BSTR Title,
        const BSTR TypeOfUI,
        const VARIANT *ExtraData);

    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,AudioOutput) (This)->lpVtbl->get_AudioOutput(This,AudioOutput)
#define ISpeechVoice_putref_AudioOutput(This,AudioOutput) (This)->lpVtbl->putref_AudioOutput(This,AudioOutput)
#define ISpeechVoice_get_AudioOutputStream(This,AudioOutputStream) (This)->lpVtbl->get_AudioOutputStream(This,AudioOutputStream)
#define ISpeechVoice_putref_AudioOutputStream(This,AudioOutputStream) (This)->lpVtbl->putref_AudioOutputStream(This,AudioOutputStream)
#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,EventInterestFlags) (This)->lpVtbl->get_EventInterests(This,EventInterestFlags)
#define ISpeechVoice_put_EventInterests(This,EventInterestFlags) (This)->lpVtbl->put_EventInterests(This,EventInterestFlags)
#define ISpeechVoice_put_Priority(This,Priority) (This)->lpVtbl->put_Priority(This,Priority)
#define ISpeechVoice_get_Priority(This,Priority) (This)->lpVtbl->get_Priority(This,Priority)
#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,msTimeout) (This)->lpVtbl->put_SynchronousSpeakTimeout(This,msTimeout)
#define ISpeechVoice_get_SynchronousSpeakTimeout(This,msTimeout) (This)->lpVtbl->get_SynchronousSpeakTimeout(This,msTimeout)
#define ISpeechVoice_Speak(This,Text,Flags,StreamNumber) (This)->lpVtbl->Speak(This,Text,Flags,StreamNumber)
#define ISpeechVoice_SpeakStream(This,Stream,Flags,StreamNumber) (This)->lpVtbl->SpeakStream(This,Stream,Flags,StreamNumber)
#define ISpeechVoice_Pause(This) (This)->lpVtbl->Pause(This)
#define ISpeechVoice_Resume(This) (This)->lpVtbl->Resume(This)
#define ISpeechVoice_Skip(This,Type,NumItems,NumSkipped) (This)->lpVtbl->Skip(This,Type,NumItems,NumSkipped)
#define ISpeechVoice_GetVoices(This,RequiredAttributes,OptionalAttributes,ObjectTokens) (This)->lpVtbl->GetVoices(This,RequiredAttributes,OptionalAttributes,ObjectTokens)
#define ISpeechVoice_GetAudioOutputs(This,RequiredAttributes,OptionalAttributes,ObjectTokens) (This)->lpVtbl->GetAudioOutputs(This,RequiredAttributes,OptionalAttributes,ObjectTokens)
#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,TypeOfUI,ExtraData,Supported) (This)->lpVtbl->IsUISupported(This,TypeOfUI,ExtraData,Supported)
#define ISpeechVoice_DisplayUI(This,hWndParent,Title,TypeOfUI,ExtraData) (This)->lpVtbl->DisplayUI(This,hWndParent,Title,TypeOfUI,ExtraData)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechVoice_QueryInterface(ISpeechVoice* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechVoice_AddRef(ISpeechVoice* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechVoice_Release(ISpeechVoice* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechVoice_GetTypeInfoCount(ISpeechVoice* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechVoice_GetTypeInfo(ISpeechVoice* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechVoice_get_Status(ISpeechVoice* This,ISpeechVoiceStatus **Status) {
    return This->lpVtbl->get_Status(This,Status);
}
static inline HRESULT ISpeechVoice_get_Voice(ISpeechVoice* This,ISpeechObjectToken **Voice) {
    return This->lpVtbl->get_Voice(This,Voice);
}
static inline HRESULT ISpeechVoice_putref_Voice(ISpeechVoice* This,ISpeechObjectToken *Voice) {
    return This->lpVtbl->putref_Voice(This,Voice);
}
static inline HRESULT ISpeechVoice_get_AudioOutput(ISpeechVoice* This,ISpeechObjectToken **AudioOutput) {
    return This->lpVtbl->get_AudioOutput(This,AudioOutput);
}
static inline HRESULT ISpeechVoice_putref_AudioOutput(ISpeechVoice* This,ISpeechObjectToken *AudioOutput) {
    return This->lpVtbl->putref_AudioOutput(This,AudioOutput);
}
static inline HRESULT ISpeechVoice_get_AudioOutputStream(ISpeechVoice* This,ISpeechBaseStream **AudioOutputStream) {
    return This->lpVtbl->get_AudioOutputStream(This,AudioOutputStream);
}
static inline HRESULT ISpeechVoice_putref_AudioOutputStream(ISpeechVoice* This,ISpeechBaseStream *AudioOutputStream) {
    return This->lpVtbl->putref_AudioOutputStream(This,AudioOutputStream);
}
static inline HRESULT ISpeechVoice_get_Rate(ISpeechVoice* This,LONG *Rate) {
    return This->lpVtbl->get_Rate(This,Rate);
}
static inline HRESULT ISpeechVoice_put_Rate(ISpeechVoice* This,LONG Rate) {
    return This->lpVtbl->put_Rate(This,Rate);
}
static inline HRESULT ISpeechVoice_get_Volume(ISpeechVoice* This,LONG *Volume) {
    return This->lpVtbl->get_Volume(This,Volume);
}
static inline HRESULT ISpeechVoice_put_Volume(ISpeechVoice* This,LONG Volume) {
    return This->lpVtbl->put_Volume(This,Volume);
}
static inline HRESULT ISpeechVoice_put_AllowAudioOutputFormatChangesOnNextSet(ISpeechVoice* This,VARIANT_BOOL Allow) {
    return This->lpVtbl->put_AllowAudioOutputFormatChangesOnNextSet(This,Allow);
}
static inline HRESULT ISpeechVoice_get_AllowAudioOutputFormatChangesOnNextSet(ISpeechVoice* This,VARIANT_BOOL *Allow) {
    return This->lpVtbl->get_AllowAudioOutputFormatChangesOnNextSet(This,Allow);
}
static inline HRESULT ISpeechVoice_get_EventInterests(ISpeechVoice* This,SpeechVoiceEvents *EventInterestFlags) {
    return This->lpVtbl->get_EventInterests(This,EventInterestFlags);
}
static inline HRESULT ISpeechVoice_put_EventInterests(ISpeechVoice* This,SpeechVoiceEvents EventInterestFlags) {
    return This->lpVtbl->put_EventInterests(This,EventInterestFlags);
}
static inline HRESULT ISpeechVoice_put_Priority(ISpeechVoice* This,SpeechVoicePriority Priority) {
    return This->lpVtbl->put_Priority(This,Priority);
}
static inline HRESULT ISpeechVoice_get_Priority(ISpeechVoice* This,SpeechVoicePriority *Priority) {
    return This->lpVtbl->get_Priority(This,Priority);
}
static inline HRESULT ISpeechVoice_put_AlertBoundary(ISpeechVoice* This,SpeechVoiceEvents Boundary) {
    return This->lpVtbl->put_AlertBoundary(This,Boundary);
}
static inline HRESULT ISpeechVoice_get_AlertBoundary(ISpeechVoice* This,SpeechVoiceEvents *Boundary) {
    return This->lpVtbl->get_AlertBoundary(This,Boundary);
}
static inline HRESULT ISpeechVoice_put_SynchronousSpeakTimeout(ISpeechVoice* This,LONG msTimeout) {
    return This->lpVtbl->put_SynchronousSpeakTimeout(This,msTimeout);
}
static inline HRESULT ISpeechVoice_get_SynchronousSpeakTimeout(ISpeechVoice* This,LONG *msTimeout) {
    return This->lpVtbl->get_SynchronousSpeakTimeout(This,msTimeout);
}
static inline HRESULT ISpeechVoice_Speak(ISpeechVoice* This,BSTR Text,SpeechVoiceSpeakFlags Flags,LONG *StreamNumber) {
    return This->lpVtbl->Speak(This,Text,Flags,StreamNumber);
}
static inline HRESULT ISpeechVoice_SpeakStream(ISpeechVoice* This,ISpeechBaseStream *Stream,SpeechVoiceSpeakFlags Flags,LONG *StreamNumber) {
    return This->lpVtbl->SpeakStream(This,Stream,Flags,StreamNumber);
}
static inline HRESULT ISpeechVoice_Pause(ISpeechVoice* This) {
    return This->lpVtbl->Pause(This);
}
static inline HRESULT ISpeechVoice_Resume(ISpeechVoice* This) {
    return This->lpVtbl->Resume(This);
}
static inline HRESULT ISpeechVoice_Skip(ISpeechVoice* This,const BSTR Type,LONG NumItems,LONG *NumSkipped) {
    return This->lpVtbl->Skip(This,Type,NumItems,NumSkipped);
}
static inline HRESULT ISpeechVoice_GetVoices(ISpeechVoice* This,BSTR RequiredAttributes,BSTR OptionalAttributes,ISpeechObjectTokens **ObjectTokens) {
    return This->lpVtbl->GetVoices(This,RequiredAttributes,OptionalAttributes,ObjectTokens);
}
static inline HRESULT ISpeechVoice_GetAudioOutputs(ISpeechVoice* This,BSTR RequiredAttributes,BSTR OptionalAttributes,ISpeechObjectTokens **ObjectTokens) {
    return This->lpVtbl->GetAudioOutputs(This,RequiredAttributes,OptionalAttributes,ObjectTokens);
}
static inline HRESULT ISpeechVoice_WaitUntilDone(ISpeechVoice* This,LONG msTimeout,VARIANT_BOOL *Done) {
    return This->lpVtbl->WaitUntilDone(This,msTimeout,Done);
}
static inline HRESULT ISpeechVoice_SpeakCompleteEvent(ISpeechVoice* This,LONG *Handle) {
    return This->lpVtbl->SpeakCompleteEvent(This,Handle);
}
static inline HRESULT ISpeechVoice_IsUISupported(ISpeechVoice* This,const BSTR TypeOfUI,const VARIANT *ExtraData,VARIANT_BOOL *Supported) {
    return This->lpVtbl->IsUISupported(This,TypeOfUI,ExtraData,Supported);
}
static inline HRESULT ISpeechVoice_DisplayUI(ISpeechVoice* This,LONG hWndParent,BSTR Title,const BSTR TypeOfUI,const VARIANT *ExtraData) {
    return This->lpVtbl->DisplayUI(This,hWndParent,Title,TypeOfUI,ExtraData);
}
#endif
#endif

#endif


#endif  /* __ISpeechVoice_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *StreamNumber) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE get_LastHResult(
        LONG *HResult) = 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 *BookmarkId) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PhonemeId(
        short *PhoneId) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_VisemeId(
        short *VisemeId) = 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 *StreamNumber);

    HRESULT (STDMETHODCALLTYPE *get_LastStreamNumberQueued)(
        ISpeechVoiceStatus *This,
        LONG *StreamNumber);

    HRESULT (STDMETHODCALLTYPE *get_LastHResult)(
        ISpeechVoiceStatus *This,
        LONG *HResult);

    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 *BookmarkId);

    HRESULT (STDMETHODCALLTYPE *get_PhonemeId)(
        ISpeechVoiceStatus *This,
        short *PhoneId);

    HRESULT (STDMETHODCALLTYPE *get_VisemeId)(
        ISpeechVoiceStatus *This,
        short *VisemeId);

    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,StreamNumber) (This)->lpVtbl->get_CurrentStreamNumber(This,StreamNumber)
#define ISpeechVoiceStatus_get_LastStreamNumberQueued(This,StreamNumber) (This)->lpVtbl->get_LastStreamNumberQueued(This,StreamNumber)
#define ISpeechVoiceStatus_get_LastHResult(This,HResult) (This)->lpVtbl->get_LastHResult(This,HResult)
#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,BookmarkId) (This)->lpVtbl->get_LastBookmarkId(This,BookmarkId)
#define ISpeechVoiceStatus_get_PhonemeId(This,PhoneId) (This)->lpVtbl->get_PhonemeId(This,PhoneId)
#define ISpeechVoiceStatus_get_VisemeId(This,VisemeId) (This)->lpVtbl->get_VisemeId(This,VisemeId)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechVoiceStatus_QueryInterface(ISpeechVoiceStatus* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechVoiceStatus_AddRef(ISpeechVoiceStatus* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechVoiceStatus_Release(ISpeechVoiceStatus* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechVoiceStatus_GetTypeInfoCount(ISpeechVoiceStatus* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechVoiceStatus_GetTypeInfo(ISpeechVoiceStatus* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechVoiceStatus_get_CurrentStreamNumber(ISpeechVoiceStatus* This,LONG *StreamNumber) {
    return This->lpVtbl->get_CurrentStreamNumber(This,StreamNumber);
}
static inline HRESULT ISpeechVoiceStatus_get_LastStreamNumberQueued(ISpeechVoiceStatus* This,LONG *StreamNumber) {
    return This->lpVtbl->get_LastStreamNumberQueued(This,StreamNumber);
}
static inline HRESULT ISpeechVoiceStatus_get_LastHResult(ISpeechVoiceStatus* This,LONG *HResult) {
    return This->lpVtbl->get_LastHResult(This,HResult);
}
static inline HRESULT ISpeechVoiceStatus_get_RunningState(ISpeechVoiceStatus* This,SpeechRunState *State) {
    return This->lpVtbl->get_RunningState(This,State);
}
static inline HRESULT ISpeechVoiceStatus_get_InputWordPosition(ISpeechVoiceStatus* This,LONG *Position) {
    return This->lpVtbl->get_InputWordPosition(This,Position);
}
static inline HRESULT ISpeechVoiceStatus_get_InputWordLength(ISpeechVoiceStatus* This,LONG *Length) {
    return This->lpVtbl->get_InputWordLength(This,Length);
}
static inline HRESULT ISpeechVoiceStatus_get_InputSentencePosition(ISpeechVoiceStatus* This,LONG *Position) {
    return This->lpVtbl->get_InputSentencePosition(This,Position);
}
static inline HRESULT ISpeechVoiceStatus_get_InputSentenceLength(ISpeechVoiceStatus* This,LONG *Length) {
    return This->lpVtbl->get_InputSentenceLength(This,Length);
}
static inline HRESULT ISpeechVoiceStatus_get_LastBookmark(ISpeechVoiceStatus* This,BSTR *Bookmark) {
    return This->lpVtbl->get_LastBookmark(This,Bookmark);
}
static inline HRESULT ISpeechVoiceStatus_get_LastBookmarkId(ISpeechVoiceStatus* This,LONG *BookmarkId) {
    return This->lpVtbl->get_LastBookmarkId(This,BookmarkId);
}
static inline HRESULT ISpeechVoiceStatus_get_PhonemeId(ISpeechVoiceStatus* This,short *PhoneId) {
    return This->lpVtbl->get_PhonemeId(This,PhoneId);
}
static inline HRESULT ISpeechVoiceStatus_get_VisemeId(ISpeechVoiceStatus* This,short *VisemeId) {
    return This->lpVtbl->get_VisemeId(This,VisemeId);
}
#endif
#endif

#endif


#endif  /* __ISpeechVoiceStatus_INTERFACE_DEFINED__ */

typedef enum SpeechVisemeType {
    SVP_0 = 0,
    SVP_1 = 1,
    SVP_2 = 2,
    SVP_3 = 3,
    SVP_4 = 4,
    SVP_5 = 5,
    SVP_6 = 6,
    SVP_7 = 7,
    SVP_8 = 8,
    SVP_9 = 9,
    SVP_10 = 10,
    SVP_11 = 11,
    SVP_12 = 12,
    SVP_13 = 13,
    SVP_14 = 14,
    SVP_15 = 15,
    SVP_16 = 16,
    SVP_17 = 17,
    SVP_18 = 18,
    SVP_19 = 19,
    SVP_20 = 20,
    SVP_21 = 21
} SpeechVisemeType;
typedef enum SpeechVisemeFeature {
    SVF_None = 0,
    SVF_Stressed = SPVFEATURE_STRESSED,
    SVF_Emphasis = SPVFEATURE_EMPHASIS
} SpeechVisemeFeature;
typedef enum DISPID_SpeechVoiceEvent {
    DISPID_SVEStreamStart = 1,
    DISPID_SVEStreamEnd = 2,
    DISPID_SVEVoiceChange = 3,
    DISPID_SVEBookmark = 4,
    DISPID_SVEWord = 5,
    DISPID_SVEPhoneme = 6,
    DISPID_SVESentenceBoundary = 7,
    DISPID_SVEViseme = 8,
    DISPID_SVEAudioLevel = 9,
    DISPID_SVEEnginePrivate = 10
} DISPID_SpeechVoiceEvent;
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;
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 DISPID_SpeechRecognizerStatus {
    DISPID_SRSAudioStatus = 1,
    DISPID_SRSCurrentStreamPosition = 2,
    DISPID_SRSCurrentStreamNumber = 3,
    DISPID_SRSNumberOfActiveRules = 4,
    DISPID_SRSClsidEngine = 5,
    DISPID_SRSSupportedLanguages = 6
} DISPID_SpeechRecognizerStatus;
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 SpeechRetainedAudioOptions {
    SRAONone = SPAO_NONE,
    SRAORetainAudio = SPAO_RETAIN_AUDIO
} SpeechRetainedAudioOptions;
typedef enum SpeechBookmarkOptions {
    SBONone = SPBO_NONE,
    SBOPause = SPBO_PAUSE
} SpeechBookmarkOptions;
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 SpeechRecoEvents {
    SREStreamEnd = 0x1,
    SRESoundStart = 0x2,
    SRESoundEnd = 0x4,
    SREPhraseStart = 0x8,
    SRERecognition = 0x10,
    SREHypothesis = 0x20,
    SREBookmark = 0x40,
    SREPropertyNumChange = 0x80,
    SREPropertyStringChange = 0x100,
    SREFalseRecognition = 0x200,
    SREInterference = 0x400,
    SRERequestUI = 0x800,
    SREStateChange = 0x1000,
    SREAdaptation = 0x2000,
    SREStreamStart = 0x4000,
    SRERecoOtherContext = 0x8000,
    SREAudioLevel = 0x10000,
    SREPrivate = 0x40000,
    SREAllEvents = 0x5ffff
} SpeechRecoEvents;
typedef enum SpeechRecoContextState {
    SRCS_Disabled = SPCS_DISABLED,
    SRCS_Enabled = SPCS_ENABLED
} SpeechRecoContextState;
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 SpeechLoadOption {
    SLOStatic = SPLO_STATIC,
    SLODynamic = SPLO_DYNAMIC
} SpeechLoadOption;
typedef enum SpeechWordPronounceable {
    SWPUnknownWordUnpronounceable = SPWP_UNKNOWN_WORD_UNPRONOUNCEABLE,
    SWPUnknownWordPronounceable = SPWP_UNKNOWN_WORD_PRONOUNCEABLE,
    SWPKnownWordPronounceable = SPWP_KNOWN_WORD_PRONOUNCEABLE
} SpeechWordPronounceable;
typedef enum SpeechGrammarState {
    SGSEnabled = SPGS_ENABLED,
    SGSDisabled = SPGS_DISABLED,
    SGSExclusive = SPGS_EXCLUSIVE
} SpeechGrammarState;
typedef enum SpeechRuleState {
    SGDSInactive = SPRS_INACTIVE,
    SGDSActive = SPRS_ACTIVE,
    SGDSActiveWithAutoPause = SPRS_ACTIVE_WITH_AUTO_PAUSE
} SpeechRuleState;
typedef enum SpeechRuleAttributes {
    SRATopLevel = SPRAF_TopLevel,
    SRADefaultToActive = SPRAF_Active,
    SRAExport = SPRAF_Export,
    SRAImport = SPRAF_Import,
    SRAInterpreter = SPRAF_Interpreter,
    SRADynamic = SPRAF_Dynamic
} SpeechRuleAttributes;
typedef enum SpeechGrammarWordType {
    SGDisplay = SPWT_DISPLAY,
    SGLexical = SPWT_LEXICAL,
    SGPronounciation = SPWT_PRONUNCIATION
} SpeechGrammarWordType;
typedef enum DISPID_SpeechRecoContextEvents {
    DISPID_SRCEStartStream = 1,
    DISPID_SRCEEndStream = 2,
    DISPID_SRCEBookmark = 3,
    DISPID_SRCESoundStart = 4,
    DISPID_SRCESoundEnd = 5,
    DISPID_SRCEPhraseStart = 6,
    DISPID_SRCERecognition = 7,
    DISPID_SRCEHypothesis = 8,
    DISPID_SRCEPropertyNumberChange = 9,
    DISPID_SRCEPropertyStringChange = 10,
    DISPID_SRCEFalseRecognition = 11,
    DISPID_SRCEInterference = 12,
    DISPID_SRCERequestUI = 13,
    DISPID_SRCERecognizerStateChange = 14,
    DISPID_SRCEAdaptation = 15,
    DISPID_SRCERecognitionForOtherContext = 16,
    DISPID_SRCEAudioLevel = 17,
    DISPID_SRCEEnginePrivate = 18
} DISPID_SpeechRecoContextEvents;
typedef enum SpeechRecognitionType {
    SRTStandard = 0,
    SRTAutopause = SPREF_AutoPause,
    SRTEmulated = SPREF_Emulated
} SpeechRecognitionType;
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_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;
typedef enum DISPID_SpeechGrammarRuleState {
    DISPID_SGRSRule = 1,
    DISPID_SGRSTransitions = 2,
    DISPID_SGRSAddWordTransition = 3,
    DISPID_SGRSAddRuleTransition = 4,
    DISPID_SGRSAddSpecialTransition = 5
} DISPID_SpeechGrammarRuleState;
typedef enum SpeechSpecialTransitionType {
    SSTTWildcard = 1,
    SSTTDictation = 2,
    SSTTTextBuffer = 3
} SpeechSpecialTransitionType;
typedef enum DISPID_SpeechGrammarRuleStateTransitions {
    DISPID_SGRSTsCount = 1,
    DISPID_SGRSTsItem = DISPID_VALUE,
    DISPID_SGRSTs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechGrammarRuleStateTransitions;
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;
typedef enum SpeechGrammarRuleStateTransitionType {
    SGRSTTEpsilon = 0,
    SGRSTTWord = 1,
    SGRSTTRule = 2,
    SGRSTTDictation = 3,
    SGRSTTWildcard = 4,
    SGRSTTTextBuffer = 5
} SpeechGrammarRuleStateTransitionType;
typedef enum DISPIDSPTSI {
    DISPIDSPTSI_ActiveOffset = 1,
    DISPIDSPTSI_ActiveLength = 2,
    DISPIDSPTSI_SelectionOffset = 3,
    DISPIDSPTSI_SelectionLength = 4
} DISPIDSPTSI;
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;
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 DISPID_SpeechPhraseBuilder {
    DISPID_SPPBRestorePhraseFromMemory = 1
} DISPID_SpeechPhraseBuilder;
typedef enum DISPID_SpeechRecoResultTimes {
    DISPID_SRRTStreamTime = 1,
    DISPID_SRRTLength = 2,
    DISPID_SRRTTickCount = 3,
    DISPID_SRRTOffsetFromStart = 4
} DISPID_SpeechRecoResultTimes;
typedef enum DISPID_SpeechPhraseAlternate {
    DISPID_SPARecoResult = 1,
    DISPID_SPAStartElementInResult = 2,
    DISPID_SPANumberOfElementsInResult = 3,
    DISPID_SPAPhraseInfo = 4,
    DISPID_SPACommit = 5
} DISPID_SpeechPhraseAlternate;
typedef enum DISPID_SpeechPhraseAlternates {
    DISPID_SPAsCount = 1,
    DISPID_SPAsItem = DISPID_VALUE,
    DISPID_SPAs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseAlternates;
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;
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;
typedef enum SpeechEngineConfidence {
    SECLowConfidence = -1,
    SECNormalConfidence = 0,
    SECHighConfidence = 1
} SpeechEngineConfidence;
typedef enum DISPID_SpeechPhraseElements {
    DISPID_SPEsCount = 1,
    DISPID_SPEsItem = DISPID_VALUE,
    DISPID_SPEs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseElements;
typedef enum DISPID_SpeechPhraseReplacement {
    DISPID_SPRDisplayAttributes = 1,
    DISPID_SPRText = 2,
    DISPID_SPRFirstElement = 3,
    DISPID_SPRNumberOfElements = 4
} DISPID_SpeechPhraseReplacement;
typedef enum DISPID_SpeechPhraseReplacements {
    DISPID_SPRsCount = 1,
    DISPID_SPRsItem = DISPID_VALUE,
    DISPID_SPRs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseReplacements;
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;
typedef enum DISPID_SpeechPhraseProperties {
    DISPID_SPPsCount = 1,
    DISPID_SPPsItem = DISPID_VALUE,
    DISPID_SPPs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseProperties;
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;
typedef enum DISPID_SpeechPhraseRules {
    DISPID_SPRulesCount = 1,
    DISPID_SPRulesItem = DISPID_VALUE,
    DISPID_SPRules_NewEnum = DISPID_NEWENUM
} DISPID_SpeechPhraseRules;
typedef enum DISPID_SpeechLexicon {
    DISPID_SLGenerationId = 1,
    DISPID_SLGetWords = 2,
    DISPID_SLAddPronunciation = 3,
    DISPID_SLAddPronunciationByPhoneIds = 4,
    DISPID_SLRemovePronunciation = 5,
    DISPID_SLRemovePronunciationByPhoneIds = 6,
    DISPID_SLGetPronunciations = 7,
    DISPID_SLGetGenerationChange = 8
} DISPID_SpeechLexicon;
typedef enum SpeechLexiconType {
    SLTUser = eLEXTYPE_USER,
    SLTApp = eLEXTYPE_APP
} SpeechLexiconType;
typedef enum SpeechPartOfSpeech {
    SPSNotOverriden = SPPS_NotOverriden,
    SPSUnknown = SPPS_Unknown,
    SPSNoun = SPPS_Noun,
    SPSVerb = SPPS_Verb,
    SPSModifier = SPPS_Modifier,
    SPSFunction = SPPS_Function,
    SPSInterjection = SPPS_Interjection
} SpeechPartOfSpeech;
typedef enum DISPID_SpeechLexiconWords {
    DISPID_SLWsCount = 1,
    DISPID_SLWsItem = DISPID_VALUE,
    DISPID_SLWs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechLexiconWords;
typedef enum SpeechWordType {
    SWTAdded = eWORDTYPE_ADDED,
    SWTDeleted = eWORDTYPE_DELETED
} SpeechWordType;
typedef enum DISPID_SpeechLexiconWord {
    DISPID_SLWLangId = 1,
    DISPID_SLWType = 2,
    DISPID_SLWWord = 3,
    DISPID_SLWPronunciations = 4
} DISPID_SpeechLexiconWord;
typedef enum DISPID_SpeechLexiconProns {
    DISPID_SLPsCount = 1,
    DISPID_SLPsItem = DISPID_VALUE,
    DISPID_SLPs_NewEnum = DISPID_NEWENUM
} DISPID_SpeechLexiconProns;
typedef enum DISPID_SpeechLexiconPronunciation {
    DISPID_SLPType = 1,
    DISPID_SLPLangId = 2,
    DISPID_SLPPartOfSpeech = 3,
    DISPID_SLPPhoneIds = 4,
    DISPID_SLPSymbolic = 5
} DISPID_SpeechLexiconPronunciation;
typedef enum DISPID_SpeechPhoneConverter {
    DISPID_SPCLangId = 1,
    DISPID_SPCPhoneToId = 2,
    DISPID_SPCIdToPhone = 3
} DISPID_SpeechPhoneConverter;
/*****************************************************************************
 * _ISpeechVoiceEvents dispinterface
 */
#ifndef ___ISpeechVoiceEvents_DISPINTERFACE_DEFINED__
#define ___ISpeechVoiceEvents_DISPINTERFACE_DEFINED__

DEFINE_GUID(DIID__ISpeechVoiceEvents, 0xa372acd1, 0x3bef, 0x4bbd, 0x8f,0xfb, 0xcb,0x3e,0x2b,0x41,0x6a,0xf8);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a372acd1-3bef-4bbd-8ffb-cb3e2b416af8")
_ISpeechVoiceEvents : public IDispatch
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(_ISpeechVoiceEvents, 0xa372acd1, 0x3bef, 0x4bbd, 0x8f,0xfb, 0xcb,0x3e,0x2b,0x41,0x6a,0xf8)
#endif
#else
typedef struct _ISpeechVoiceEventsVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    END_INTERFACE
} _ISpeechVoiceEventsVtbl;

interface _ISpeechVoiceEvents {
    CONST_VTBL _ISpeechVoiceEventsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define _ISpeechVoiceEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _ISpeechVoiceEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _ISpeechVoiceEvents_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define _ISpeechVoiceEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _ISpeechVoiceEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _ISpeechVoiceEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _ISpeechVoiceEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#else
/*** IUnknown methods ***/
static inline HRESULT _ISpeechVoiceEvents_QueryInterface(_ISpeechVoiceEvents* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG _ISpeechVoiceEvents_AddRef(_ISpeechVoiceEvents* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG _ISpeechVoiceEvents_Release(_ISpeechVoiceEvents* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT _ISpeechVoiceEvents_GetTypeInfoCount(_ISpeechVoiceEvents* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT _ISpeechVoiceEvents_GetTypeInfo(_ISpeechVoiceEvents* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT _ISpeechVoiceEvents_GetIDsOfNames(_ISpeechVoiceEvents* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT _ISpeechVoiceEvents_Invoke(_ISpeechVoiceEvents* 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);
}
#endif
#endif

#endif

#endif  /* ___ISpeechVoiceEvents_DISPINTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *AudioInput = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioInput(
        ISpeechObjectToken **AudioInput) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_AudioInputStream(
        ISpeechBaseStream *AudioInputStream = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioInputStream(
        ISpeechBaseStream **AudioInputStream) = 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 TextElements,
        VARIANT *ElementDisplayAttributes = 0,
        LONG LanguageId = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateRecoContext(
        ISpeechRecoContext **NewContext) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFormat(
        SpeechFormatType Type,
        ISpeechAudioFormat **Format) = 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 TypeOfUI,
        const VARIANT *ExtraData,
        VARIANT_BOOL *Supported) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisplayUI(
        LONG hWndParent,
        BSTR Title,
        const BSTR TypeOfUI,
        const VARIANT *ExtraData = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRecognizers(
        BSTR RequiredAttributes,
        BSTR OptionalAttributes,
        ISpeechObjectTokens **ObjectTokens) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAudioInputs(
        BSTR RequiredAttributes,
        BSTR OptionalAttributes,
        ISpeechObjectTokens **ObjectTokens) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProfiles(
        BSTR RequiredAttributes,
        BSTR OptionalAttributes,
        ISpeechObjectTokens **ObjectTokens) = 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 *AudioInput);

    HRESULT (STDMETHODCALLTYPE *get_AudioInput)(
        ISpeechRecognizer *This,
        ISpeechObjectToken **AudioInput);

    HRESULT (STDMETHODCALLTYPE *putref_AudioInputStream)(
        ISpeechRecognizer *This,
        ISpeechBaseStream *AudioInputStream);

    HRESULT (STDMETHODCALLTYPE *get_AudioInputStream)(
        ISpeechRecognizer *This,
        ISpeechBaseStream **AudioInputStream);

    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 TextElements,
        VARIANT *ElementDisplayAttributes,
        LONG LanguageId);

    HRESULT (STDMETHODCALLTYPE *CreateRecoContext)(
        ISpeechRecognizer *This,
        ISpeechRecoContext **NewContext);

    HRESULT (STDMETHODCALLTYPE *GetFormat)(
        ISpeechRecognizer *This,
        SpeechFormatType Type,
        ISpeechAudioFormat **Format);

    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 TypeOfUI,
        const VARIANT *ExtraData,
        VARIANT_BOOL *Supported);

    HRESULT (STDMETHODCALLTYPE *DisplayUI)(
        ISpeechRecognizer *This,
        LONG hWndParent,
        BSTR Title,
        const BSTR TypeOfUI,
        const VARIANT *ExtraData);

    HRESULT (STDMETHODCALLTYPE *GetRecognizers)(
        ISpeechRecognizer *This,
        BSTR RequiredAttributes,
        BSTR OptionalAttributes,
        ISpeechObjectTokens **ObjectTokens);

    HRESULT (STDMETHODCALLTYPE *GetAudioInputs)(
        ISpeechRecognizer *This,
        BSTR RequiredAttributes,
        BSTR OptionalAttributes,
        ISpeechObjectTokens **ObjectTokens);

    HRESULT (STDMETHODCALLTYPE *GetProfiles)(
        ISpeechRecognizer *This,
        BSTR RequiredAttributes,
        BSTR OptionalAttributes,
        ISpeechObjectTokens **ObjectTokens);

    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,AudioInput) (This)->lpVtbl->putref_AudioInput(This,AudioInput)
#define ISpeechRecognizer_get_AudioInput(This,AudioInput) (This)->lpVtbl->get_AudioInput(This,AudioInput)
#define ISpeechRecognizer_putref_AudioInputStream(This,AudioInputStream) (This)->lpVtbl->putref_AudioInputStream(This,AudioInputStream)
#define ISpeechRecognizer_get_AudioInputStream(This,AudioInputStream) (This)->lpVtbl->get_AudioInputStream(This,AudioInputStream)
#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,TextElements,ElementDisplayAttributes,LanguageId) (This)->lpVtbl->EmulateRecognition(This,TextElements,ElementDisplayAttributes,LanguageId)
#define ISpeechRecognizer_CreateRecoContext(This,NewContext) (This)->lpVtbl->CreateRecoContext(This,NewContext)
#define ISpeechRecognizer_GetFormat(This,Type,Format) (This)->lpVtbl->GetFormat(This,Type,Format)
#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,TypeOfUI,ExtraData,Supported) (This)->lpVtbl->IsUISupported(This,TypeOfUI,ExtraData,Supported)
#define ISpeechRecognizer_DisplayUI(This,hWndParent,Title,TypeOfUI,ExtraData) (This)->lpVtbl->DisplayUI(This,hWndParent,Title,TypeOfUI,ExtraData)
#define ISpeechRecognizer_GetRecognizers(This,RequiredAttributes,OptionalAttributes,ObjectTokens) (This)->lpVtbl->GetRecognizers(This,RequiredAttributes,OptionalAttributes,ObjectTokens)
#define ISpeechRecognizer_GetAudioInputs(This,RequiredAttributes,OptionalAttributes,ObjectTokens) (This)->lpVtbl->GetAudioInputs(This,RequiredAttributes,OptionalAttributes,ObjectTokens)
#define ISpeechRecognizer_GetProfiles(This,RequiredAttributes,OptionalAttributes,ObjectTokens) (This)->lpVtbl->GetProfiles(This,RequiredAttributes,OptionalAttributes,ObjectTokens)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechRecognizer_QueryInterface(ISpeechRecognizer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechRecognizer_AddRef(ISpeechRecognizer* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechRecognizer_Release(ISpeechRecognizer* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechRecognizer_GetTypeInfoCount(ISpeechRecognizer* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechRecognizer_GetTypeInfo(ISpeechRecognizer* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechRecognizer_putref_Recognizer(ISpeechRecognizer* This,ISpeechObjectToken *Recognizer) {
    return This->lpVtbl->putref_Recognizer(This,Recognizer);
}
static inline HRESULT ISpeechRecognizer_get_Recognizer(ISpeechRecognizer* This,ISpeechObjectToken **Recognizer) {
    return This->lpVtbl->get_Recognizer(This,Recognizer);
}
static inline HRESULT ISpeechRecognizer_put_AllowAudioInputFormatChangesOnNextSet(ISpeechRecognizer* This,VARIANT_BOOL Allow) {
    return This->lpVtbl->put_AllowAudioInputFormatChangesOnNextSet(This,Allow);
}
static inline HRESULT ISpeechRecognizer_get_AllowAudioInputFormatChangesOnNextSet(ISpeechRecognizer* This,VARIANT_BOOL *Allow) {
    return This->lpVtbl->get_AllowAudioInputFormatChangesOnNextSet(This,Allow);
}
static inline HRESULT ISpeechRecognizer_putref_AudioInput(ISpeechRecognizer* This,ISpeechObjectToken *AudioInput) {
    return This->lpVtbl->putref_AudioInput(This,AudioInput);
}
static inline HRESULT ISpeechRecognizer_get_AudioInput(ISpeechRecognizer* This,ISpeechObjectToken **AudioInput) {
    return This->lpVtbl->get_AudioInput(This,AudioInput);
}
static inline HRESULT ISpeechRecognizer_putref_AudioInputStream(ISpeechRecognizer* This,ISpeechBaseStream *AudioInputStream) {
    return This->lpVtbl->putref_AudioInputStream(This,AudioInputStream);
}
static inline HRESULT ISpeechRecognizer_get_AudioInputStream(ISpeechRecognizer* This,ISpeechBaseStream **AudioInputStream) {
    return This->lpVtbl->get_AudioInputStream(This,AudioInputStream);
}
static inline HRESULT ISpeechRecognizer_get_IsShared(ISpeechRecognizer* This,VARIANT_BOOL *Shared) {
    return This->lpVtbl->get_IsShared(This,Shared);
}
static inline HRESULT ISpeechRecognizer_put_State(ISpeechRecognizer* This,SpeechRecognizerState State) {
    return This->lpVtbl->put_State(This,State);
}
static inline HRESULT ISpeechRecognizer_get_State(ISpeechRecognizer* This,SpeechRecognizerState *State) {
    return This->lpVtbl->get_State(This,State);
}
static inline HRESULT ISpeechRecognizer_get_Status(ISpeechRecognizer* This,ISpeechRecognizerStatus **Status) {
    return This->lpVtbl->get_Status(This,Status);
}
static inline HRESULT ISpeechRecognizer_putref_Profile(ISpeechRecognizer* This,ISpeechObjectToken *Profile) {
    return This->lpVtbl->putref_Profile(This,Profile);
}
static inline HRESULT ISpeechRecognizer_get_Profile(ISpeechRecognizer* This,ISpeechObjectToken **Profile) {
    return This->lpVtbl->get_Profile(This,Profile);
}
static inline HRESULT ISpeechRecognizer_EmulateRecognition(ISpeechRecognizer* This,VARIANT TextElements,VARIANT *ElementDisplayAttributes,LONG LanguageId) {
    return This->lpVtbl->EmulateRecognition(This,TextElements,ElementDisplayAttributes,LanguageId);
}
static inline HRESULT ISpeechRecognizer_CreateRecoContext(ISpeechRecognizer* This,ISpeechRecoContext **NewContext) {
    return This->lpVtbl->CreateRecoContext(This,NewContext);
}
static inline HRESULT ISpeechRecognizer_GetFormat(ISpeechRecognizer* This,SpeechFormatType Type,ISpeechAudioFormat **Format) {
    return This->lpVtbl->GetFormat(This,Type,Format);
}
static inline HRESULT ISpeechRecognizer_SetPropertyNumber(ISpeechRecognizer* This,const BSTR Name,LONG Value,VARIANT_BOOL *Supported) {
    return This->lpVtbl->SetPropertyNumber(This,Name,Value,Supported);
}
static inline HRESULT ISpeechRecognizer_GetPropertyNumber(ISpeechRecognizer* This,const BSTR Name,LONG *Value,VARIANT_BOOL *Supported) {
    return This->lpVtbl->GetPropertyNumber(This,Name,Value,Supported);
}
static inline HRESULT ISpeechRecognizer_SetPropertyString(ISpeechRecognizer* This,const BSTR Name,const BSTR Value,VARIANT_BOOL *Supported) {
    return This->lpVtbl->SetPropertyString(This,Name,Value,Supported);
}
static inline HRESULT ISpeechRecognizer_GetPropertyString(ISpeechRecognizer* This,const BSTR Name,BSTR *Value,VARIANT_BOOL *Supported) {
    return This->lpVtbl->GetPropertyString(This,Name,Value,Supported);
}
static inline HRESULT ISpeechRecognizer_IsUISupported(ISpeechRecognizer* This,const BSTR TypeOfUI,const VARIANT *ExtraData,VARIANT_BOOL *Supported) {
    return This->lpVtbl->IsUISupported(This,TypeOfUI,ExtraData,Supported);
}
static inline HRESULT ISpeechRecognizer_DisplayUI(ISpeechRecognizer* This,LONG hWndParent,BSTR Title,const BSTR TypeOfUI,const VARIANT *ExtraData) {
    return This->lpVtbl->DisplayUI(This,hWndParent,Title,TypeOfUI,ExtraData);
}
static inline HRESULT ISpeechRecognizer_GetRecognizers(ISpeechRecognizer* This,BSTR RequiredAttributes,BSTR OptionalAttributes,ISpeechObjectTokens **ObjectTokens) {
    return This->lpVtbl->GetRecognizers(This,RequiredAttributes,OptionalAttributes,ObjectTokens);
}
static inline HRESULT ISpeechRecognizer_GetAudioInputs(ISpeechRecognizer* This,BSTR RequiredAttributes,BSTR OptionalAttributes,ISpeechObjectTokens **ObjectTokens) {
    return This->lpVtbl->GetAudioInputs(This,RequiredAttributes,OptionalAttributes,ObjectTokens);
}
static inline HRESULT ISpeechRecognizer_GetProfiles(ISpeechRecognizer* This,BSTR RequiredAttributes,BSTR OptionalAttributes,ISpeechObjectTokens **ObjectTokens) {
    return This->lpVtbl->GetProfiles(This,RequiredAttributes,OptionalAttributes,ObjectTokens);
}
#endif
#endif

#endif


#endif  /* __ISpeechRecognizer_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 **AudioStatus) = 0;

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

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

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

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

    virtual HRESULT STDMETHODCALLTYPE get_SupportedLanguages(
        VARIANT *SupportedLanguages) = 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 **AudioStatus);

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

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

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

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

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

    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,AudioStatus) (This)->lpVtbl->get_AudioStatus(This,AudioStatus)
#define ISpeechRecognizerStatus_get_CurrentStreamPosition(This,pCurrentStreamPos) (This)->lpVtbl->get_CurrentStreamPosition(This,pCurrentStreamPos)
#define ISpeechRecognizerStatus_get_CurrentStreamNumber(This,StreamNumber) (This)->lpVtbl->get_CurrentStreamNumber(This,StreamNumber)
#define ISpeechRecognizerStatus_get_NumberOfActiveRules(This,NumberOfActiveRules) (This)->lpVtbl->get_NumberOfActiveRules(This,NumberOfActiveRules)
#define ISpeechRecognizerStatus_get_ClsidEngine(This,ClsidEngine) (This)->lpVtbl->get_ClsidEngine(This,ClsidEngine)
#define ISpeechRecognizerStatus_get_SupportedLanguages(This,SupportedLanguages) (This)->lpVtbl->get_SupportedLanguages(This,SupportedLanguages)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechRecognizerStatus_QueryInterface(ISpeechRecognizerStatus* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechRecognizerStatus_AddRef(ISpeechRecognizerStatus* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechRecognizerStatus_Release(ISpeechRecognizerStatus* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechRecognizerStatus_GetTypeInfoCount(ISpeechRecognizerStatus* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechRecognizerStatus_GetTypeInfo(ISpeechRecognizerStatus* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechRecognizerStatus_get_AudioStatus(ISpeechRecognizerStatus* This,ISpeechAudioStatus **AudioStatus) {
    return This->lpVtbl->get_AudioStatus(This,AudioStatus);
}
static inline HRESULT ISpeechRecognizerStatus_get_CurrentStreamPosition(ISpeechRecognizerStatus* This,VARIANT *pCurrentStreamPos) {
    return This->lpVtbl->get_CurrentStreamPosition(This,pCurrentStreamPos);
}
static inline HRESULT ISpeechRecognizerStatus_get_CurrentStreamNumber(ISpeechRecognizerStatus* This,LONG *StreamNumber) {
    return This->lpVtbl->get_CurrentStreamNumber(This,StreamNumber);
}
static inline HRESULT ISpeechRecognizerStatus_get_NumberOfActiveRules(ISpeechRecognizerStatus* This,LONG *NumberOfActiveRules) {
    return This->lpVtbl->get_NumberOfActiveRules(This,NumberOfActiveRules);
}
static inline HRESULT ISpeechRecognizerStatus_get_ClsidEngine(ISpeechRecognizerStatus* This,BSTR *ClsidEngine) {
    return This->lpVtbl->get_ClsidEngine(This,ClsidEngine);
}
static inline HRESULT ISpeechRecognizerStatus_get_SupportedLanguages(ISpeechRecognizerStatus* This,VARIANT *SupportedLanguages) {
    return This->lpVtbl->get_SupportedLanguages(This,SupportedLanguages);
}
#endif
#endif

#endif


#endif  /* __ISpeechRecognizerStatus_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 *UIType) = 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 *pAllow) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_VoicePurgeEvent(
        SpeechRecoEvents EventInterest) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_VoicePurgeEvent(
        SpeechRecoEvents *EventInterest) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_EventInterests(
        SpeechRecoEvents EventInterest) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EventInterests(
        SpeechRecoEvents *EventInterest) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_CmdMaxAlternates(
        LONG MaxAlternates) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CmdMaxAlternates(
        LONG *MaxAlternates) = 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 GrammarId,
        ISpeechRecoGrammar **Grammar) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateResultFromMemory(
        VARIANT *ResultBlock,
        ISpeechRecoResult **Result) = 0;

    virtual HRESULT STDMETHODCALLTYPE Bookmark(
        SpeechBookmarkOptions Options,
        VARIANT StreamPos,
        VARIANT BookmarkId) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAdaptationData(
        BSTR AdaptationString) = 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 *UIType);

    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 *pAllow);

    HRESULT (STDMETHODCALLTYPE *put_VoicePurgeEvent)(
        ISpeechRecoContext *This,
        SpeechRecoEvents EventInterest);

    HRESULT (STDMETHODCALLTYPE *get_VoicePurgeEvent)(
        ISpeechRecoContext *This,
        SpeechRecoEvents *EventInterest);

    HRESULT (STDMETHODCALLTYPE *put_EventInterests)(
        ISpeechRecoContext *This,
        SpeechRecoEvents EventInterest);

    HRESULT (STDMETHODCALLTYPE *get_EventInterests)(
        ISpeechRecoContext *This,
        SpeechRecoEvents *EventInterest);

    HRESULT (STDMETHODCALLTYPE *put_CmdMaxAlternates)(
        ISpeechRecoContext *This,
        LONG MaxAlternates);

    HRESULT (STDMETHODCALLTYPE *get_CmdMaxAlternates)(
        ISpeechRecoContext *This,
        LONG *MaxAlternates);

    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 GrammarId,
        ISpeechRecoGrammar **Grammar);

    HRESULT (STDMETHODCALLTYPE *CreateResultFromMemory)(
        ISpeechRecoContext *This,
        VARIANT *ResultBlock,
        ISpeechRecoResult **Result);

    HRESULT (STDMETHODCALLTYPE *Bookmark)(
        ISpeechRecoContext *This,
        SpeechBookmarkOptions Options,
        VARIANT StreamPos,
        VARIANT BookmarkId);

    HRESULT (STDMETHODCALLTYPE *SetAdaptationData)(
        ISpeechRecoContext *This,
        BSTR AdaptationString);

    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,UIType) (This)->lpVtbl->get_RequestedUIType(This,UIType)
#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,pAllow) (This)->lpVtbl->get_AllowVoiceFormatMatchingOnNextSet(This,pAllow)
#define ISpeechRecoContext_put_VoicePurgeEvent(This,EventInterest) (This)->lpVtbl->put_VoicePurgeEvent(This,EventInterest)
#define ISpeechRecoContext_get_VoicePurgeEvent(This,EventInterest) (This)->lpVtbl->get_VoicePurgeEvent(This,EventInterest)
#define ISpeechRecoContext_put_EventInterests(This,EventInterest) (This)->lpVtbl->put_EventInterests(This,EventInterest)
#define ISpeechRecoContext_get_EventInterests(This,EventInterest) (This)->lpVtbl->get_EventInterests(This,EventInterest)
#define ISpeechRecoContext_put_CmdMaxAlternates(This,MaxAlternates) (This)->lpVtbl->put_CmdMaxAlternates(This,MaxAlternates)
#define ISpeechRecoContext_get_CmdMaxAlternates(This,MaxAlternates) (This)->lpVtbl->get_CmdMaxAlternates(This,MaxAlternates)
#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,GrammarId,Grammar) (This)->lpVtbl->CreateGrammar(This,GrammarId,Grammar)
#define ISpeechRecoContext_CreateResultFromMemory(This,ResultBlock,Result) (This)->lpVtbl->CreateResultFromMemory(This,ResultBlock,Result)
#define ISpeechRecoContext_Bookmark(This,Options,StreamPos,BookmarkId) (This)->lpVtbl->Bookmark(This,Options,StreamPos,BookmarkId)
#define ISpeechRecoContext_SetAdaptationData(This,AdaptationString) (This)->lpVtbl->SetAdaptationData(This,AdaptationString)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechRecoContext_QueryInterface(ISpeechRecoContext* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechRecoContext_AddRef(ISpeechRecoContext* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechRecoContext_Release(ISpeechRecoContext* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechRecoContext_GetTypeInfoCount(ISpeechRecoContext* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechRecoContext_GetTypeInfo(ISpeechRecoContext* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechRecoContext_get_Recognizer(ISpeechRecoContext* This,ISpeechRecognizer **Recognizer) {
    return This->lpVtbl->get_Recognizer(This,Recognizer);
}
static inline HRESULT ISpeechRecoContext_get_AudioInputInterferenceStatus(ISpeechRecoContext* This,SpeechInterference *Interference) {
    return This->lpVtbl->get_AudioInputInterferenceStatus(This,Interference);
}
static inline HRESULT ISpeechRecoContext_get_RequestedUIType(ISpeechRecoContext* This,BSTR *UIType) {
    return This->lpVtbl->get_RequestedUIType(This,UIType);
}
static inline HRESULT ISpeechRecoContext_putref_Voice(ISpeechRecoContext* This,ISpeechVoice *Voice) {
    return This->lpVtbl->putref_Voice(This,Voice);
}
static inline HRESULT ISpeechRecoContext_get_Voice(ISpeechRecoContext* This,ISpeechVoice **Voice) {
    return This->lpVtbl->get_Voice(This,Voice);
}
static inline HRESULT ISpeechRecoContext_put_AllowVoiceFormatMatchingOnNextSet(ISpeechRecoContext* This,VARIANT_BOOL Allow) {
    return This->lpVtbl->put_AllowVoiceFormatMatchingOnNextSet(This,Allow);
}
static inline HRESULT ISpeechRecoContext_get_AllowVoiceFormatMatchingOnNextSet(ISpeechRecoContext* This,VARIANT_BOOL *pAllow) {
    return This->lpVtbl->get_AllowVoiceFormatMatchingOnNextSet(This,pAllow);
}
static inline HRESULT ISpeechRecoContext_put_VoicePurgeEvent(ISpeechRecoContext* This,SpeechRecoEvents EventInterest) {
    return This->lpVtbl->put_VoicePurgeEvent(This,EventInterest);
}
static inline HRESULT ISpeechRecoContext_get_VoicePurgeEvent(ISpeechRecoContext* This,SpeechRecoEvents *EventInterest) {
    return This->lpVtbl->get_VoicePurgeEvent(This,EventInterest);
}
static inline HRESULT ISpeechRecoContext_put_EventInterests(ISpeechRecoContext* This,SpeechRecoEvents EventInterest) {
    return This->lpVtbl->put_EventInterests(This,EventInterest);
}
static inline HRESULT ISpeechRecoContext_get_EventInterests(ISpeechRecoContext* This,SpeechRecoEvents *EventInterest) {
    return This->lpVtbl->get_EventInterests(This,EventInterest);
}
static inline HRESULT ISpeechRecoContext_put_CmdMaxAlternates(ISpeechRecoContext* This,LONG MaxAlternates) {
    return This->lpVtbl->put_CmdMaxAlternates(This,MaxAlternates);
}
static inline HRESULT ISpeechRecoContext_get_CmdMaxAlternates(ISpeechRecoContext* This,LONG *MaxAlternates) {
    return This->lpVtbl->get_CmdMaxAlternates(This,MaxAlternates);
}
static inline HRESULT ISpeechRecoContext_put_State(ISpeechRecoContext* This,SpeechRecoContextState State) {
    return This->lpVtbl->put_State(This,State);
}
static inline HRESULT ISpeechRecoContext_get_State(ISpeechRecoContext* This,SpeechRecoContextState *State) {
    return This->lpVtbl->get_State(This,State);
}
static inline HRESULT ISpeechRecoContext_put_RetainedAudio(ISpeechRecoContext* This,SpeechRetainedAudioOptions Option) {
    return This->lpVtbl->put_RetainedAudio(This,Option);
}
static inline HRESULT ISpeechRecoContext_get_RetainedAudio(ISpeechRecoContext* This,SpeechRetainedAudioOptions *Option) {
    return This->lpVtbl->get_RetainedAudio(This,Option);
}
static inline HRESULT ISpeechRecoContext_putref_RetainedAudioFormat(ISpeechRecoContext* This,ISpeechAudioFormat *Format) {
    return This->lpVtbl->putref_RetainedAudioFormat(This,Format);
}
static inline HRESULT ISpeechRecoContext_get_RetainedAudioFormat(ISpeechRecoContext* This,ISpeechAudioFormat **Format) {
    return This->lpVtbl->get_RetainedAudioFormat(This,Format);
}
static inline HRESULT ISpeechRecoContext_Pause(ISpeechRecoContext* This) {
    return This->lpVtbl->Pause(This);
}
static inline HRESULT ISpeechRecoContext_Resume(ISpeechRecoContext* This) {
    return This->lpVtbl->Resume(This);
}
static inline HRESULT ISpeechRecoContext_CreateGrammar(ISpeechRecoContext* This,VARIANT GrammarId,ISpeechRecoGrammar **Grammar) {
    return This->lpVtbl->CreateGrammar(This,GrammarId,Grammar);
}
static inline HRESULT ISpeechRecoContext_CreateResultFromMemory(ISpeechRecoContext* This,VARIANT *ResultBlock,ISpeechRecoResult **Result) {
    return This->lpVtbl->CreateResultFromMemory(This,ResultBlock,Result);
}
static inline HRESULT ISpeechRecoContext_Bookmark(ISpeechRecoContext* This,SpeechBookmarkOptions Options,VARIANT StreamPos,VARIANT BookmarkId) {
    return This->lpVtbl->Bookmark(This,Options,StreamPos,BookmarkId);
}
static inline HRESULT ISpeechRecoContext_SetAdaptationData(ISpeechRecoContext* This,BSTR AdaptationString) {
    return This->lpVtbl->SetAdaptationData(This,AdaptationString);
}
#endif
#endif

#endif


#endif  /* __ISpeechRecoContext_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 **RecoContext) = 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 NewLanguage = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdLoadFromFile(
        const BSTR FileName,
        SpeechLoadOption LoadOption = SLOStatic) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdLoadFromObject(
        const BSTR ClassId,
        const BSTR GrammarName,
        SpeechLoadOption LoadOption = SLOStatic) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdLoadFromResource(
        LONG hModule,
        VARIANT ResourceName,
        VARIANT ResourceType,
        SpeechLanguageId LanguageId,
        SpeechLoadOption LoadOption = SLOStatic) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdLoadFromMemory(
        VARIANT GrammarData,
        SpeechLoadOption LoadOption = SLOStatic) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdLoadFromProprietaryGrammar(
        const BSTR ProprietaryGuid,
        const BSTR ProprietaryString,
        VARIANT ProprietaryData,
        SpeechLoadOption LoadOption = SLOStatic) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdSetRuleState(
        const BSTR Name,
        SpeechRuleState State) = 0;

    virtual HRESULT STDMETHODCALLTYPE CmdSetRuleIdState(
        LONG RuleId,
        SpeechRuleState State) = 0;

    virtual HRESULT STDMETHODCALLTYPE DictationLoad(
        const BSTR TopicName = L"",
        SpeechLoadOption LoadOption = SLOStatic) = 0;

    virtual HRESULT STDMETHODCALLTYPE DictationUnload(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE DictationSetState(
        SpeechRuleState State) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetWordSequenceData(
        const BSTR Text,
        LONG TextLength,
        ISpeechTextSelectionInformation *Info) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTextSelection(
        ISpeechTextSelectionInformation *Info) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsPronounceable(
        const BSTR Word,
        SpeechWordPronounceable *WordPronounceable) = 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 **RecoContext);

    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 NewLanguage);

    HRESULT (STDMETHODCALLTYPE *CmdLoadFromFile)(
        ISpeechRecoGrammar *This,
        const BSTR FileName,
        SpeechLoadOption LoadOption);

    HRESULT (STDMETHODCALLTYPE *CmdLoadFromObject)(
        ISpeechRecoGrammar *This,
        const BSTR ClassId,
        const BSTR GrammarName,
        SpeechLoadOption LoadOption);

    HRESULT (STDMETHODCALLTYPE *CmdLoadFromResource)(
        ISpeechRecoGrammar *This,
        LONG hModule,
        VARIANT ResourceName,
        VARIANT ResourceType,
        SpeechLanguageId LanguageId,
        SpeechLoadOption LoadOption);

    HRESULT (STDMETHODCALLTYPE *CmdLoadFromMemory)(
        ISpeechRecoGrammar *This,
        VARIANT GrammarData,
        SpeechLoadOption LoadOption);

    HRESULT (STDMETHODCALLTYPE *CmdLoadFromProprietaryGrammar)(
        ISpeechRecoGrammar *This,
        const BSTR ProprietaryGuid,
        const BSTR ProprietaryString,
        VARIANT ProprietaryData,
        SpeechLoadOption LoadOption);

    HRESULT (STDMETHODCALLTYPE *CmdSetRuleState)(
        ISpeechRecoGrammar *This,
        const BSTR Name,
        SpeechRuleState State);

    HRESULT (STDMETHODCALLTYPE *CmdSetRuleIdState)(
        ISpeechRecoGrammar *This,
        LONG RuleId,
        SpeechRuleState State);

    HRESULT (STDMETHODCALLTYPE *DictationLoad)(
        ISpeechRecoGrammar *This,
        const BSTR TopicName,
        SpeechLoadOption LoadOption);

    HRESULT (STDMETHODCALLTYPE *DictationUnload)(
        ISpeechRecoGrammar *This);

    HRESULT (STDMETHODCALLTYPE *DictationSetState)(
        ISpeechRecoGrammar *This,
        SpeechRuleState State);

    HRESULT (STDMETHODCALLTYPE *SetWordSequenceData)(
        ISpeechRecoGrammar *This,
        const BSTR Text,
        LONG TextLength,
        ISpeechTextSelectionInformation *Info);

    HRESULT (STDMETHODCALLTYPE *SetTextSelection)(
        ISpeechRecoGrammar *This,
        ISpeechTextSelectionInformation *Info);

    HRESULT (STDMETHODCALLTYPE *IsPronounceable)(
        ISpeechRecoGrammar *This,
        const BSTR Word,
        SpeechWordPronounceable *WordPronounceable);

    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,RecoContext) (This)->lpVtbl->get_RecoContext(This,RecoContext)
#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,NewLanguage) (This)->lpVtbl->Reset(This,NewLanguage)
#define ISpeechRecoGrammar_CmdLoadFromFile(This,FileName,LoadOption) (This)->lpVtbl->CmdLoadFromFile(This,FileName,LoadOption)
#define ISpeechRecoGrammar_CmdLoadFromObject(This,ClassId,GrammarName,LoadOption) (This)->lpVtbl->CmdLoadFromObject(This,ClassId,GrammarName,LoadOption)
#define ISpeechRecoGrammar_CmdLoadFromResource(This,hModule,ResourceName,ResourceType,LanguageId,LoadOption) (This)->lpVtbl->CmdLoadFromResource(This,hModule,ResourceName,ResourceType,LanguageId,LoadOption)
#define ISpeechRecoGrammar_CmdLoadFromMemory(This,GrammarData,LoadOption) (This)->lpVtbl->CmdLoadFromMemory(This,GrammarData,LoadOption)
#define ISpeechRecoGrammar_CmdLoadFromProprietaryGrammar(This,ProprietaryGuid,ProprietaryString,ProprietaryData,LoadOption) (This)->lpVtbl->CmdLoadFromProprietaryGrammar(This,ProprietaryGuid,ProprietaryString,ProprietaryData,LoadOption)
#define ISpeechRecoGrammar_CmdSetRuleState(This,Name,State) (This)->lpVtbl->CmdSetRuleState(This,Name,State)
#define ISpeechRecoGrammar_CmdSetRuleIdState(This,RuleId,State) (This)->lpVtbl->CmdSetRuleIdState(This,RuleId,State)
#define ISpeechRecoGrammar_DictationLoad(This,TopicName,LoadOption) (This)->lpVtbl->DictationLoad(This,TopicName,LoadOption)
#define ISpeechRecoGrammar_DictationUnload(This) (This)->lpVtbl->DictationUnload(This)
#define ISpeechRecoGrammar_DictationSetState(This,State) (This)->lpVtbl->DictationSetState(This,State)
#define ISpeechRecoGrammar_SetWordSequenceData(This,Text,TextLength,Info) (This)->lpVtbl->SetWordSequenceData(This,Text,TextLength,Info)
#define ISpeechRecoGrammar_SetTextSelection(This,Info) (This)->lpVtbl->SetTextSelection(This,Info)
#define ISpeechRecoGrammar_IsPronounceable(This,Word,WordPronounceable) (This)->lpVtbl->IsPronounceable(This,Word,WordPronounceable)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechRecoGrammar_QueryInterface(ISpeechRecoGrammar* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechRecoGrammar_AddRef(ISpeechRecoGrammar* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechRecoGrammar_Release(ISpeechRecoGrammar* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechRecoGrammar_GetTypeInfoCount(ISpeechRecoGrammar* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechRecoGrammar_GetTypeInfo(ISpeechRecoGrammar* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechRecoGrammar_get_Id(ISpeechRecoGrammar* This,VARIANT *Id) {
    return This->lpVtbl->get_Id(This,Id);
}
static inline HRESULT ISpeechRecoGrammar_get_RecoContext(ISpeechRecoGrammar* This,ISpeechRecoContext **RecoContext) {
    return This->lpVtbl->get_RecoContext(This,RecoContext);
}
static inline HRESULT ISpeechRecoGrammar_put_State(ISpeechRecoGrammar* This,SpeechGrammarState State) {
    return This->lpVtbl->put_State(This,State);
}
static inline HRESULT ISpeechRecoGrammar_get_State(ISpeechRecoGrammar* This,SpeechGrammarState *State) {
    return This->lpVtbl->get_State(This,State);
}
static inline HRESULT ISpeechRecoGrammar_get_Rules(ISpeechRecoGrammar* This,ISpeechGrammarRules **Rules) {
    return This->lpVtbl->get_Rules(This,Rules);
}
static inline HRESULT ISpeechRecoGrammar_Reset(ISpeechRecoGrammar* This,SpeechLanguageId NewLanguage) {
    return This->lpVtbl->Reset(This,NewLanguage);
}
static inline HRESULT ISpeechRecoGrammar_CmdLoadFromFile(ISpeechRecoGrammar* This,const BSTR FileName,SpeechLoadOption LoadOption) {
    return This->lpVtbl->CmdLoadFromFile(This,FileName,LoadOption);
}
static inline HRESULT ISpeechRecoGrammar_CmdLoadFromObject(ISpeechRecoGrammar* This,const BSTR ClassId,const BSTR GrammarName,SpeechLoadOption LoadOption) {
    return This->lpVtbl->CmdLoadFromObject(This,ClassId,GrammarName,LoadOption);
}
static inline HRESULT ISpeechRecoGrammar_CmdLoadFromResource(ISpeechRecoGrammar* This,LONG hModule,VARIANT ResourceName,VARIANT ResourceType,SpeechLanguageId LanguageId,SpeechLoadOption LoadOption) {
    return This->lpVtbl->CmdLoadFromResource(This,hModule,ResourceName,ResourceType,LanguageId,LoadOption);
}
static inline HRESULT ISpeechRecoGrammar_CmdLoadFromMemory(ISpeechRecoGrammar* This,VARIANT GrammarData,SpeechLoadOption LoadOption) {
    return This->lpVtbl->CmdLoadFromMemory(This,GrammarData,LoadOption);
}
static inline HRESULT ISpeechRecoGrammar_CmdLoadFromProprietaryGrammar(ISpeechRecoGrammar* This,const BSTR ProprietaryGuid,const BSTR ProprietaryString,VARIANT ProprietaryData,SpeechLoadOption LoadOption) {
    return This->lpVtbl->CmdLoadFromProprietaryGrammar(This,ProprietaryGuid,ProprietaryString,ProprietaryData,LoadOption);
}
static inline HRESULT ISpeechRecoGrammar_CmdSetRuleState(ISpeechRecoGrammar* This,const BSTR Name,SpeechRuleState State) {
    return This->lpVtbl->CmdSetRuleState(This,Name,State);
}
static inline HRESULT ISpeechRecoGrammar_CmdSetRuleIdState(ISpeechRecoGrammar* This,LONG RuleId,SpeechRuleState State) {
    return This->lpVtbl->CmdSetRuleIdState(This,RuleId,State);
}
static inline HRESULT ISpeechRecoGrammar_DictationLoad(ISpeechRecoGrammar* This,const BSTR TopicName,SpeechLoadOption LoadOption) {
    return This->lpVtbl->DictationLoad(This,TopicName,LoadOption);
}
static inline HRESULT ISpeechRecoGrammar_DictationUnload(ISpeechRecoGrammar* This) {
    return This->lpVtbl->DictationUnload(This);
}
static inline HRESULT ISpeechRecoGrammar_DictationSetState(ISpeechRecoGrammar* This,SpeechRuleState State) {
    return This->lpVtbl->DictationSetState(This,State);
}
static inline HRESULT ISpeechRecoGrammar_SetWordSequenceData(ISpeechRecoGrammar* This,const BSTR Text,LONG TextLength,ISpeechTextSelectionInformation *Info) {
    return This->lpVtbl->SetWordSequenceData(This,Text,TextLength,Info);
}
static inline HRESULT ISpeechRecoGrammar_SetTextSelection(ISpeechRecoGrammar* This,ISpeechTextSelectionInformation *Info) {
    return This->lpVtbl->SetTextSelection(This,Info);
}
static inline HRESULT ISpeechRecoGrammar_IsPronounceable(ISpeechRecoGrammar* This,const BSTR Word,SpeechWordPronounceable *WordPronounceable) {
    return This->lpVtbl->IsPronounceable(This,Word,WordPronounceable);
}
#endif
#endif

#endif


#endif  /* __ISpeechRecoGrammar_INTERFACE_DEFINED__ */

/*****************************************************************************
 * _ISpeechRecoContextEvents dispinterface
 */
#ifndef ___ISpeechRecoContextEvents_DISPINTERFACE_DEFINED__
#define ___ISpeechRecoContextEvents_DISPINTERFACE_DEFINED__

DEFINE_GUID(DIID__ISpeechRecoContextEvents, 0x7b8fcb42, 0x0e9d, 0x4f00, 0xa0,0x48, 0x7b,0x04,0xd6,0x17,0x9d,0x3d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7b8fcb42-0e9d-4f00-a048-7b04d6179d3d")
_ISpeechRecoContextEvents : public IDispatch
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(_ISpeechRecoContextEvents, 0x7b8fcb42, 0x0e9d, 0x4f00, 0xa0,0x48, 0x7b,0x04,0xd6,0x17,0x9d,0x3d)
#endif
#else
typedef struct _ISpeechRecoContextEventsVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    END_INTERFACE
} _ISpeechRecoContextEventsVtbl;

interface _ISpeechRecoContextEvents {
    CONST_VTBL _ISpeechRecoContextEventsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define _ISpeechRecoContextEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _ISpeechRecoContextEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _ISpeechRecoContextEvents_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define _ISpeechRecoContextEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _ISpeechRecoContextEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _ISpeechRecoContextEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _ISpeechRecoContextEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#else
/*** IUnknown methods ***/
static inline HRESULT _ISpeechRecoContextEvents_QueryInterface(_ISpeechRecoContextEvents* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG _ISpeechRecoContextEvents_AddRef(_ISpeechRecoContextEvents* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG _ISpeechRecoContextEvents_Release(_ISpeechRecoContextEvents* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT _ISpeechRecoContextEvents_GetTypeInfoCount(_ISpeechRecoContextEvents* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT _ISpeechRecoContextEvents_GetTypeInfo(_ISpeechRecoContextEvents* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT _ISpeechRecoContextEvents_GetIDsOfNames(_ISpeechRecoContextEvents* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT _ISpeechRecoContextEvents_Invoke(_ISpeechRecoContextEvents* 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);
}
#endif
#endif

#endif

#endif  /* ___ISpeechRecoContextEvents_DISPINTERFACE_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 ResourceName,
        const BSTR ResourceValue) = 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 ResourceName,
        const BSTR ResourceValue);

    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,ResourceName,ResourceValue) (This)->lpVtbl->AddResource(This,ResourceName,ResourceValue)
#define ISpeechGrammarRule_AddState(This,State) (This)->lpVtbl->AddState(This,State)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechGrammarRule_QueryInterface(ISpeechGrammarRule* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechGrammarRule_AddRef(ISpeechGrammarRule* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechGrammarRule_Release(ISpeechGrammarRule* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechGrammarRule_GetTypeInfoCount(ISpeechGrammarRule* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechGrammarRule_GetTypeInfo(ISpeechGrammarRule* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechGrammarRule_get_Attributes(ISpeechGrammarRule* This,SpeechRuleAttributes *Attributes) {
    return This->lpVtbl->get_Attributes(This,Attributes);
}
static inline HRESULT ISpeechGrammarRule_get_InitialState(ISpeechGrammarRule* This,ISpeechGrammarRuleState **State) {
    return This->lpVtbl->get_InitialState(This,State);
}
static inline HRESULT ISpeechGrammarRule_get_Name(ISpeechGrammarRule* This,BSTR *Name) {
    return This->lpVtbl->get_Name(This,Name);
}
static inline HRESULT ISpeechGrammarRule_get_Id(ISpeechGrammarRule* This,LONG *Id) {
    return This->lpVtbl->get_Id(This,Id);
}
static inline HRESULT ISpeechGrammarRule_Clear(ISpeechGrammarRule* This) {
    return This->lpVtbl->Clear(This);
}
static inline HRESULT ISpeechGrammarRule_AddResource(ISpeechGrammarRule* This,const BSTR ResourceName,const BSTR ResourceValue) {
    return This->lpVtbl->AddResource(This,ResourceName,ResourceValue);
}
static inline HRESULT ISpeechGrammarRule_AddState(ISpeechGrammarRule* This,ISpeechGrammarRuleState **State) {
    return This->lpVtbl->AddState(This,State);
}
#endif
#endif

#endif


#endif  /* __ISpeechGrammarRule_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 RuleNameOrId,
        ISpeechGrammarRule **Rule) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        LONG Index,
        ISpeechGrammarRule **Rule) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE get_Dynamic(
        VARIANT_BOOL *Dynamic) = 0;

    virtual HRESULT STDMETHODCALLTYPE Add(
        BSTR RuleName,
        SpeechRuleAttributes Attributes,
        LONG RuleId,
        ISpeechGrammarRule **Rule) = 0;

    virtual HRESULT STDMETHODCALLTYPE Commit(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommitAndSave(
        BSTR *ErrorText,
        VARIANT *SaveStream) = 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 RuleNameOrId,
        ISpeechGrammarRule **Rule);

    HRESULT (STDMETHODCALLTYPE *Item)(
        ISpeechGrammarRules *This,
        LONG Index,
        ISpeechGrammarRule **Rule);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechGrammarRules *This,
        IUnknown **EnumVARIANT);

    HRESULT (STDMETHODCALLTYPE *get_Dynamic)(
        ISpeechGrammarRules *This,
        VARIANT_BOOL *Dynamic);

    HRESULT (STDMETHODCALLTYPE *Add)(
        ISpeechGrammarRules *This,
        BSTR RuleName,
        SpeechRuleAttributes Attributes,
        LONG RuleId,
        ISpeechGrammarRule **Rule);

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

    HRESULT (STDMETHODCALLTYPE *CommitAndSave)(
        ISpeechGrammarRules *This,
        BSTR *ErrorText,
        VARIANT *SaveStream);

    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,RuleNameOrId,Rule) (This)->lpVtbl->FindRule(This,RuleNameOrId,Rule)
#define ISpeechGrammarRules_Item(This,Index,Rule) (This)->lpVtbl->Item(This,Index,Rule)
#define ISpeechGrammarRules_get__NewEnum(This,EnumVARIANT) (This)->lpVtbl->get__NewEnum(This,EnumVARIANT)
#define ISpeechGrammarRules_get_Dynamic(This,Dynamic) (This)->lpVtbl->get_Dynamic(This,Dynamic)
#define ISpeechGrammarRules_Add(This,RuleName,Attributes,RuleId,Rule) (This)->lpVtbl->Add(This,RuleName,Attributes,RuleId,Rule)
#define ISpeechGrammarRules_Commit(This) (This)->lpVtbl->Commit(This)
#define ISpeechGrammarRules_CommitAndSave(This,ErrorText,SaveStream) (This)->lpVtbl->CommitAndSave(This,ErrorText,SaveStream)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechGrammarRules_QueryInterface(ISpeechGrammarRules* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechGrammarRules_AddRef(ISpeechGrammarRules* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechGrammarRules_Release(ISpeechGrammarRules* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechGrammarRules_GetTypeInfoCount(ISpeechGrammarRules* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechGrammarRules_GetTypeInfo(ISpeechGrammarRules* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechGrammarRules_get_Count(ISpeechGrammarRules* This,LONG *Count) {
    return This->lpVtbl->get_Count(This,Count);
}
static inline HRESULT ISpeechGrammarRules_FindRule(ISpeechGrammarRules* This,VARIANT RuleNameOrId,ISpeechGrammarRule **Rule) {
    return This->lpVtbl->FindRule(This,RuleNameOrId,Rule);
}
static inline HRESULT ISpeechGrammarRules_Item(ISpeechGrammarRules* This,LONG Index,ISpeechGrammarRule **Rule) {
    return This->lpVtbl->Item(This,Index,Rule);
}
static inline HRESULT ISpeechGrammarRules_get__NewEnum(ISpeechGrammarRules* This,IUnknown **EnumVARIANT) {
    return This->lpVtbl->get__NewEnum(This,EnumVARIANT);
}
static inline HRESULT ISpeechGrammarRules_get_Dynamic(ISpeechGrammarRules* This,VARIANT_BOOL *Dynamic) {
    return This->lpVtbl->get_Dynamic(This,Dynamic);
}
static inline HRESULT ISpeechGrammarRules_Add(ISpeechGrammarRules* This,BSTR RuleName,SpeechRuleAttributes Attributes,LONG RuleId,ISpeechGrammarRule **Rule) {
    return This->lpVtbl->Add(This,RuleName,Attributes,RuleId,Rule);
}
static inline HRESULT ISpeechGrammarRules_Commit(ISpeechGrammarRules* This) {
    return This->lpVtbl->Commit(This);
}
static inline HRESULT ISpeechGrammarRules_CommitAndSave(ISpeechGrammarRules* This,BSTR *ErrorText,VARIANT *SaveStream) {
    return This->lpVtbl->CommitAndSave(This,ErrorText,SaveStream);
}
#endif
#endif

#endif


#endif  /* __ISpeechGrammarRules_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *DestState,
        const BSTR Words,
        const BSTR Separators = L" ",
        SpeechGrammarWordType Type = SGLexical,
        const BSTR PropertyName = L"",
        LONG PropertyId = 0,
        VARIANT *PropertyValue = 0,
        float Weight = 1) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddRuleTransition(
        ISpeechGrammarRuleState *DestinationState,
        ISpeechGrammarRule *Rule,
        const BSTR PropertyName = L"",
        LONG PropertyId = 0,
        VARIANT *PropertyValue = 0,
        float Weight = 1) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddSpecialTransition(
        ISpeechGrammarRuleState *DestinationState,
        SpeechSpecialTransitionType Type,
        const BSTR PropertyName = L"",
        LONG PropertyId = 0,
        VARIANT *PropertyValue = 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 *DestState,
        const BSTR Words,
        const BSTR Separators,
        SpeechGrammarWordType Type,
        const BSTR PropertyName,
        LONG PropertyId,
        VARIANT *PropertyValue,
        float Weight);

    HRESULT (STDMETHODCALLTYPE *AddRuleTransition)(
        ISpeechGrammarRuleState *This,
        ISpeechGrammarRuleState *DestinationState,
        ISpeechGrammarRule *Rule,
        const BSTR PropertyName,
        LONG PropertyId,
        VARIANT *PropertyValue,
        float Weight);

    HRESULT (STDMETHODCALLTYPE *AddSpecialTransition)(
        ISpeechGrammarRuleState *This,
        ISpeechGrammarRuleState *DestinationState,
        SpeechSpecialTransitionType Type,
        const BSTR PropertyName,
        LONG PropertyId,
        VARIANT *PropertyValue,
        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,DestState,Words,Separators,Type,PropertyName,PropertyId,PropertyValue,Weight) (This)->lpVtbl->AddWordTransition(This,DestState,Words,Separators,Type,PropertyName,PropertyId,PropertyValue,Weight)
#define ISpeechGrammarRuleState_AddRuleTransition(This,DestinationState,Rule,PropertyName,PropertyId,PropertyValue,Weight) (This)->lpVtbl->AddRuleTransition(This,DestinationState,Rule,PropertyName,PropertyId,PropertyValue,Weight)
#define ISpeechGrammarRuleState_AddSpecialTransition(This,DestinationState,Type,PropertyName,PropertyId,PropertyValue,Weight) (This)->lpVtbl->AddSpecialTransition(This,DestinationState,Type,PropertyName,PropertyId,PropertyValue,Weight)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechGrammarRuleState_QueryInterface(ISpeechGrammarRuleState* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechGrammarRuleState_AddRef(ISpeechGrammarRuleState* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechGrammarRuleState_Release(ISpeechGrammarRuleState* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechGrammarRuleState_GetTypeInfoCount(ISpeechGrammarRuleState* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechGrammarRuleState_GetTypeInfo(ISpeechGrammarRuleState* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechGrammarRuleState_get_Rule(ISpeechGrammarRuleState* This,ISpeechGrammarRule **Rule) {
    return This->lpVtbl->get_Rule(This,Rule);
}
static inline HRESULT ISpeechGrammarRuleState_get_Transitions(ISpeechGrammarRuleState* This,ISpeechGrammarRuleStateTransitions **Transitions) {
    return This->lpVtbl->get_Transitions(This,Transitions);
}
static inline HRESULT ISpeechGrammarRuleState_AddWordTransition(ISpeechGrammarRuleState* This,ISpeechGrammarRuleState *DestState,const BSTR Words,const BSTR Separators,SpeechGrammarWordType Type,const BSTR PropertyName,LONG PropertyId,VARIANT *PropertyValue,float Weight) {
    return This->lpVtbl->AddWordTransition(This,DestState,Words,Separators,Type,PropertyName,PropertyId,PropertyValue,Weight);
}
static inline HRESULT ISpeechGrammarRuleState_AddRuleTransition(ISpeechGrammarRuleState* This,ISpeechGrammarRuleState *DestinationState,ISpeechGrammarRule *Rule,const BSTR PropertyName,LONG PropertyId,VARIANT *PropertyValue,float Weight) {
    return This->lpVtbl->AddRuleTransition(This,DestinationState,Rule,PropertyName,PropertyId,PropertyValue,Weight);
}
static inline HRESULT ISpeechGrammarRuleState_AddSpecialTransition(ISpeechGrammarRuleState* This,ISpeechGrammarRuleState *DestinationState,SpeechSpecialTransitionType Type,const BSTR PropertyName,LONG PropertyId,VARIANT *PropertyValue,float Weight) {
    return This->lpVtbl->AddSpecialTransition(This,DestinationState,Type,PropertyName,PropertyId,PropertyValue,Weight);
}
#endif
#endif

#endif


#endif  /* __ISpeechGrammarRuleState_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 **EnumVARIANT) = 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 **EnumVARIANT);

    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,EnumVARIANT) (This)->lpVtbl->get__NewEnum(This,EnumVARIANT)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechGrammarRuleStateTransitions_QueryInterface(ISpeechGrammarRuleStateTransitions* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechGrammarRuleStateTransitions_AddRef(ISpeechGrammarRuleStateTransitions* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechGrammarRuleStateTransitions_Release(ISpeechGrammarRuleStateTransitions* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechGrammarRuleStateTransitions_GetTypeInfoCount(ISpeechGrammarRuleStateTransitions* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechGrammarRuleStateTransitions_GetTypeInfo(ISpeechGrammarRuleStateTransitions* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechGrammarRuleStateTransitions_get_Count(ISpeechGrammarRuleStateTransitions* This,LONG *Count) {
    return This->lpVtbl->get_Count(This,Count);
}
static inline HRESULT ISpeechGrammarRuleStateTransitions_Item(ISpeechGrammarRuleStateTransitions* This,LONG Index,ISpeechGrammarRuleStateTransition **Transition) {
    return This->lpVtbl->Item(This,Index,Transition);
}
static inline HRESULT ISpeechGrammarRuleStateTransitions_get__NewEnum(ISpeechGrammarRuleStateTransitions* This,IUnknown **EnumVARIANT) {
    return This->lpVtbl->get__NewEnum(This,EnumVARIANT);
}
#endif
#endif

#endif


#endif  /* __ISpeechGrammarRuleStateTransitions_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *PropertyName) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PropertyId(
        LONG *PropertyId) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PropertyValue(
        VARIANT *PropertyValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NextState(
        ISpeechGrammarRuleState **NextState) = 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 *PropertyName);

    HRESULT (STDMETHODCALLTYPE *get_PropertyId)(
        ISpeechGrammarRuleStateTransition *This,
        LONG *PropertyId);

    HRESULT (STDMETHODCALLTYPE *get_PropertyValue)(
        ISpeechGrammarRuleStateTransition *This,
        VARIANT *PropertyValue);

    HRESULT (STDMETHODCALLTYPE *get_NextState)(
        ISpeechGrammarRuleStateTransition *This,
        ISpeechGrammarRuleState **NextState);

    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,PropertyName) (This)->lpVtbl->get_PropertyName(This,PropertyName)
#define ISpeechGrammarRuleStateTransition_get_PropertyId(This,PropertyId) (This)->lpVtbl->get_PropertyId(This,PropertyId)
#define ISpeechGrammarRuleStateTransition_get_PropertyValue(This,PropertyValue) (This)->lpVtbl->get_PropertyValue(This,PropertyValue)
#define ISpeechGrammarRuleStateTransition_get_NextState(This,NextState) (This)->lpVtbl->get_NextState(This,NextState)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechGrammarRuleStateTransition_QueryInterface(ISpeechGrammarRuleStateTransition* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechGrammarRuleStateTransition_AddRef(ISpeechGrammarRuleStateTransition* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechGrammarRuleStateTransition_Release(ISpeechGrammarRuleStateTransition* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechGrammarRuleStateTransition_GetTypeInfoCount(ISpeechGrammarRuleStateTransition* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechGrammarRuleStateTransition_GetTypeInfo(ISpeechGrammarRuleStateTransition* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechGrammarRuleStateTransition_get_Type(ISpeechGrammarRuleStateTransition* This,SpeechGrammarRuleStateTransitionType *Type) {
    return This->lpVtbl->get_Type(This,Type);
}
static inline HRESULT ISpeechGrammarRuleStateTransition_get_Text(ISpeechGrammarRuleStateTransition* This,BSTR *Text) {
    return This->lpVtbl->get_Text(This,Text);
}
static inline HRESULT ISpeechGrammarRuleStateTransition_get_Rule(ISpeechGrammarRuleStateTransition* This,ISpeechGrammarRule **Rule) {
    return This->lpVtbl->get_Rule(This,Rule);
}
static inline HRESULT ISpeechGrammarRuleStateTransition_get_Weight(ISpeechGrammarRuleStateTransition* This,VARIANT *Weight) {
    return This->lpVtbl->get_Weight(This,Weight);
}
static inline HRESULT ISpeechGrammarRuleStateTransition_get_PropertyName(ISpeechGrammarRuleStateTransition* This,BSTR *PropertyName) {
    return This->lpVtbl->get_PropertyName(This,PropertyName);
}
static inline HRESULT ISpeechGrammarRuleStateTransition_get_PropertyId(ISpeechGrammarRuleStateTransition* This,LONG *PropertyId) {
    return This->lpVtbl->get_PropertyId(This,PropertyId);
}
static inline HRESULT ISpeechGrammarRuleStateTransition_get_PropertyValue(ISpeechGrammarRuleStateTransition* This,VARIANT *PropertyValue) {
    return This->lpVtbl->get_PropertyValue(This,PropertyValue);
}
static inline HRESULT ISpeechGrammarRuleStateTransition_get_NextState(ISpeechGrammarRuleStateTransition* This,ISpeechGrammarRuleState **NextState) {
    return This->lpVtbl->get_NextState(This,NextState);
}
#endif
#endif

#endif


#endif  /* __ISpeechGrammarRuleStateTransition_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 ActiveOffset) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ActiveOffset(
        LONG *ActiveOffset) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ActiveLength(
        LONG ActiveLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ActiveLength(
        LONG *ActiveLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_SelectionOffset(
        LONG SelectionOffset) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_SelectionOffset(
        LONG *SelectionOffset) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_SelectionLength(
        LONG SelectionLength) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_SelectionLength(
        LONG *SelectionLength) = 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 ActiveOffset);

    HRESULT (STDMETHODCALLTYPE *get_ActiveOffset)(
        ISpeechTextSelectionInformation *This,
        LONG *ActiveOffset);

    HRESULT (STDMETHODCALLTYPE *put_ActiveLength)(
        ISpeechTextSelectionInformation *This,
        LONG ActiveLength);

    HRESULT (STDMETHODCALLTYPE *get_ActiveLength)(
        ISpeechTextSelectionInformation *This,
        LONG *ActiveLength);

    HRESULT (STDMETHODCALLTYPE *put_SelectionOffset)(
        ISpeechTextSelectionInformation *This,
        LONG SelectionOffset);

    HRESULT (STDMETHODCALLTYPE *get_SelectionOffset)(
        ISpeechTextSelectionInformation *This,
        LONG *SelectionOffset);

    HRESULT (STDMETHODCALLTYPE *put_SelectionLength)(
        ISpeechTextSelectionInformation *This,
        LONG SelectionLength);

    HRESULT (STDMETHODCALLTYPE *get_SelectionLength)(
        ISpeechTextSelectionInformation *This,
        LONG *SelectionLength);

    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,ActiveOffset) (This)->lpVtbl->put_ActiveOffset(This,ActiveOffset)
#define ISpeechTextSelectionInformation_get_ActiveOffset(This,ActiveOffset) (This)->lpVtbl->get_ActiveOffset(This,ActiveOffset)
#define ISpeechTextSelectionInformation_put_ActiveLength(This,ActiveLength) (This)->lpVtbl->put_ActiveLength(This,ActiveLength)
#define ISpeechTextSelectionInformation_get_ActiveLength(This,ActiveLength) (This)->lpVtbl->get_ActiveLength(This,ActiveLength)
#define ISpeechTextSelectionInformation_put_SelectionOffset(This,SelectionOffset) (This)->lpVtbl->put_SelectionOffset(This,SelectionOffset)
#define ISpeechTextSelectionInformation_get_SelectionOffset(This,SelectionOffset) (This)->lpVtbl->get_SelectionOffset(This,SelectionOffset)
#define ISpeechTextSelectionInformation_put_SelectionLength(This,SelectionLength) (This)->lpVtbl->put_SelectionLength(This,SelectionLength)
#define ISpeechTextSelectionInformation_get_SelectionLength(This,SelectionLength) (This)->lpVtbl->get_SelectionLength(This,SelectionLength)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechTextSelectionInformation_QueryInterface(ISpeechTextSelectionInformation* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechTextSelectionInformation_AddRef(ISpeechTextSelectionInformation* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechTextSelectionInformation_Release(ISpeechTextSelectionInformation* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechTextSelectionInformation_GetTypeInfoCount(ISpeechTextSelectionInformation* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechTextSelectionInformation_GetTypeInfo(ISpeechTextSelectionInformation* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechTextSelectionInformation_put_ActiveOffset(ISpeechTextSelectionInformation* This,LONG ActiveOffset) {
    return This->lpVtbl->put_ActiveOffset(This,ActiveOffset);
}
static inline HRESULT ISpeechTextSelectionInformation_get_ActiveOffset(ISpeechTextSelectionInformation* This,LONG *ActiveOffset) {
    return This->lpVtbl->get_ActiveOffset(This,ActiveOffset);
}
static inline HRESULT ISpeechTextSelectionInformation_put_ActiveLength(ISpeechTextSelectionInformation* This,LONG ActiveLength) {
    return This->lpVtbl->put_ActiveLength(This,ActiveLength);
}
static inline HRESULT ISpeechTextSelectionInformation_get_ActiveLength(ISpeechTextSelectionInformation* This,LONG *ActiveLength) {
    return This->lpVtbl->get_ActiveLength(This,ActiveLength);
}
static inline HRESULT ISpeechTextSelectionInformation_put_SelectionOffset(ISpeechTextSelectionInformation* This,LONG SelectionOffset) {
    return This->lpVtbl->put_SelectionOffset(This,SelectionOffset);
}
static inline HRESULT ISpeechTextSelectionInformation_get_SelectionOffset(ISpeechTextSelectionInformation* This,LONG *SelectionOffset) {
    return This->lpVtbl->get_SelectionOffset(This,SelectionOffset);
}
static inline HRESULT ISpeechTextSelectionInformation_put_SelectionLength(ISpeechTextSelectionInformation* This,LONG SelectionLength) {
    return This->lpVtbl->put_SelectionLength(This,SelectionLength);
}
static inline HRESULT ISpeechTextSelectionInformation_get_SelectionLength(ISpeechTextSelectionInformation* This,LONG *SelectionLength) {
    return This->lpVtbl->get_SelectionLength(This,SelectionLength);
}
#endif
#endif

#endif


#endif  /* __ISpeechTextSelectionInformation_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 **PhraseInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE Alternates(
        LONG RequestCount,
        LONG StartElement,
        LONG Elements,
        ISpeechPhraseAlternates **Alternates) = 0;

    virtual HRESULT STDMETHODCALLTYPE Audio(
        LONG StartElement,
        LONG Elements,
        ISpeechMemoryStream **Stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE SpeakAudio(
        LONG StartElement,
        LONG Elements,
        SpeechVoiceSpeakFlags Flags,
        LONG *StreamNumber) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveToMemory(
        VARIANT *ResultBlock) = 0;

    virtual HRESULT STDMETHODCALLTYPE DiscardResultInfo(
        SpeechDiscardType ValueTypes) = 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 **PhraseInfo);

    HRESULT (STDMETHODCALLTYPE *Alternates)(
        ISpeechRecoResult *This,
        LONG RequestCount,
        LONG StartElement,
        LONG Elements,
        ISpeechPhraseAlternates **Alternates);

    HRESULT (STDMETHODCALLTYPE *Audio)(
        ISpeechRecoResult *This,
        LONG StartElement,
        LONG Elements,
        ISpeechMemoryStream **Stream);

    HRESULT (STDMETHODCALLTYPE *SpeakAudio)(
        ISpeechRecoResult *This,
        LONG StartElement,
        LONG Elements,
        SpeechVoiceSpeakFlags Flags,
        LONG *StreamNumber);

    HRESULT (STDMETHODCALLTYPE *SaveToMemory)(
        ISpeechRecoResult *This,
        VARIANT *ResultBlock);

    HRESULT (STDMETHODCALLTYPE *DiscardResultInfo)(
        ISpeechRecoResult *This,
        SpeechDiscardType ValueTypes);

    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,PhraseInfo) (This)->lpVtbl->get_PhraseInfo(This,PhraseInfo)
#define ISpeechRecoResult_Alternates(This,RequestCount,StartElement,Elements,Alternates) (This)->lpVtbl->Alternates(This,RequestCount,StartElement,Elements,Alternates)
#define ISpeechRecoResult_Audio(This,StartElement,Elements,Stream) (This)->lpVtbl->Audio(This,StartElement,Elements,Stream)
#define ISpeechRecoResult_SpeakAudio(This,StartElement,Elements,Flags,StreamNumber) (This)->lpVtbl->SpeakAudio(This,StartElement,Elements,Flags,StreamNumber)
#define ISpeechRecoResult_SaveToMemory(This,ResultBlock) (This)->lpVtbl->SaveToMemory(This,ResultBlock)
#define ISpeechRecoResult_DiscardResultInfo(This,ValueTypes) (This)->lpVtbl->DiscardResultInfo(This,ValueTypes)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechRecoResult_QueryInterface(ISpeechRecoResult* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechRecoResult_AddRef(ISpeechRecoResult* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechRecoResult_Release(ISpeechRecoResult* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechRecoResult_GetTypeInfoCount(ISpeechRecoResult* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechRecoResult_GetTypeInfo(ISpeechRecoResult* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechRecoResult_get_RecoContext(ISpeechRecoResult* This,ISpeechRecoContext **RecoContext) {
    return This->lpVtbl->get_RecoContext(This,RecoContext);
}
static inline HRESULT ISpeechRecoResult_get_Times(ISpeechRecoResult* This,ISpeechRecoResultTimes **Times) {
    return This->lpVtbl->get_Times(This,Times);
}
static inline HRESULT ISpeechRecoResult_putref_AudioFormat(ISpeechRecoResult* This,ISpeechAudioFormat *Format) {
    return This->lpVtbl->putref_AudioFormat(This,Format);
}
static inline HRESULT ISpeechRecoResult_get_AudioFormat(ISpeechRecoResult* This,ISpeechAudioFormat **Format) {
    return This->lpVtbl->get_AudioFormat(This,Format);
}
static inline HRESULT ISpeechRecoResult_get_PhraseInfo(ISpeechRecoResult* This,ISpeechPhraseInfo **PhraseInfo) {
    return This->lpVtbl->get_PhraseInfo(This,PhraseInfo);
}
static inline HRESULT ISpeechRecoResult_Alternates(ISpeechRecoResult* This,LONG RequestCount,LONG StartElement,LONG Elements,ISpeechPhraseAlternates **Alternates) {
    return This->lpVtbl->Alternates(This,RequestCount,StartElement,Elements,Alternates);
}
static inline HRESULT ISpeechRecoResult_Audio(ISpeechRecoResult* This,LONG StartElement,LONG Elements,ISpeechMemoryStream **Stream) {
    return This->lpVtbl->Audio(This,StartElement,Elements,Stream);
}
static inline HRESULT ISpeechRecoResult_SpeakAudio(ISpeechRecoResult* This,LONG StartElement,LONG Elements,SpeechVoiceSpeakFlags Flags,LONG *StreamNumber) {
    return This->lpVtbl->SpeakAudio(This,StartElement,Elements,Flags,StreamNumber);
}
static inline HRESULT ISpeechRecoResult_SaveToMemory(ISpeechRecoResult* This,VARIANT *ResultBlock) {
    return This->lpVtbl->SaveToMemory(This,ResultBlock);
}
static inline HRESULT ISpeechRecoResult_DiscardResultInfo(ISpeechRecoResult* This,SpeechDiscardType ValueTypes) {
    return This->lpVtbl->DiscardResultInfo(This,ValueTypes);
}
#endif
#endif

#endif


#endif  /* __ISpeechRecoResult_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechPhraseInfoBuilder interface
 */
#ifndef __ISpeechPhraseInfoBuilder_INTERFACE_DEFINED__
#define __ISpeechPhraseInfoBuilder_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhraseInfoBuilder, 0x3b151836, 0xdf3a, 0x4e0a, 0x84,0x6c, 0xd2,0xad,0xc9,0x33,0x43,0x33);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3b151836-df3a-4e0a-846c-d2adc9334333")
ISpeechPhraseInfoBuilder : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE RestorePhraseFromMemory(
        VARIANT *PhraseInMemory,
        ISpeechPhraseInfo **PhraseInfo) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhraseInfoBuilder, 0x3b151836, 0xdf3a, 0x4e0a, 0x84,0x6c, 0xd2,0xad,0xc9,0x33,0x43,0x33)
#endif
#else
typedef struct ISpeechPhraseInfoBuilderVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    /*** ISpeechPhraseInfoBuilder methods ***/
    HRESULT (STDMETHODCALLTYPE *RestorePhraseFromMemory)(
        ISpeechPhraseInfoBuilder *This,
        VARIANT *PhraseInMemory,
        ISpeechPhraseInfo **PhraseInfo);

    END_INTERFACE
} ISpeechPhraseInfoBuilderVtbl;

interface ISpeechPhraseInfoBuilder {
    CONST_VTBL ISpeechPhraseInfoBuilderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhraseInfoBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhraseInfoBuilder_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhraseInfoBuilder_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhraseInfoBuilder_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhraseInfoBuilder_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhraseInfoBuilder_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhraseInfoBuilder_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhraseInfoBuilder methods ***/
#define ISpeechPhraseInfoBuilder_RestorePhraseFromMemory(This,PhraseInMemory,PhraseInfo) (This)->lpVtbl->RestorePhraseFromMemory(This,PhraseInMemory,PhraseInfo)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhraseInfoBuilder_QueryInterface(ISpeechPhraseInfoBuilder* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhraseInfoBuilder_AddRef(ISpeechPhraseInfoBuilder* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhraseInfoBuilder_Release(ISpeechPhraseInfoBuilder* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhraseInfoBuilder_GetTypeInfoCount(ISpeechPhraseInfoBuilder* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhraseInfoBuilder_GetTypeInfo(ISpeechPhraseInfoBuilder* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ISpeechPhraseInfoBuilder_GetIDsOfNames(ISpeechPhraseInfoBuilder* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ISpeechPhraseInfoBuilder_Invoke(ISpeechPhraseInfoBuilder* 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);
}
/*** ISpeechPhraseInfoBuilder methods ***/
static inline HRESULT ISpeechPhraseInfoBuilder_RestorePhraseFromMemory(ISpeechPhraseInfoBuilder* This,VARIANT *PhraseInMemory,ISpeechPhraseInfo **PhraseInfo) {
    return This->lpVtbl->RestorePhraseFromMemory(This,PhraseInMemory,PhraseInfo);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseInfoBuilder_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *Time) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Length(
        VARIANT *Length) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_TickCount(
        LONG *TickCount) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_OffsetFromStart(
        VARIANT *OffsetFromStart) = 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 *Time);

    HRESULT (STDMETHODCALLTYPE *get_Length)(
        ISpeechRecoResultTimes *This,
        VARIANT *Length);

    HRESULT (STDMETHODCALLTYPE *get_TickCount)(
        ISpeechRecoResultTimes *This,
        LONG *TickCount);

    HRESULT (STDMETHODCALLTYPE *get_OffsetFromStart)(
        ISpeechRecoResultTimes *This,
        VARIANT *OffsetFromStart);

    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,Time) (This)->lpVtbl->get_StreamTime(This,Time)
#define ISpeechRecoResultTimes_get_Length(This,Length) (This)->lpVtbl->get_Length(This,Length)
#define ISpeechRecoResultTimes_get_TickCount(This,TickCount) (This)->lpVtbl->get_TickCount(This,TickCount)
#define ISpeechRecoResultTimes_get_OffsetFromStart(This,OffsetFromStart) (This)->lpVtbl->get_OffsetFromStart(This,OffsetFromStart)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechRecoResultTimes_QueryInterface(ISpeechRecoResultTimes* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechRecoResultTimes_AddRef(ISpeechRecoResultTimes* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechRecoResultTimes_Release(ISpeechRecoResultTimes* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechRecoResultTimes_GetTypeInfoCount(ISpeechRecoResultTimes* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechRecoResultTimes_GetTypeInfo(ISpeechRecoResultTimes* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechRecoResultTimes_get_StreamTime(ISpeechRecoResultTimes* This,VARIANT *Time) {
    return This->lpVtbl->get_StreamTime(This,Time);
}
static inline HRESULT ISpeechRecoResultTimes_get_Length(ISpeechRecoResultTimes* This,VARIANT *Length) {
    return This->lpVtbl->get_Length(This,Length);
}
static inline HRESULT ISpeechRecoResultTimes_get_TickCount(ISpeechRecoResultTimes* This,LONG *TickCount) {
    return This->lpVtbl->get_TickCount(This,TickCount);
}
static inline HRESULT ISpeechRecoResultTimes_get_OffsetFromStart(ISpeechRecoResultTimes* This,VARIANT *OffsetFromStart) {
    return This->lpVtbl->get_OffsetFromStart(This,OffsetFromStart);
}
#endif
#endif

#endif


#endif  /* __ISpeechRecoResultTimes_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 **RecoResult) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_StartElementInResult(
        LONG *StartElement) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumberOfElementsInResult(
        LONG *NumberOfElements) = 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 **RecoResult);

    HRESULT (STDMETHODCALLTYPE *get_StartElementInResult)(
        ISpeechPhraseAlternate *This,
        LONG *StartElement);

    HRESULT (STDMETHODCALLTYPE *get_NumberOfElementsInResult)(
        ISpeechPhraseAlternate *This,
        LONG *NumberOfElements);

    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,RecoResult) (This)->lpVtbl->get_RecoResult(This,RecoResult)
#define ISpeechPhraseAlternate_get_StartElementInResult(This,StartElement) (This)->lpVtbl->get_StartElementInResult(This,StartElement)
#define ISpeechPhraseAlternate_get_NumberOfElementsInResult(This,NumberOfElements) (This)->lpVtbl->get_NumberOfElementsInResult(This,NumberOfElements)
#define ISpeechPhraseAlternate_get_PhraseInfo(This,PhraseInfo) (This)->lpVtbl->get_PhraseInfo(This,PhraseInfo)
#define ISpeechPhraseAlternate_Commit(This) (This)->lpVtbl->Commit(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhraseAlternate_QueryInterface(ISpeechPhraseAlternate* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhraseAlternate_AddRef(ISpeechPhraseAlternate* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhraseAlternate_Release(ISpeechPhraseAlternate* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhraseAlternate_GetTypeInfoCount(ISpeechPhraseAlternate* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhraseAlternate_GetTypeInfo(ISpeechPhraseAlternate* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechPhraseAlternate_get_RecoResult(ISpeechPhraseAlternate* This,ISpeechRecoResult **RecoResult) {
    return This->lpVtbl->get_RecoResult(This,RecoResult);
}
static inline HRESULT ISpeechPhraseAlternate_get_StartElementInResult(ISpeechPhraseAlternate* This,LONG *StartElement) {
    return This->lpVtbl->get_StartElementInResult(This,StartElement);
}
static inline HRESULT ISpeechPhraseAlternate_get_NumberOfElementsInResult(ISpeechPhraseAlternate* This,LONG *NumberOfElements) {
    return This->lpVtbl->get_NumberOfElementsInResult(This,NumberOfElements);
}
static inline HRESULT ISpeechPhraseAlternate_get_PhraseInfo(ISpeechPhraseAlternate* This,ISpeechPhraseInfo **PhraseInfo) {
    return This->lpVtbl->get_PhraseInfo(This,PhraseInfo);
}
static inline HRESULT ISpeechPhraseAlternate_Commit(ISpeechPhraseAlternate* This) {
    return This->lpVtbl->Commit(This);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseAlternate_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 **PhraseAlternate) = 0;

    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
        IUnknown **EnumVARIANT) = 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 **PhraseAlternate);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechPhraseAlternates *This,
        IUnknown **EnumVARIANT);

    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,PhraseAlternate) (This)->lpVtbl->Item(This,Index,PhraseAlternate)
#define ISpeechPhraseAlternates_get__NewEnum(This,EnumVARIANT) (This)->lpVtbl->get__NewEnum(This,EnumVARIANT)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhraseAlternates_QueryInterface(ISpeechPhraseAlternates* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhraseAlternates_AddRef(ISpeechPhraseAlternates* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhraseAlternates_Release(ISpeechPhraseAlternates* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhraseAlternates_GetTypeInfoCount(ISpeechPhraseAlternates* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhraseAlternates_GetTypeInfo(ISpeechPhraseAlternates* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechPhraseAlternates_get_Count(ISpeechPhraseAlternates* This,LONG *Count) {
    return This->lpVtbl->get_Count(This,Count);
}
static inline HRESULT ISpeechPhraseAlternates_Item(ISpeechPhraseAlternates* This,LONG Index,ISpeechPhraseAlternate **PhraseAlternate) {
    return This->lpVtbl->Item(This,Index,PhraseAlternate);
}
static inline HRESULT ISpeechPhraseAlternates_get__NewEnum(ISpeechPhraseAlternates* This,IUnknown **EnumVARIANT) {
    return This->lpVtbl->get__NewEnum(This,EnumVARIANT);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseAlternates_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *LanguageId) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_GrammarId(
        VARIANT *GrammarId) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_StartTime(
        VARIANT *StartTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioStreamPosition(
        VARIANT *AudioStreamPosition) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioSizeBytes(
        LONG *pAudioSizeBytes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RetainedSizeBytes(
        LONG *RetainedSizeBytes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioSizeTime(
        LONG *AudioSizeTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Rule(
        ISpeechPhraseRule **Rule) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Properties(
        ISpeechPhraseProperties **Properties) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Elements(
        ISpeechPhraseElements **Elements) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Replacements(
        ISpeechPhraseReplacements **Replacements) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EngineId(
        BSTR *EngineIdGuid) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EnginePrivateData(
        VARIANT *PrivateData) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveToMemory(
        VARIANT *PhraseBlock) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetText(
        LONG StartElement,
        LONG Elements,
        VARIANT_BOOL UseReplacements,
        BSTR *Text) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDisplayAttributes(
        LONG StartElement,
        LONG Elements,
        VARIANT_BOOL UseReplacements,
        SpeechDisplayAttributes *DisplayAttributes) = 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 *LanguageId);

    HRESULT (STDMETHODCALLTYPE *get_GrammarId)(
        ISpeechPhraseInfo *This,
        VARIANT *GrammarId);

    HRESULT (STDMETHODCALLTYPE *get_StartTime)(
        ISpeechPhraseInfo *This,
        VARIANT *StartTime);

    HRESULT (STDMETHODCALLTYPE *get_AudioStreamPosition)(
        ISpeechPhraseInfo *This,
        VARIANT *AudioStreamPosition);

    HRESULT (STDMETHODCALLTYPE *get_AudioSizeBytes)(
        ISpeechPhraseInfo *This,
        LONG *pAudioSizeBytes);

    HRESULT (STDMETHODCALLTYPE *get_RetainedSizeBytes)(
        ISpeechPhraseInfo *This,
        LONG *RetainedSizeBytes);

    HRESULT (STDMETHODCALLTYPE *get_AudioSizeTime)(
        ISpeechPhraseInfo *This,
        LONG *AudioSizeTime);

    HRESULT (STDMETHODCALLTYPE *get_Rule)(
        ISpeechPhraseInfo *This,
        ISpeechPhraseRule **Rule);

    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        ISpeechPhraseInfo *This,
        ISpeechPhraseProperties **Properties);

    HRESULT (STDMETHODCALLTYPE *get_Elements)(
        ISpeechPhraseInfo *This,
        ISpeechPhraseElements **Elements);

    HRESULT (STDMETHODCALLTYPE *get_Replacements)(
        ISpeechPhraseInfo *This,
        ISpeechPhraseReplacements **Replacements);

    HRESULT (STDMETHODCALLTYPE *get_EngineId)(
        ISpeechPhraseInfo *This,
        BSTR *EngineIdGuid);

    HRESULT (STDMETHODCALLTYPE *get_EnginePrivateData)(
        ISpeechPhraseInfo *This,
        VARIANT *PrivateData);

    HRESULT (STDMETHODCALLTYPE *SaveToMemory)(
        ISpeechPhraseInfo *This,
        VARIANT *PhraseBlock);

    HRESULT (STDMETHODCALLTYPE *GetText)(
        ISpeechPhraseInfo *This,
        LONG StartElement,
        LONG Elements,
        VARIANT_BOOL UseReplacements,
        BSTR *Text);

    HRESULT (STDMETHODCALLTYPE *GetDisplayAttributes)(
        ISpeechPhraseInfo *This,
        LONG StartElement,
        LONG Elements,
        VARIANT_BOOL UseReplacements,
        SpeechDisplayAttributes *DisplayAttributes);

    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,LanguageId) (This)->lpVtbl->get_LanguageId(This,LanguageId)
#define ISpeechPhraseInfo_get_GrammarId(This,GrammarId) (This)->lpVtbl->get_GrammarId(This,GrammarId)
#define ISpeechPhraseInfo_get_StartTime(This,StartTime) (This)->lpVtbl->get_StartTime(This,StartTime)
#define ISpeechPhraseInfo_get_AudioStreamPosition(This,AudioStreamPosition) (This)->lpVtbl->get_AudioStreamPosition(This,AudioStreamPosition)
#define ISpeechPhraseInfo_get_AudioSizeBytes(This,pAudioSizeBytes) (This)->lpVtbl->get_AudioSizeBytes(This,pAudioSizeBytes)
#define ISpeechPhraseInfo_get_RetainedSizeBytes(This,RetainedSizeBytes) (This)->lpVtbl->get_RetainedSizeBytes(This,RetainedSizeBytes)
#define ISpeechPhraseInfo_get_AudioSizeTime(This,AudioSizeTime) (This)->lpVtbl->get_AudioSizeTime(This,AudioSizeTime)
#define ISpeechPhraseInfo_get_Rule(This,Rule) (This)->lpVtbl->get_Rule(This,Rule)
#define ISpeechPhraseInfo_get_Properties(This,Properties) (This)->lpVtbl->get_Properties(This,Properties)
#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,EngineIdGuid) (This)->lpVtbl->get_EngineId(This,EngineIdGuid)
#define ISpeechPhraseInfo_get_EnginePrivateData(This,PrivateData) (This)->lpVtbl->get_EnginePrivateData(This,PrivateData)
#define ISpeechPhraseInfo_SaveToMemory(This,PhraseBlock) (This)->lpVtbl->SaveToMemory(This,PhraseBlock)
#define ISpeechPhraseInfo_GetText(This,StartElement,Elements,UseReplacements,Text) (This)->lpVtbl->GetText(This,StartElement,Elements,UseReplacements,Text)
#define ISpeechPhraseInfo_GetDisplayAttributes(This,StartElement,Elements,UseReplacements,DisplayAttributes) (This)->lpVtbl->GetDisplayAttributes(This,StartElement,Elements,UseReplacements,DisplayAttributes)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhraseInfo_QueryInterface(ISpeechPhraseInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhraseInfo_AddRef(ISpeechPhraseInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhraseInfo_Release(ISpeechPhraseInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhraseInfo_GetTypeInfoCount(ISpeechPhraseInfo* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhraseInfo_GetTypeInfo(ISpeechPhraseInfo* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechPhraseInfo_get_LanguageId(ISpeechPhraseInfo* This,LONG *LanguageId) {
    return This->lpVtbl->get_LanguageId(This,LanguageId);
}
static inline HRESULT ISpeechPhraseInfo_get_GrammarId(ISpeechPhraseInfo* This,VARIANT *GrammarId) {
    return This->lpVtbl->get_GrammarId(This,GrammarId);
}
static inline HRESULT ISpeechPhraseInfo_get_StartTime(ISpeechPhraseInfo* This,VARIANT *StartTime) {
    return This->lpVtbl->get_StartTime(This,StartTime);
}
static inline HRESULT ISpeechPhraseInfo_get_AudioStreamPosition(ISpeechPhraseInfo* This,VARIANT *AudioStreamPosition) {
    return This->lpVtbl->get_AudioStreamPosition(This,AudioStreamPosition);
}
static inline HRESULT ISpeechPhraseInfo_get_AudioSizeBytes(ISpeechPhraseInfo* This,LONG *pAudioSizeBytes) {
    return This->lpVtbl->get_AudioSizeBytes(This,pAudioSizeBytes);
}
static inline HRESULT ISpeechPhraseInfo_get_RetainedSizeBytes(ISpeechPhraseInfo* This,LONG *RetainedSizeBytes) {
    return This->lpVtbl->get_RetainedSizeBytes(This,RetainedSizeBytes);
}
static inline HRESULT ISpeechPhraseInfo_get_AudioSizeTime(ISpeechPhraseInfo* This,LONG *AudioSizeTime) {
    return This->lpVtbl->get_AudioSizeTime(This,AudioSizeTime);
}
static inline HRESULT ISpeechPhraseInfo_get_Rule(ISpeechPhraseInfo* This,ISpeechPhraseRule **Rule) {
    return This->lpVtbl->get_Rule(This,Rule);
}
static inline HRESULT ISpeechPhraseInfo_get_Properties(ISpeechPhraseInfo* This,ISpeechPhraseProperties **Properties) {
    return This->lpVtbl->get_Properties(This,Properties);
}
static inline HRESULT ISpeechPhraseInfo_get_Elements(ISpeechPhraseInfo* This,ISpeechPhraseElements **Elements) {
    return This->lpVtbl->get_Elements(This,Elements);
}
static inline HRESULT ISpeechPhraseInfo_get_Replacements(ISpeechPhraseInfo* This,ISpeechPhraseReplacements **Replacements) {
    return This->lpVtbl->get_Replacements(This,Replacements);
}
static inline HRESULT ISpeechPhraseInfo_get_EngineId(ISpeechPhraseInfo* This,BSTR *EngineIdGuid) {
    return This->lpVtbl->get_EngineId(This,EngineIdGuid);
}
static inline HRESULT ISpeechPhraseInfo_get_EnginePrivateData(ISpeechPhraseInfo* This,VARIANT *PrivateData) {
    return This->lpVtbl->get_EnginePrivateData(This,PrivateData);
}
static inline HRESULT ISpeechPhraseInfo_SaveToMemory(ISpeechPhraseInfo* This,VARIANT *PhraseBlock) {
    return This->lpVtbl->SaveToMemory(This,PhraseBlock);
}
static inline HRESULT ISpeechPhraseInfo_GetText(ISpeechPhraseInfo* This,LONG StartElement,LONG Elements,VARIANT_BOOL UseReplacements,BSTR *Text) {
    return This->lpVtbl->GetText(This,StartElement,Elements,UseReplacements,Text);
}
static inline HRESULT ISpeechPhraseInfo_GetDisplayAttributes(ISpeechPhraseInfo* This,LONG StartElement,LONG Elements,VARIANT_BOOL UseReplacements,SpeechDisplayAttributes *DisplayAttributes) {
    return This->lpVtbl->GetDisplayAttributes(This,StartElement,Elements,UseReplacements,DisplayAttributes);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *AudioTimeOffset) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioSizeTime(
        LONG *AudioSizeTime) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioStreamOffset(
        LONG *AudioStreamOffset) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AudioSizeBytes(
        LONG *AudioSizeBytes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RetainedStreamOffset(
        LONG *RetainedStreamOffset) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RetainedSizeBytes(
        LONG *RetainedSizeBytes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DisplayText(
        BSTR *DisplayText) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LexicalForm(
        BSTR *LexicalForm) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Pronunciation(
        VARIANT *Pronunciation) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DisplayAttributes(
        SpeechDisplayAttributes *DisplayAttributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RequiredConfidence(
        SpeechEngineConfidence *RequiredConfidence) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ActualConfidence(
        SpeechEngineConfidence *ActualConfidence) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EngineConfidence(
        float *EngineConfidence) = 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 *AudioTimeOffset);

    HRESULT (STDMETHODCALLTYPE *get_AudioSizeTime)(
        ISpeechPhraseElement *This,
        LONG *AudioSizeTime);

    HRESULT (STDMETHODCALLTYPE *get_AudioStreamOffset)(
        ISpeechPhraseElement *This,
        LONG *AudioStreamOffset);

    HRESULT (STDMETHODCALLTYPE *get_AudioSizeBytes)(
        ISpeechPhraseElement *This,
        LONG *AudioSizeBytes);

    HRESULT (STDMETHODCALLTYPE *get_RetainedStreamOffset)(
        ISpeechPhraseElement *This,
        LONG *RetainedStreamOffset);

    HRESULT (STDMETHODCALLTYPE *get_RetainedSizeBytes)(
        ISpeechPhraseElement *This,
        LONG *RetainedSizeBytes);

    HRESULT (STDMETHODCALLTYPE *get_DisplayText)(
        ISpeechPhraseElement *This,
        BSTR *DisplayText);

    HRESULT (STDMETHODCALLTYPE *get_LexicalForm)(
        ISpeechPhraseElement *This,
        BSTR *LexicalForm);

    HRESULT (STDMETHODCALLTYPE *get_Pronunciation)(
        ISpeechPhraseElement *This,
        VARIANT *Pronunciation);

    HRESULT (STDMETHODCALLTYPE *get_DisplayAttributes)(
        ISpeechPhraseElement *This,
        SpeechDisplayAttributes *DisplayAttributes);

    HRESULT (STDMETHODCALLTYPE *get_RequiredConfidence)(
        ISpeechPhraseElement *This,
        SpeechEngineConfidence *RequiredConfidence);

    HRESULT (STDMETHODCALLTYPE *get_ActualConfidence)(
        ISpeechPhraseElement *This,
        SpeechEngineConfidence *ActualConfidence);

    HRESULT (STDMETHODCALLTYPE *get_EngineConfidence)(
        ISpeechPhraseElement *This,
        float *EngineConfidence);

    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,AudioTimeOffset) (This)->lpVtbl->get_AudioTimeOffset(This,AudioTimeOffset)
#define ISpeechPhraseElement_get_AudioSizeTime(This,AudioSizeTime) (This)->lpVtbl->get_AudioSizeTime(This,AudioSizeTime)
#define ISpeechPhraseElement_get_AudioStreamOffset(This,AudioStreamOffset) (This)->lpVtbl->get_AudioStreamOffset(This,AudioStreamOffset)
#define ISpeechPhraseElement_get_AudioSizeBytes(This,AudioSizeBytes) (This)->lpVtbl->get_AudioSizeBytes(This,AudioSizeBytes)
#define ISpeechPhraseElement_get_RetainedStreamOffset(This,RetainedStreamOffset) (This)->lpVtbl->get_RetainedStreamOffset(This,RetainedStreamOffset)
#define ISpeechPhraseElement_get_RetainedSizeBytes(This,RetainedSizeBytes) (This)->lpVtbl->get_RetainedSizeBytes(This,RetainedSizeBytes)
#define ISpeechPhraseElement_get_DisplayText(This,DisplayText) (This)->lpVtbl->get_DisplayText(This,DisplayText)
#define ISpeechPhraseElement_get_LexicalForm(This,LexicalForm) (This)->lpVtbl->get_LexicalForm(This,LexicalForm)
#define ISpeechPhraseElement_get_Pronunciation(This,Pronunciation) (This)->lpVtbl->get_Pronunciation(This,Pronunciation)
#define ISpeechPhraseElement_get_DisplayAttributes(This,DisplayAttributes) (This)->lpVtbl->get_DisplayAttributes(This,DisplayAttributes)
#define ISpeechPhraseElement_get_RequiredConfidence(This,RequiredConfidence) (This)->lpVtbl->get_RequiredConfidence(This,RequiredConfidence)
#define ISpeechPhraseElement_get_ActualConfidence(This,ActualConfidence) (This)->lpVtbl->get_ActualConfidence(This,ActualConfidence)
#define ISpeechPhraseElement_get_EngineConfidence(This,EngineConfidence) (This)->lpVtbl->get_EngineConfidence(This,EngineConfidence)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhraseElement_QueryInterface(ISpeechPhraseElement* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhraseElement_AddRef(ISpeechPhraseElement* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhraseElement_Release(ISpeechPhraseElement* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhraseElement_GetTypeInfoCount(ISpeechPhraseElement* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhraseElement_GetTypeInfo(ISpeechPhraseElement* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechPhraseElement_get_AudioTimeOffset(ISpeechPhraseElement* This,LONG *AudioTimeOffset) {
    return This->lpVtbl->get_AudioTimeOffset(This,AudioTimeOffset);
}
static inline HRESULT ISpeechPhraseElement_get_AudioSizeTime(ISpeechPhraseElement* This,LONG *AudioSizeTime) {
    return This->lpVtbl->get_AudioSizeTime(This,AudioSizeTime);
}
static inline HRESULT ISpeechPhraseElement_get_AudioStreamOffset(ISpeechPhraseElement* This,LONG *AudioStreamOffset) {
    return This->lpVtbl->get_AudioStreamOffset(This,AudioStreamOffset);
}
static inline HRESULT ISpeechPhraseElement_get_AudioSizeBytes(ISpeechPhraseElement* This,LONG *AudioSizeBytes) {
    return This->lpVtbl->get_AudioSizeBytes(This,AudioSizeBytes);
}
static inline HRESULT ISpeechPhraseElement_get_RetainedStreamOffset(ISpeechPhraseElement* This,LONG *RetainedStreamOffset) {
    return This->lpVtbl->get_RetainedStreamOffset(This,RetainedStreamOffset);
}
static inline HRESULT ISpeechPhraseElement_get_RetainedSizeBytes(ISpeechPhraseElement* This,LONG *RetainedSizeBytes) {
    return This->lpVtbl->get_RetainedSizeBytes(This,RetainedSizeBytes);
}
static inline HRESULT ISpeechPhraseElement_get_DisplayText(ISpeechPhraseElement* This,BSTR *DisplayText) {
    return This->lpVtbl->get_DisplayText(This,DisplayText);
}
static inline HRESULT ISpeechPhraseElement_get_LexicalForm(ISpeechPhraseElement* This,BSTR *LexicalForm) {
    return This->lpVtbl->get_LexicalForm(This,LexicalForm);
}
static inline HRESULT ISpeechPhraseElement_get_Pronunciation(ISpeechPhraseElement* This,VARIANT *Pronunciation) {
    return This->lpVtbl->get_Pronunciation(This,Pronunciation);
}
static inline HRESULT ISpeechPhraseElement_get_DisplayAttributes(ISpeechPhraseElement* This,SpeechDisplayAttributes *DisplayAttributes) {
    return This->lpVtbl->get_DisplayAttributes(This,DisplayAttributes);
}
static inline HRESULT ISpeechPhraseElement_get_RequiredConfidence(ISpeechPhraseElement* This,SpeechEngineConfidence *RequiredConfidence) {
    return This->lpVtbl->get_RequiredConfidence(This,RequiredConfidence);
}
static inline HRESULT ISpeechPhraseElement_get_ActualConfidence(ISpeechPhraseElement* This,SpeechEngineConfidence *ActualConfidence) {
    return This->lpVtbl->get_ActualConfidence(This,ActualConfidence);
}
static inline HRESULT ISpeechPhraseElement_get_EngineConfidence(ISpeechPhraseElement* This,float *EngineConfidence) {
    return This->lpVtbl->get_EngineConfidence(This,EngineConfidence);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseElement_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 **EnumVARIANT) = 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 **EnumVARIANT);

    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,EnumVARIANT) (This)->lpVtbl->get__NewEnum(This,EnumVARIANT)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhraseElements_QueryInterface(ISpeechPhraseElements* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhraseElements_AddRef(ISpeechPhraseElements* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhraseElements_Release(ISpeechPhraseElements* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhraseElements_GetTypeInfoCount(ISpeechPhraseElements* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhraseElements_GetTypeInfo(ISpeechPhraseElements* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechPhraseElements_get_Count(ISpeechPhraseElements* This,LONG *Count) {
    return This->lpVtbl->get_Count(This,Count);
}
static inline HRESULT ISpeechPhraseElements_Item(ISpeechPhraseElements* This,LONG Index,ISpeechPhraseElement **Element) {
    return This->lpVtbl->Item(This,Index,Element);
}
static inline HRESULT ISpeechPhraseElements_get__NewEnum(ISpeechPhraseElements* This,IUnknown **EnumVARIANT) {
    return This->lpVtbl->get__NewEnum(This,EnumVARIANT);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseElements_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *DisplayAttributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Text(
        BSTR *Text) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_FirstElement(
        LONG *FirstElement) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumberOfElements(
        LONG *NumberOfElements) = 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 *DisplayAttributes);

    HRESULT (STDMETHODCALLTYPE *get_Text)(
        ISpeechPhraseReplacement *This,
        BSTR *Text);

    HRESULT (STDMETHODCALLTYPE *get_FirstElement)(
        ISpeechPhraseReplacement *This,
        LONG *FirstElement);

    HRESULT (STDMETHODCALLTYPE *get_NumberOfElements)(
        ISpeechPhraseReplacement *This,
        LONG *NumberOfElements);

    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,DisplayAttributes) (This)->lpVtbl->get_DisplayAttributes(This,DisplayAttributes)
#define ISpeechPhraseReplacement_get_Text(This,Text) (This)->lpVtbl->get_Text(This,Text)
#define ISpeechPhraseReplacement_get_FirstElement(This,FirstElement) (This)->lpVtbl->get_FirstElement(This,FirstElement)
#define ISpeechPhraseReplacement_get_NumberOfElements(This,NumberOfElements) (This)->lpVtbl->get_NumberOfElements(This,NumberOfElements)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhraseReplacement_QueryInterface(ISpeechPhraseReplacement* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhraseReplacement_AddRef(ISpeechPhraseReplacement* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhraseReplacement_Release(ISpeechPhraseReplacement* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhraseReplacement_GetTypeInfoCount(ISpeechPhraseReplacement* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhraseReplacement_GetTypeInfo(ISpeechPhraseReplacement* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechPhraseReplacement_get_DisplayAttributes(ISpeechPhraseReplacement* This,SpeechDisplayAttributes *DisplayAttributes) {
    return This->lpVtbl->get_DisplayAttributes(This,DisplayAttributes);
}
static inline HRESULT ISpeechPhraseReplacement_get_Text(ISpeechPhraseReplacement* This,BSTR *Text) {
    return This->lpVtbl->get_Text(This,Text);
}
static inline HRESULT ISpeechPhraseReplacement_get_FirstElement(ISpeechPhraseReplacement* This,LONG *FirstElement) {
    return This->lpVtbl->get_FirstElement(This,FirstElement);
}
static inline HRESULT ISpeechPhraseReplacement_get_NumberOfElements(ISpeechPhraseReplacement* This,LONG *NumberOfElements) {
    return This->lpVtbl->get_NumberOfElements(This,NumberOfElements);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseReplacement_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 **EnumVARIANT) = 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 **EnumVARIANT);

    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,EnumVARIANT) (This)->lpVtbl->get__NewEnum(This,EnumVARIANT)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhraseReplacements_QueryInterface(ISpeechPhraseReplacements* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhraseReplacements_AddRef(ISpeechPhraseReplacements* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhraseReplacements_Release(ISpeechPhraseReplacements* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhraseReplacements_GetTypeInfoCount(ISpeechPhraseReplacements* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhraseReplacements_GetTypeInfo(ISpeechPhraseReplacements* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechPhraseReplacements_get_Count(ISpeechPhraseReplacements* This,LONG *Count) {
    return This->lpVtbl->get_Count(This,Count);
}
static inline HRESULT ISpeechPhraseReplacements_Item(ISpeechPhraseReplacements* This,LONG Index,ISpeechPhraseReplacement **Reps) {
    return This->lpVtbl->Item(This,Index,Reps);
}
static inline HRESULT ISpeechPhraseReplacements_get__NewEnum(ISpeechPhraseReplacements* This,IUnknown **EnumVARIANT) {
    return This->lpVtbl->get__NewEnum(This,EnumVARIANT);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseReplacements_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *FirstElement) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumberOfElements(
        LONG *NumberOfElements) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EngineConfidence(
        float *Confidence) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Confidence(
        SpeechEngineConfidence *Confidence) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Parent(
        ISpeechPhraseProperty **ParentProperty) = 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 *FirstElement);

    HRESULT (STDMETHODCALLTYPE *get_NumberOfElements)(
        ISpeechPhraseProperty *This,
        LONG *NumberOfElements);

    HRESULT (STDMETHODCALLTYPE *get_EngineConfidence)(
        ISpeechPhraseProperty *This,
        float *Confidence);

    HRESULT (STDMETHODCALLTYPE *get_Confidence)(
        ISpeechPhraseProperty *This,
        SpeechEngineConfidence *Confidence);

    HRESULT (STDMETHODCALLTYPE *get_Parent)(
        ISpeechPhraseProperty *This,
        ISpeechPhraseProperty **ParentProperty);

    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,FirstElement) (This)->lpVtbl->get_FirstElement(This,FirstElement)
#define ISpeechPhraseProperty_get_NumberOfElements(This,NumberOfElements) (This)->lpVtbl->get_NumberOfElements(This,NumberOfElements)
#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,ParentProperty) (This)->lpVtbl->get_Parent(This,ParentProperty)
#define ISpeechPhraseProperty_get_Children(This,Children) (This)->lpVtbl->get_Children(This,Children)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhraseProperty_QueryInterface(ISpeechPhraseProperty* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhraseProperty_AddRef(ISpeechPhraseProperty* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhraseProperty_Release(ISpeechPhraseProperty* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhraseProperty_GetTypeInfoCount(ISpeechPhraseProperty* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhraseProperty_GetTypeInfo(ISpeechPhraseProperty* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechPhraseProperty_get_Name(ISpeechPhraseProperty* This,BSTR *Name) {
    return This->lpVtbl->get_Name(This,Name);
}
static inline HRESULT ISpeechPhraseProperty_get_Id(ISpeechPhraseProperty* This,LONG *Id) {
    return This->lpVtbl->get_Id(This,Id);
}
static inline HRESULT ISpeechPhraseProperty_get_Value(ISpeechPhraseProperty* This,VARIANT *Value) {
    return This->lpVtbl->get_Value(This,Value);
}
static inline HRESULT ISpeechPhraseProperty_get_FirstElement(ISpeechPhraseProperty* This,LONG *FirstElement) {
    return This->lpVtbl->get_FirstElement(This,FirstElement);
}
static inline HRESULT ISpeechPhraseProperty_get_NumberOfElements(ISpeechPhraseProperty* This,LONG *NumberOfElements) {
    return This->lpVtbl->get_NumberOfElements(This,NumberOfElements);
}
static inline HRESULT ISpeechPhraseProperty_get_EngineConfidence(ISpeechPhraseProperty* This,float *Confidence) {
    return This->lpVtbl->get_EngineConfidence(This,Confidence);
}
static inline HRESULT ISpeechPhraseProperty_get_Confidence(ISpeechPhraseProperty* This,SpeechEngineConfidence *Confidence) {
    return This->lpVtbl->get_Confidence(This,Confidence);
}
static inline HRESULT ISpeechPhraseProperty_get_Parent(ISpeechPhraseProperty* This,ISpeechPhraseProperty **ParentProperty) {
    return This->lpVtbl->get_Parent(This,ParentProperty);
}
static inline HRESULT ISpeechPhraseProperty_get_Children(ISpeechPhraseProperty* This,ISpeechPhraseProperties **Children) {
    return This->lpVtbl->get_Children(This,Children);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseProperty_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 **Property) = 0;

    virtual HRESULT STDMETHODCALLTYPE get__NewEnum(
        IUnknown **EnumVARIANT) = 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 **Property);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechPhraseProperties *This,
        IUnknown **EnumVARIANT);

    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,Property) (This)->lpVtbl->Item(This,Index,Property)
#define ISpeechPhraseProperties_get__NewEnum(This,EnumVARIANT) (This)->lpVtbl->get__NewEnum(This,EnumVARIANT)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhraseProperties_QueryInterface(ISpeechPhraseProperties* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhraseProperties_AddRef(ISpeechPhraseProperties* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhraseProperties_Release(ISpeechPhraseProperties* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhraseProperties_GetTypeInfoCount(ISpeechPhraseProperties* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhraseProperties_GetTypeInfo(ISpeechPhraseProperties* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechPhraseProperties_get_Count(ISpeechPhraseProperties* This,LONG *Count) {
    return This->lpVtbl->get_Count(This,Count);
}
static inline HRESULT ISpeechPhraseProperties_Item(ISpeechPhraseProperties* This,LONG Index,ISpeechPhraseProperty **Property) {
    return This->lpVtbl->Item(This,Index,Property);
}
static inline HRESULT ISpeechPhraseProperties_get__NewEnum(ISpeechPhraseProperties* This,IUnknown **EnumVARIANT) {
    return This->lpVtbl->get__NewEnum(This,EnumVARIANT);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseProperties_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 *FirstElement) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumberOfElements(
        LONG *NumberOfElements) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Parent(
        ISpeechPhraseRule **Parent) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Children(
        ISpeechPhraseRules **Children) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Confidence(
        SpeechEngineConfidence *ActualConfidence) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EngineConfidence(
        float *EngineConfidence) = 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 *FirstElement);

    HRESULT (STDMETHODCALLTYPE *get_NumberOfElements)(
        ISpeechPhraseRule *This,
        LONG *NumberOfElements);

    HRESULT (STDMETHODCALLTYPE *get_Parent)(
        ISpeechPhraseRule *This,
        ISpeechPhraseRule **Parent);

    HRESULT (STDMETHODCALLTYPE *get_Children)(
        ISpeechPhraseRule *This,
        ISpeechPhraseRules **Children);

    HRESULT (STDMETHODCALLTYPE *get_Confidence)(
        ISpeechPhraseRule *This,
        SpeechEngineConfidence *ActualConfidence);

    HRESULT (STDMETHODCALLTYPE *get_EngineConfidence)(
        ISpeechPhraseRule *This,
        float *EngineConfidence);

    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,FirstElement) (This)->lpVtbl->get_FirstElement(This,FirstElement)
#define ISpeechPhraseRule_get_NumberOfElements(This,NumberOfElements) (This)->lpVtbl->get_NumberOfElements(This,NumberOfElements)
#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,ActualConfidence) (This)->lpVtbl->get_Confidence(This,ActualConfidence)
#define ISpeechPhraseRule_get_EngineConfidence(This,EngineConfidence) (This)->lpVtbl->get_EngineConfidence(This,EngineConfidence)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhraseRule_QueryInterface(ISpeechPhraseRule* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhraseRule_AddRef(ISpeechPhraseRule* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhraseRule_Release(ISpeechPhraseRule* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhraseRule_GetTypeInfoCount(ISpeechPhraseRule* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhraseRule_GetTypeInfo(ISpeechPhraseRule* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechPhraseRule_get_Name(ISpeechPhraseRule* This,BSTR *Name) {
    return This->lpVtbl->get_Name(This,Name);
}
static inline HRESULT ISpeechPhraseRule_get_Id(ISpeechPhraseRule* This,LONG *Id) {
    return This->lpVtbl->get_Id(This,Id);
}
static inline HRESULT ISpeechPhraseRule_get_FirstElement(ISpeechPhraseRule* This,LONG *FirstElement) {
    return This->lpVtbl->get_FirstElement(This,FirstElement);
}
static inline HRESULT ISpeechPhraseRule_get_NumberOfElements(ISpeechPhraseRule* This,LONG *NumberOfElements) {
    return This->lpVtbl->get_NumberOfElements(This,NumberOfElements);
}
static inline HRESULT ISpeechPhraseRule_get_Parent(ISpeechPhraseRule* This,ISpeechPhraseRule **Parent) {
    return This->lpVtbl->get_Parent(This,Parent);
}
static inline HRESULT ISpeechPhraseRule_get_Children(ISpeechPhraseRule* This,ISpeechPhraseRules **Children) {
    return This->lpVtbl->get_Children(This,Children);
}
static inline HRESULT ISpeechPhraseRule_get_Confidence(ISpeechPhraseRule* This,SpeechEngineConfidence *ActualConfidence) {
    return This->lpVtbl->get_Confidence(This,ActualConfidence);
}
static inline HRESULT ISpeechPhraseRule_get_EngineConfidence(ISpeechPhraseRule* This,float *EngineConfidence) {
    return This->lpVtbl->get_EngineConfidence(This,EngineConfidence);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseRule_INTERFACE_DEFINED__ */

/*****************************************************************************
 * 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 **EnumVARIANT) = 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 **EnumVARIANT);

    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,EnumVARIANT) (This)->lpVtbl->get__NewEnum(This,EnumVARIANT)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhraseRules_QueryInterface(ISpeechPhraseRules* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhraseRules_AddRef(ISpeechPhraseRules* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhraseRules_Release(ISpeechPhraseRules* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhraseRules_GetTypeInfoCount(ISpeechPhraseRules* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhraseRules_GetTypeInfo(ISpeechPhraseRules* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline 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 inline 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 inline HRESULT ISpeechPhraseRules_get_Count(ISpeechPhraseRules* This,LONG *Count) {
    return This->lpVtbl->get_Count(This,Count);
}
static inline HRESULT ISpeechPhraseRules_Item(ISpeechPhraseRules* This,LONG Index,ISpeechPhraseRule **Rule) {
    return This->lpVtbl->Item(This,Index,Rule);
}
static inline HRESULT ISpeechPhraseRules_get__NewEnum(ISpeechPhraseRules* This,IUnknown **EnumVARIANT) {
    return This->lpVtbl->get__NewEnum(This,EnumVARIANT);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhraseRules_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechLexiconWords interface
 */
#ifndef __ISpeechLexiconWords_INTERFACE_DEFINED__
#define __ISpeechLexiconWords_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechLexiconWords, 0x8d199862, 0x415e, 0x47d5, 0xac,0x4f, 0xfa,0xa6,0x08,0xb4,0x24,0xe6);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8d199862-415e-47d5-ac4f-faa608b424e6")
ISpeechLexiconWords : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *Count) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        LONG Index,
        ISpeechLexiconWord **Word) = 0;

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

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechLexiconWords, 0x8d199862, 0x415e, 0x47d5, 0xac,0x4f, 0xfa,0xa6,0x08,0xb4,0x24,0xe6)
#endif
#else
typedef struct ISpeechLexiconWordsVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    /*** ISpeechLexiconWords methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        ISpeechLexiconWords *This,
        LONG *Count);

    HRESULT (STDMETHODCALLTYPE *Item)(
        ISpeechLexiconWords *This,
        LONG Index,
        ISpeechLexiconWord **Word);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechLexiconWords *This,
        IUnknown **EnumVARIANT);

    END_INTERFACE
} ISpeechLexiconWordsVtbl;

interface ISpeechLexiconWords {
    CONST_VTBL ISpeechLexiconWordsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechLexiconWords_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechLexiconWords_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechLexiconWords_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechLexiconWords_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechLexiconWords_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechLexiconWords_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechLexiconWords_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechLexiconWords methods ***/
#define ISpeechLexiconWords_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
#define ISpeechLexiconWords_Item(This,Index,Word) (This)->lpVtbl->Item(This,Index,Word)
#define ISpeechLexiconWords_get__NewEnum(This,EnumVARIANT) (This)->lpVtbl->get__NewEnum(This,EnumVARIANT)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechLexiconWords_QueryInterface(ISpeechLexiconWords* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechLexiconWords_AddRef(ISpeechLexiconWords* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechLexiconWords_Release(ISpeechLexiconWords* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechLexiconWords_GetTypeInfoCount(ISpeechLexiconWords* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechLexiconWords_GetTypeInfo(ISpeechLexiconWords* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ISpeechLexiconWords_GetIDsOfNames(ISpeechLexiconWords* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ISpeechLexiconWords_Invoke(ISpeechLexiconWords* 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);
}
/*** ISpeechLexiconWords methods ***/
static inline HRESULT ISpeechLexiconWords_get_Count(ISpeechLexiconWords* This,LONG *Count) {
    return This->lpVtbl->get_Count(This,Count);
}
static inline HRESULT ISpeechLexiconWords_Item(ISpeechLexiconWords* This,LONG Index,ISpeechLexiconWord **Word) {
    return This->lpVtbl->Item(This,Index,Word);
}
static inline HRESULT ISpeechLexiconWords_get__NewEnum(ISpeechLexiconWords* This,IUnknown **EnumVARIANT) {
    return This->lpVtbl->get__NewEnum(This,EnumVARIANT);
}
#endif
#endif

#endif


#endif  /* __ISpeechLexiconWords_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechLexicon interface
 */
#ifndef __ISpeechLexicon_INTERFACE_DEFINED__
#define __ISpeechLexicon_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechLexicon, 0x3da7627a, 0xc7ae, 0x4b23, 0x87,0x08, 0x63,0x8c,0x50,0x36,0x2c,0x25);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3da7627a-c7ae-4b23-8708-638c50362c25")
ISpeechLexicon : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_GenerationId(
        LONG *GenerationId) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetWords(
        SpeechLexiconType Flags,
        LONG *GenerationID,
        ISpeechLexiconWords **Words) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddPronunciation(
        BSTR bstrWord,
        SpeechLanguageId LangId,
        SpeechPartOfSpeech PartOfSpeech = SPSUnknown,
        BSTR bstrPronunciation = L"") = 0;

    virtual HRESULT STDMETHODCALLTYPE AddPronunciationByPhoneIds(
        BSTR bstrWord,
        SpeechLanguageId LangId,
        SpeechPartOfSpeech PartOfSpeech = SPSUnknown,
        VARIANT *PhoneIds = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemovePronunciation(
        BSTR bstrWord,
        SpeechLanguageId LangId,
        SpeechPartOfSpeech PartOfSpeech = SPSUnknown,
        BSTR bstrPronunciation = L"") = 0;

    virtual HRESULT STDMETHODCALLTYPE RemovePronunciationByPhoneIds(
        BSTR bstrWord,
        SpeechLanguageId LangId,
        SpeechPartOfSpeech PartOfSpeech = SPSUnknown,
        VARIANT *PhoneIds = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPronunciations(
        BSTR bstrWord,
        SpeechLanguageId LangId,
        SpeechLexiconType TypeFlags,
        ISpeechLexiconPronunciations **ppPronunciations) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGenerationChange(
        LONG *GenerationID,
        ISpeechLexiconWords **ppWords) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechLexicon, 0x3da7627a, 0xc7ae, 0x4b23, 0x87,0x08, 0x63,0x8c,0x50,0x36,0x2c,0x25)
#endif
#else
typedef struct ISpeechLexiconVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    /*** ISpeechLexicon methods ***/
    HRESULT (STDMETHODCALLTYPE *get_GenerationId)(
        ISpeechLexicon *This,
        LONG *GenerationId);

    HRESULT (STDMETHODCALLTYPE *GetWords)(
        ISpeechLexicon *This,
        SpeechLexiconType Flags,
        LONG *GenerationID,
        ISpeechLexiconWords **Words);

    HRESULT (STDMETHODCALLTYPE *AddPronunciation)(
        ISpeechLexicon *This,
        BSTR bstrWord,
        SpeechLanguageId LangId,
        SpeechPartOfSpeech PartOfSpeech,
        BSTR bstrPronunciation);

    HRESULT (STDMETHODCALLTYPE *AddPronunciationByPhoneIds)(
        ISpeechLexicon *This,
        BSTR bstrWord,
        SpeechLanguageId LangId,
        SpeechPartOfSpeech PartOfSpeech,
        VARIANT *PhoneIds);

    HRESULT (STDMETHODCALLTYPE *RemovePronunciation)(
        ISpeechLexicon *This,
        BSTR bstrWord,
        SpeechLanguageId LangId,
        SpeechPartOfSpeech PartOfSpeech,
        BSTR bstrPronunciation);

    HRESULT (STDMETHODCALLTYPE *RemovePronunciationByPhoneIds)(
        ISpeechLexicon *This,
        BSTR bstrWord,
        SpeechLanguageId LangId,
        SpeechPartOfSpeech PartOfSpeech,
        VARIANT *PhoneIds);

    HRESULT (STDMETHODCALLTYPE *GetPronunciations)(
        ISpeechLexicon *This,
        BSTR bstrWord,
        SpeechLanguageId LangId,
        SpeechLexiconType TypeFlags,
        ISpeechLexiconPronunciations **ppPronunciations);

    HRESULT (STDMETHODCALLTYPE *GetGenerationChange)(
        ISpeechLexicon *This,
        LONG *GenerationID,
        ISpeechLexiconWords **ppWords);

    END_INTERFACE
} ISpeechLexiconVtbl;

interface ISpeechLexicon {
    CONST_VTBL ISpeechLexiconVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechLexicon_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechLexicon_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechLexicon_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechLexicon_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechLexicon_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechLexicon_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechLexicon_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechLexicon methods ***/
#define ISpeechLexicon_get_GenerationId(This,GenerationId) (This)->lpVtbl->get_GenerationId(This,GenerationId)
#define ISpeechLexicon_GetWords(This,Flags,GenerationID,Words) (This)->lpVtbl->GetWords(This,Flags,GenerationID,Words)
#define ISpeechLexicon_AddPronunciation(This,bstrWord,LangId,PartOfSpeech,bstrPronunciation) (This)->lpVtbl->AddPronunciation(This,bstrWord,LangId,PartOfSpeech,bstrPronunciation)
#define ISpeechLexicon_AddPronunciationByPhoneIds(This,bstrWord,LangId,PartOfSpeech,PhoneIds) (This)->lpVtbl->AddPronunciationByPhoneIds(This,bstrWord,LangId,PartOfSpeech,PhoneIds)
#define ISpeechLexicon_RemovePronunciation(This,bstrWord,LangId,PartOfSpeech,bstrPronunciation) (This)->lpVtbl->RemovePronunciation(This,bstrWord,LangId,PartOfSpeech,bstrPronunciation)
#define ISpeechLexicon_RemovePronunciationByPhoneIds(This,bstrWord,LangId,PartOfSpeech,PhoneIds) (This)->lpVtbl->RemovePronunciationByPhoneIds(This,bstrWord,LangId,PartOfSpeech,PhoneIds)
#define ISpeechLexicon_GetPronunciations(This,bstrWord,LangId,TypeFlags,ppPronunciations) (This)->lpVtbl->GetPronunciations(This,bstrWord,LangId,TypeFlags,ppPronunciations)
#define ISpeechLexicon_GetGenerationChange(This,GenerationID,ppWords) (This)->lpVtbl->GetGenerationChange(This,GenerationID,ppWords)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechLexicon_QueryInterface(ISpeechLexicon* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechLexicon_AddRef(ISpeechLexicon* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechLexicon_Release(ISpeechLexicon* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechLexicon_GetTypeInfoCount(ISpeechLexicon* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechLexicon_GetTypeInfo(ISpeechLexicon* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ISpeechLexicon_GetIDsOfNames(ISpeechLexicon* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ISpeechLexicon_Invoke(ISpeechLexicon* 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);
}
/*** ISpeechLexicon methods ***/
static inline HRESULT ISpeechLexicon_get_GenerationId(ISpeechLexicon* This,LONG *GenerationId) {
    return This->lpVtbl->get_GenerationId(This,GenerationId);
}
static inline HRESULT ISpeechLexicon_GetWords(ISpeechLexicon* This,SpeechLexiconType Flags,LONG *GenerationID,ISpeechLexiconWords **Words) {
    return This->lpVtbl->GetWords(This,Flags,GenerationID,Words);
}
static inline HRESULT ISpeechLexicon_AddPronunciation(ISpeechLexicon* This,BSTR bstrWord,SpeechLanguageId LangId,SpeechPartOfSpeech PartOfSpeech,BSTR bstrPronunciation) {
    return This->lpVtbl->AddPronunciation(This,bstrWord,LangId,PartOfSpeech,bstrPronunciation);
}
static inline HRESULT ISpeechLexicon_AddPronunciationByPhoneIds(ISpeechLexicon* This,BSTR bstrWord,SpeechLanguageId LangId,SpeechPartOfSpeech PartOfSpeech,VARIANT *PhoneIds) {
    return This->lpVtbl->AddPronunciationByPhoneIds(This,bstrWord,LangId,PartOfSpeech,PhoneIds);
}
static inline HRESULT ISpeechLexicon_RemovePronunciation(ISpeechLexicon* This,BSTR bstrWord,SpeechLanguageId LangId,SpeechPartOfSpeech PartOfSpeech,BSTR bstrPronunciation) {
    return This->lpVtbl->RemovePronunciation(This,bstrWord,LangId,PartOfSpeech,bstrPronunciation);
}
static inline HRESULT ISpeechLexicon_RemovePronunciationByPhoneIds(ISpeechLexicon* This,BSTR bstrWord,SpeechLanguageId LangId,SpeechPartOfSpeech PartOfSpeech,VARIANT *PhoneIds) {
    return This->lpVtbl->RemovePronunciationByPhoneIds(This,bstrWord,LangId,PartOfSpeech,PhoneIds);
}
static inline HRESULT ISpeechLexicon_GetPronunciations(ISpeechLexicon* This,BSTR bstrWord,SpeechLanguageId LangId,SpeechLexiconType TypeFlags,ISpeechLexiconPronunciations **ppPronunciations) {
    return This->lpVtbl->GetPronunciations(This,bstrWord,LangId,TypeFlags,ppPronunciations);
}
static inline HRESULT ISpeechLexicon_GetGenerationChange(ISpeechLexicon* This,LONG *GenerationID,ISpeechLexiconWords **ppWords) {
    return This->lpVtbl->GetGenerationChange(This,GenerationID,ppWords);
}
#endif
#endif

#endif


#endif  /* __ISpeechLexicon_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechLexiconWord interface
 */
#ifndef __ISpeechLexiconWord_INTERFACE_DEFINED__
#define __ISpeechLexiconWord_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechLexiconWord, 0x4e5b933c, 0xc9be, 0x48ed, 0x88,0x42, 0x1e,0xe5,0x1b,0xb1,0xd4,0xff);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("4e5b933c-c9be-48ed-8842-1ee51bb1d4ff")
ISpeechLexiconWord : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_LangId(
        SpeechLanguageId *LangId) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Type(
        SpeechWordType *WordType) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Word(
        BSTR *Word) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Pronunciations(
        ISpeechLexiconPronunciations **Pronunciations) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechLexiconWord, 0x4e5b933c, 0xc9be, 0x48ed, 0x88,0x42, 0x1e,0xe5,0x1b,0xb1,0xd4,0xff)
#endif
#else
typedef struct ISpeechLexiconWordVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    /*** ISpeechLexiconWord methods ***/
    HRESULT (STDMETHODCALLTYPE *get_LangId)(
        ISpeechLexiconWord *This,
        SpeechLanguageId *LangId);

    HRESULT (STDMETHODCALLTYPE *get_Type)(
        ISpeechLexiconWord *This,
        SpeechWordType *WordType);

    HRESULT (STDMETHODCALLTYPE *get_Word)(
        ISpeechLexiconWord *This,
        BSTR *Word);

    HRESULT (STDMETHODCALLTYPE *get_Pronunciations)(
        ISpeechLexiconWord *This,
        ISpeechLexiconPronunciations **Pronunciations);

    END_INTERFACE
} ISpeechLexiconWordVtbl;

interface ISpeechLexiconWord {
    CONST_VTBL ISpeechLexiconWordVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechLexiconWord_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechLexiconWord_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechLexiconWord_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechLexiconWord_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechLexiconWord_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechLexiconWord_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechLexiconWord_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechLexiconWord methods ***/
#define ISpeechLexiconWord_get_LangId(This,LangId) (This)->lpVtbl->get_LangId(This,LangId)
#define ISpeechLexiconWord_get_Type(This,WordType) (This)->lpVtbl->get_Type(This,WordType)
#define ISpeechLexiconWord_get_Word(This,Word) (This)->lpVtbl->get_Word(This,Word)
#define ISpeechLexiconWord_get_Pronunciations(This,Pronunciations) (This)->lpVtbl->get_Pronunciations(This,Pronunciations)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechLexiconWord_QueryInterface(ISpeechLexiconWord* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechLexiconWord_AddRef(ISpeechLexiconWord* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechLexiconWord_Release(ISpeechLexiconWord* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechLexiconWord_GetTypeInfoCount(ISpeechLexiconWord* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechLexiconWord_GetTypeInfo(ISpeechLexiconWord* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ISpeechLexiconWord_GetIDsOfNames(ISpeechLexiconWord* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ISpeechLexiconWord_Invoke(ISpeechLexiconWord* 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);
}
/*** ISpeechLexiconWord methods ***/
static inline HRESULT ISpeechLexiconWord_get_LangId(ISpeechLexiconWord* This,SpeechLanguageId *LangId) {
    return This->lpVtbl->get_LangId(This,LangId);
}
static inline HRESULT ISpeechLexiconWord_get_Type(ISpeechLexiconWord* This,SpeechWordType *WordType) {
    return This->lpVtbl->get_Type(This,WordType);
}
static inline HRESULT ISpeechLexiconWord_get_Word(ISpeechLexiconWord* This,BSTR *Word) {
    return This->lpVtbl->get_Word(This,Word);
}
static inline HRESULT ISpeechLexiconWord_get_Pronunciations(ISpeechLexiconWord* This,ISpeechLexiconPronunciations **Pronunciations) {
    return This->lpVtbl->get_Pronunciations(This,Pronunciations);
}
#endif
#endif

#endif


#endif  /* __ISpeechLexiconWord_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechLexiconPronunciations interface
 */
#ifndef __ISpeechLexiconPronunciations_INTERFACE_DEFINED__
#define __ISpeechLexiconPronunciations_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechLexiconPronunciations, 0x72829128, 0x5682, 0x4704, 0xa0,0xd4, 0x3e,0x2b,0xb6,0xf2,0xea,0xd3);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("72829128-5682-4704-a0d4-3e2bb6f2ead3")
ISpeechLexiconPronunciations : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *Count) = 0;

    virtual HRESULT STDMETHODCALLTYPE Item(
        LONG Index,
        ISpeechLexiconPronunciation **Pronunciation) = 0;

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

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechLexiconPronunciations, 0x72829128, 0x5682, 0x4704, 0xa0,0xd4, 0x3e,0x2b,0xb6,0xf2,0xea,0xd3)
#endif
#else
typedef struct ISpeechLexiconPronunciationsVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    /*** ISpeechLexiconPronunciations methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        ISpeechLexiconPronunciations *This,
        LONG *Count);

    HRESULT (STDMETHODCALLTYPE *Item)(
        ISpeechLexiconPronunciations *This,
        LONG Index,
        ISpeechLexiconPronunciation **Pronunciation);

    HRESULT (STDMETHODCALLTYPE *get__NewEnum)(
        ISpeechLexiconPronunciations *This,
        IUnknown **EnumVARIANT);

    END_INTERFACE
} ISpeechLexiconPronunciationsVtbl;

interface ISpeechLexiconPronunciations {
    CONST_VTBL ISpeechLexiconPronunciationsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechLexiconPronunciations_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechLexiconPronunciations_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechLexiconPronunciations_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechLexiconPronunciations_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechLexiconPronunciations_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechLexiconPronunciations_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechLexiconPronunciations_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechLexiconPronunciations methods ***/
#define ISpeechLexiconPronunciations_get_Count(This,Count) (This)->lpVtbl->get_Count(This,Count)
#define ISpeechLexiconPronunciations_Item(This,Index,Pronunciation) (This)->lpVtbl->Item(This,Index,Pronunciation)
#define ISpeechLexiconPronunciations_get__NewEnum(This,EnumVARIANT) (This)->lpVtbl->get__NewEnum(This,EnumVARIANT)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechLexiconPronunciations_QueryInterface(ISpeechLexiconPronunciations* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechLexiconPronunciations_AddRef(ISpeechLexiconPronunciations* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechLexiconPronunciations_Release(ISpeechLexiconPronunciations* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechLexiconPronunciations_GetTypeInfoCount(ISpeechLexiconPronunciations* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechLexiconPronunciations_GetTypeInfo(ISpeechLexiconPronunciations* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ISpeechLexiconPronunciations_GetIDsOfNames(ISpeechLexiconPronunciations* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ISpeechLexiconPronunciations_Invoke(ISpeechLexiconPronunciations* 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);
}
/*** ISpeechLexiconPronunciations methods ***/
static inline HRESULT ISpeechLexiconPronunciations_get_Count(ISpeechLexiconPronunciations* This,LONG *Count) {
    return This->lpVtbl->get_Count(This,Count);
}
static inline HRESULT ISpeechLexiconPronunciations_Item(ISpeechLexiconPronunciations* This,LONG Index,ISpeechLexiconPronunciation **Pronunciation) {
    return This->lpVtbl->Item(This,Index,Pronunciation);
}
static inline HRESULT ISpeechLexiconPronunciations_get__NewEnum(ISpeechLexiconPronunciations* This,IUnknown **EnumVARIANT) {
    return This->lpVtbl->get__NewEnum(This,EnumVARIANT);
}
#endif
#endif

#endif


#endif  /* __ISpeechLexiconPronunciations_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechLexiconPronunciation interface
 */
#ifndef __ISpeechLexiconPronunciation_INTERFACE_DEFINED__
#define __ISpeechLexiconPronunciation_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechLexiconPronunciation, 0x95252c5d, 0x9e43, 0x4f4a, 0x98,0x99, 0x48,0xee,0x73,0x35,0x2f,0x9f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("95252c5d-9e43-4f4a-9899-48ee73352f9f")
ISpeechLexiconPronunciation : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Type(
        SpeechLexiconType *LexiconType) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LangId(
        SpeechLanguageId *LangId) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PartOfSpeech(
        SpeechPartOfSpeech *PartOfSpeech) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PhoneIds(
        VARIANT *PhoneIds) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Symbolic(
        BSTR *Symbolic) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechLexiconPronunciation, 0x95252c5d, 0x9e43, 0x4f4a, 0x98,0x99, 0x48,0xee,0x73,0x35,0x2f,0x9f)
#endif
#else
typedef struct ISpeechLexiconPronunciationVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    /*** ISpeechLexiconPronunciation methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Type)(
        ISpeechLexiconPronunciation *This,
        SpeechLexiconType *LexiconType);

    HRESULT (STDMETHODCALLTYPE *get_LangId)(
        ISpeechLexiconPronunciation *This,
        SpeechLanguageId *LangId);

    HRESULT (STDMETHODCALLTYPE *get_PartOfSpeech)(
        ISpeechLexiconPronunciation *This,
        SpeechPartOfSpeech *PartOfSpeech);

    HRESULT (STDMETHODCALLTYPE *get_PhoneIds)(
        ISpeechLexiconPronunciation *This,
        VARIANT *PhoneIds);

    HRESULT (STDMETHODCALLTYPE *get_Symbolic)(
        ISpeechLexiconPronunciation *This,
        BSTR *Symbolic);

    END_INTERFACE
} ISpeechLexiconPronunciationVtbl;

interface ISpeechLexiconPronunciation {
    CONST_VTBL ISpeechLexiconPronunciationVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechLexiconPronunciation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechLexiconPronunciation_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechLexiconPronunciation_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechLexiconPronunciation_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechLexiconPronunciation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechLexiconPronunciation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechLexiconPronunciation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechLexiconPronunciation methods ***/
#define ISpeechLexiconPronunciation_get_Type(This,LexiconType) (This)->lpVtbl->get_Type(This,LexiconType)
#define ISpeechLexiconPronunciation_get_LangId(This,LangId) (This)->lpVtbl->get_LangId(This,LangId)
#define ISpeechLexiconPronunciation_get_PartOfSpeech(This,PartOfSpeech) (This)->lpVtbl->get_PartOfSpeech(This,PartOfSpeech)
#define ISpeechLexiconPronunciation_get_PhoneIds(This,PhoneIds) (This)->lpVtbl->get_PhoneIds(This,PhoneIds)
#define ISpeechLexiconPronunciation_get_Symbolic(This,Symbolic) (This)->lpVtbl->get_Symbolic(This,Symbolic)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechLexiconPronunciation_QueryInterface(ISpeechLexiconPronunciation* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechLexiconPronunciation_AddRef(ISpeechLexiconPronunciation* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechLexiconPronunciation_Release(ISpeechLexiconPronunciation* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechLexiconPronunciation_GetTypeInfoCount(ISpeechLexiconPronunciation* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechLexiconPronunciation_GetTypeInfo(ISpeechLexiconPronunciation* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ISpeechLexiconPronunciation_GetIDsOfNames(ISpeechLexiconPronunciation* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ISpeechLexiconPronunciation_Invoke(ISpeechLexiconPronunciation* 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);
}
/*** ISpeechLexiconPronunciation methods ***/
static inline HRESULT ISpeechLexiconPronunciation_get_Type(ISpeechLexiconPronunciation* This,SpeechLexiconType *LexiconType) {
    return This->lpVtbl->get_Type(This,LexiconType);
}
static inline HRESULT ISpeechLexiconPronunciation_get_LangId(ISpeechLexiconPronunciation* This,SpeechLanguageId *LangId) {
    return This->lpVtbl->get_LangId(This,LangId);
}
static inline HRESULT ISpeechLexiconPronunciation_get_PartOfSpeech(ISpeechLexiconPronunciation* This,SpeechPartOfSpeech *PartOfSpeech) {
    return This->lpVtbl->get_PartOfSpeech(This,PartOfSpeech);
}
static inline HRESULT ISpeechLexiconPronunciation_get_PhoneIds(ISpeechLexiconPronunciation* This,VARIANT *PhoneIds) {
    return This->lpVtbl->get_PhoneIds(This,PhoneIds);
}
static inline HRESULT ISpeechLexiconPronunciation_get_Symbolic(ISpeechLexiconPronunciation* This,BSTR *Symbolic) {
    return This->lpVtbl->get_Symbolic(This,Symbolic);
}
#endif
#endif

#endif


#endif  /* __ISpeechLexiconPronunciation_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISpeechPhoneConverter interface
 */
#ifndef __ISpeechPhoneConverter_INTERFACE_DEFINED__
#define __ISpeechPhoneConverter_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISpeechPhoneConverter, 0xc3e4f353, 0x433f, 0x43d6, 0x89,0xa1, 0x6a,0x62,0xa7,0x05,0x4c,0x3d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c3e4f353-433f-43d6-89a1-6a62a7054c3d")
ISpeechPhoneConverter : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_LanguageId(
        SpeechLanguageId *LanguageId) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_LanguageId(
        SpeechLanguageId LanguageId) = 0;

    virtual HRESULT STDMETHODCALLTYPE PhoneToId(
        const BSTR Phonemes,
        VARIANT *IdArray) = 0;

    virtual HRESULT STDMETHODCALLTYPE IdToPhone(
        const VARIANT IdArray,
        BSTR *Phonemes) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISpeechPhoneConverter, 0xc3e4f353, 0x433f, 0x43d6, 0x89,0xa1, 0x6a,0x62,0xa7,0x05,0x4c,0x3d)
#endif
#else
typedef struct ISpeechPhoneConverterVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

    /*** ISpeechPhoneConverter methods ***/
    HRESULT (STDMETHODCALLTYPE *get_LanguageId)(
        ISpeechPhoneConverter *This,
        SpeechLanguageId *LanguageId);

    HRESULT (STDMETHODCALLTYPE *put_LanguageId)(
        ISpeechPhoneConverter *This,
        SpeechLanguageId LanguageId);

    HRESULT (STDMETHODCALLTYPE *PhoneToId)(
        ISpeechPhoneConverter *This,
        const BSTR Phonemes,
        VARIANT *IdArray);

    HRESULT (STDMETHODCALLTYPE *IdToPhone)(
        ISpeechPhoneConverter *This,
        const VARIANT IdArray,
        BSTR *Phonemes);

    END_INTERFACE
} ISpeechPhoneConverterVtbl;

interface ISpeechPhoneConverter {
    CONST_VTBL ISpeechPhoneConverterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ISpeechPhoneConverter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISpeechPhoneConverter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISpeechPhoneConverter_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ISpeechPhoneConverter_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISpeechPhoneConverter_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISpeechPhoneConverter_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISpeechPhoneConverter_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ISpeechPhoneConverter methods ***/
#define ISpeechPhoneConverter_get_LanguageId(This,LanguageId) (This)->lpVtbl->get_LanguageId(This,LanguageId)
#define ISpeechPhoneConverter_put_LanguageId(This,LanguageId) (This)->lpVtbl->put_LanguageId(This,LanguageId)
#define ISpeechPhoneConverter_PhoneToId(This,Phonemes,IdArray) (This)->lpVtbl->PhoneToId(This,Phonemes,IdArray)
#define ISpeechPhoneConverter_IdToPhone(This,IdArray,Phonemes) (This)->lpVtbl->IdToPhone(This,IdArray,Phonemes)
#else
/*** IUnknown methods ***/
static inline HRESULT ISpeechPhoneConverter_QueryInterface(ISpeechPhoneConverter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ISpeechPhoneConverter_AddRef(ISpeechPhoneConverter* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ISpeechPhoneConverter_Release(ISpeechPhoneConverter* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ISpeechPhoneConverter_GetTypeInfoCount(ISpeechPhoneConverter* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ISpeechPhoneConverter_GetTypeInfo(ISpeechPhoneConverter* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ISpeechPhoneConverter_GetIDsOfNames(ISpeechPhoneConverter* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ISpeechPhoneConverter_Invoke(ISpeechPhoneConverter* 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);
}
/*** ISpeechPhoneConverter methods ***/
static inline HRESULT ISpeechPhoneConverter_get_LanguageId(ISpeechPhoneConverter* This,SpeechLanguageId *LanguageId) {
    return This->lpVtbl->get_LanguageId(This,LanguageId);
}
static inline HRESULT ISpeechPhoneConverter_put_LanguageId(ISpeechPhoneConverter* This,SpeechLanguageId LanguageId) {
    return This->lpVtbl->put_LanguageId(This,LanguageId);
}
static inline HRESULT ISpeechPhoneConverter_PhoneToId(ISpeechPhoneConverter* This,const BSTR Phonemes,VARIANT *IdArray) {
    return This->lpVtbl->PhoneToId(This,Phonemes,IdArray);
}
static inline HRESULT ISpeechPhoneConverter_IdToPhone(ISpeechPhoneConverter* This,const VARIANT IdArray,BSTR *Phonemes) {
    return This->lpVtbl->IdToPhone(This,IdArray,Phonemes);
}
#endif
#endif

#endif


#endif  /* __ISpeechPhoneConverter_INTERFACE_DEFINED__ */

/*****************************************************************************
 * SpNotifyTranslator coclass
 */

DEFINE_GUID(CLSID_SpNotifyTranslator, 0xe2ae5372, 0x5d40, 0x11d2, 0x96,0x0e, 0x00,0xc0,0x4f,0x8e,0xe6,0x28);

#ifdef __cplusplus
class DECLSPEC_UUID("e2ae5372-5d40-11d2-960e-00c04f8ee628") SpNotifyTranslator;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpNotifyTranslator, 0xe2ae5372, 0x5d40, 0x11d2, 0x96,0x0e, 0x00,0xc0,0x4f,0x8e,0xe6,0x28)
#endif
#endif

/*****************************************************************************
 * 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

/*****************************************************************************
 * SpObjectToken coclass
 */

DEFINE_GUID(CLSID_SpObjectToken, 0xef411752, 0x3736, 0x4cb4, 0x9c,0x8c, 0x8e,0xf4,0xcc,0xb5,0x8e,0xfe);

#ifdef __cplusplus
class DECLSPEC_UUID("ef411752-3736-4cb4-9c8c-8ef4ccb58efe") SpObjectToken;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpObjectToken, 0xef411752, 0x3736, 0x4cb4, 0x9c,0x8c, 0x8e,0xf4,0xcc,0xb5,0x8e,0xfe)
#endif
#endif

/*****************************************************************************
 * SpResourceManager coclass
 */

DEFINE_GUID(CLSID_SpResourceManager, 0x96749373, 0x3391, 0x11d2, 0x9e,0xe3, 0x00,0xc0,0x4f,0x79,0x73,0x96);

#ifdef __cplusplus
class DECLSPEC_UUID("96749373-3391-11d2-9ee3-00c04f797396") SpResourceManager;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpResourceManager, 0x96749373, 0x3391, 0x11d2, 0x9e,0xe3, 0x00,0xc0,0x4f,0x79,0x73,0x96)
#endif
#endif

/*****************************************************************************
 * SpStreamFormatConverter coclass
 */

DEFINE_GUID(CLSID_SpStreamFormatConverter, 0x7013943a, 0xe2ec, 0x11d2, 0xa0,0x86, 0x00,0xc0,0x4f,0x8e,0xf9,0xb5);

#ifdef __cplusplus
class DECLSPEC_UUID("7013943a-e2ec-11d2-a086-00c04f8ef9b5") SpStreamFormatConverter;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpStreamFormatConverter, 0x7013943a, 0xe2ec, 0x11d2, 0xa0,0x86, 0x00,0xc0,0x4f,0x8e,0xf9,0xb5)
#endif
#endif

/*****************************************************************************
 * SpMMAudioEnum coclass
 */

DEFINE_GUID(CLSID_SpMMAudioEnum, 0xab1890a0, 0xe91f, 0x11d2, 0xbb,0x91, 0x00,0xc0,0x4f,0x8e,0xe6,0xc0);

#ifdef __cplusplus
class DECLSPEC_UUID("ab1890a0-e91f-11d2-bb91-00c04f8ee6c0") SpMMAudioEnum;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpMMAudioEnum, 0xab1890a0, 0xe91f, 0x11d2, 0xbb,0x91, 0x00,0xc0,0x4f,0x8e,0xe6,0xc0)
#endif
#endif

/*****************************************************************************
 * SpMMAudioIn coclass
 */

DEFINE_GUID(CLSID_SpMMAudioIn, 0xcf3d2e50, 0x53f2, 0x11d2, 0x96,0x0c, 0x00,0xc0,0x4f,0x8e,0xe6,0x28);

#ifdef __cplusplus
class DECLSPEC_UUID("cf3d2e50-53f2-11d2-960c-00c04f8ee628") SpMMAudioIn;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpMMAudioIn, 0xcf3d2e50, 0x53f2, 0x11d2, 0x96,0x0c, 0x00,0xc0,0x4f,0x8e,0xe6,0x28)
#endif
#endif

/*****************************************************************************
 * SpMMAudioOut coclass
 */

DEFINE_GUID(CLSID_SpMMAudioOut, 0xa8c680eb, 0x3d32, 0x11d2, 0x9e,0xe7, 0x00,0xc0,0x4f,0x79,0x73,0x96);

#ifdef __cplusplus
class DECLSPEC_UUID("a8c680eb-3d32-11d2-9ee7-00c04f797396") SpMMAudioOut;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpMMAudioOut, 0xa8c680eb, 0x3d32, 0x11d2, 0x9e,0xe7, 0x00,0xc0,0x4f,0x79,0x73,0x96)
#endif
#endif

/*****************************************************************************
 * SpStream coclass
 */

DEFINE_GUID(CLSID_SpStream, 0x715d9c59, 0x4442, 0x11d2, 0x96,0x05, 0x00,0xc0,0x4f,0x8e,0xe6,0x28);

#ifdef __cplusplus
class DECLSPEC_UUID("715d9c59-4442-11d2-9605-00c04f8ee628") SpStream;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpStream, 0x715d9c59, 0x4442, 0x11d2, 0x96,0x05, 0x00,0xc0,0x4f,0x8e,0xe6,0x28)
#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

/*****************************************************************************
 * SpSharedRecoContext coclass
 */

DEFINE_GUID(CLSID_SpSharedRecoContext, 0x47206204, 0x5eca, 0x11d2, 0x96,0x0f, 0x00,0xc0,0x4f,0x8e,0xe6,0x28);

#ifdef __cplusplus
class DECLSPEC_UUID("47206204-5eca-11d2-960f-00c04f8ee628") SpSharedRecoContext;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpSharedRecoContext, 0x47206204, 0x5eca, 0x11d2, 0x96,0x0f, 0x00,0xc0,0x4f,0x8e,0xe6,0x28)
#endif
#endif

/*****************************************************************************
 * SpInprocRecognizer coclass
 */

DEFINE_GUID(CLSID_SpInprocRecognizer, 0x41b89b6b, 0x9399, 0x11d2, 0x96,0x23, 0x00,0xc0,0x4f,0x8e,0xe6,0x28);

#ifdef __cplusplus
class DECLSPEC_UUID("41b89b6b-9399-11d2-9623-00c04f8ee628") SpInprocRecognizer;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpInprocRecognizer, 0x41b89b6b, 0x9399, 0x11d2, 0x96,0x23, 0x00,0xc0,0x4f,0x8e,0xe6,0x28)
#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

/*****************************************************************************
 * SpLexicon coclass
 */

DEFINE_GUID(CLSID_SpLexicon, 0x0655e396, 0x25d0, 0x11d3, 0x9c,0x26, 0x00,0xc0,0x4f,0x8e,0xf8,0x7c);

#ifdef __cplusplus
class DECLSPEC_UUID("0655e396-25d0-11d3-9c26-00c04f8ef87c") SpLexicon;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpLexicon, 0x0655e396, 0x25d0, 0x11d3, 0x9c,0x26, 0x00,0xc0,0x4f,0x8e,0xf8,0x7c)
#endif
#endif

/*****************************************************************************
 * SpUnCompressedLexicon coclass
 */

DEFINE_GUID(CLSID_SpUnCompressedLexicon, 0xc9e37c15, 0xdf92, 0x4727, 0x85,0xd6, 0x72,0xe5,0xee,0xb6,0x99,0x5a);

#ifdef __cplusplus
class DECLSPEC_UUID("c9e37c15-df92-4727-85d6-72e5eeb6995a") SpUnCompressedLexicon;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpUnCompressedLexicon, 0xc9e37c15, 0xdf92, 0x4727, 0x85,0xd6, 0x72,0xe5,0xee,0xb6,0x99,0x5a)
#endif
#endif

/*****************************************************************************
 * SpCompressedLexicon coclass
 */

DEFINE_GUID(CLSID_SpCompressedLexicon, 0x90903716, 0x2f42, 0x11d3, 0x9c,0x26, 0x00,0xc0,0x4f,0x8e,0xf8,0x7c);

#ifdef __cplusplus
class DECLSPEC_UUID("90903716-2f42-11d3-9c26-00c04f8ef87c") SpCompressedLexicon;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpCompressedLexicon, 0x90903716, 0x2f42, 0x11d3, 0x9c,0x26, 0x00,0xc0,0x4f,0x8e,0xf8,0x7c)
#endif
#endif

/*****************************************************************************
 * SpPhoneConverter coclass
 */

DEFINE_GUID(CLSID_SpPhoneConverter, 0x9185f743, 0x1143, 0x4c28, 0x86,0xb5, 0xbf,0xf1,0x4f,0x20,0xe5,0xc8);

#ifdef __cplusplus
class DECLSPEC_UUID("9185f743-1143-4c28-86b5-bff14f20e5c8") SpPhoneConverter;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpPhoneConverter, 0x9185f743, 0x1143, 0x4c28, 0x86,0xb5, 0xbf,0xf1,0x4f,0x20,0xe5,0xc8)
#endif
#endif

/*****************************************************************************
 * SpNullPhoneConverter coclass
 */

DEFINE_GUID(CLSID_SpNullPhoneConverter, 0x455f24e9, 0x7396, 0x4a16, 0x97,0x15, 0x7c,0x0f,0xdb,0xe3,0xef,0xe3);

#ifdef __cplusplus
class DECLSPEC_UUID("455f24e9-7396-4a16-9715-7c0fdbe3efe3") SpNullPhoneConverter;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpNullPhoneConverter, 0x455f24e9, 0x7396, 0x4a16, 0x97,0x15, 0x7c,0x0f,0xdb,0xe3,0xef,0xe3)
#endif
#endif

/*****************************************************************************
 * SpTextSelectionInformation coclass
 */

DEFINE_GUID(CLSID_SpTextSelectionInformation, 0x0f92030a, 0xcbfd, 0x4ab8, 0xa1,0x64, 0xff,0x59,0x85,0x54,0x7f,0xf6);

#ifdef __cplusplus
class DECLSPEC_UUID("0f92030a-cbfd-4ab8-a164-ff5985547ff6") SpTextSelectionInformation;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpTextSelectionInformation, 0x0f92030a, 0xcbfd, 0x4ab8, 0xa1,0x64, 0xff,0x59,0x85,0x54,0x7f,0xf6)
#endif
#endif

/*****************************************************************************
 * SpPhraseInfoBuilder coclass
 */

DEFINE_GUID(CLSID_SpPhraseInfoBuilder, 0xc23fc28d, 0xc55f, 0x4720, 0x8b,0x32, 0x91,0xf7,0x3c,0x2b,0xd5,0xd1);

#ifdef __cplusplus
class DECLSPEC_UUID("c23fc28d-c55f-4720-8b32-91f73c2bd5d1") SpPhraseInfoBuilder;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpPhraseInfoBuilder, 0xc23fc28d, 0xc55f, 0x4720, 0x8b,0x32, 0x91,0xf7,0x3c,0x2b,0xd5,0xd1)
#endif
#endif

/*****************************************************************************
 * SpAudioFormat coclass
 */

DEFINE_GUID(CLSID_SpAudioFormat, 0x9ef96870, 0xe160, 0x4792, 0x82,0x0d, 0x48,0xcf,0x06,0x49,0xe4,0xec);

#ifdef __cplusplus
class DECLSPEC_UUID("9ef96870-e160-4792-820d-48cf0649e4ec") SpAudioFormat;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpAudioFormat, 0x9ef96870, 0xe160, 0x4792, 0x82,0x0d, 0x48,0xcf,0x06,0x49,0xe4,0xec)
#endif
#endif

/*****************************************************************************
 * SpWaveFormatEx coclass
 */

DEFINE_GUID(CLSID_SpWaveFormatEx, 0xc79a574c, 0x63be, 0x44b9, 0x80,0x1f, 0x28,0x3f,0x87,0xf8,0x98,0xbe);

#ifdef __cplusplus
class DECLSPEC_UUID("c79a574c-63be-44b9-801f-283f87f898be") SpWaveFormatEx;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpWaveFormatEx, 0xc79a574c, 0x63be, 0x44b9, 0x80,0x1f, 0x28,0x3f,0x87,0xf8,0x98,0xbe)
#endif
#endif

/*****************************************************************************
 * SpInProcRecoContext coclass
 */

DEFINE_GUID(CLSID_SpInProcRecoContext, 0x73ad6842, 0xace0, 0x45e8, 0xa4,0xdd, 0x87,0x95,0x88,0x1a,0x2c,0x2a);

#ifdef __cplusplus
class DECLSPEC_UUID("73ad6842-ace0-45e8-a4dd-8795881a2c2a") SpInProcRecoContext;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpInProcRecoContext, 0x73ad6842, 0xace0, 0x45e8, 0xa4,0xdd, 0x87,0x95,0x88,0x1a,0x2c,0x2a)
#endif
#endif

/*****************************************************************************
 * SpCustomStream coclass
 */

DEFINE_GUID(CLSID_SpCustomStream, 0x8dbef13f, 0x1948, 0x4aa8, 0x8c,0xf0, 0x04,0x8e,0xeb,0xed,0x95,0xd8);

#ifdef __cplusplus
class DECLSPEC_UUID("8dbef13f-1948-4aa8-8cf0-048eebed95d8") SpCustomStream;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpCustomStream, 0x8dbef13f, 0x1948, 0x4aa8, 0x8c,0xf0, 0x04,0x8e,0xeb,0xed,0x95,0xd8)
#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

/*****************************************************************************
 * SpMemoryStream coclass
 */

DEFINE_GUID(CLSID_SpMemoryStream, 0x5fb7ef7d, 0xdff4, 0x468a, 0xb6,0xb7, 0x2f,0xcb,0xd1,0x88,0xf9,0x94);

#ifdef __cplusplus
class DECLSPEC_UUID("5fb7ef7d-dff4-468a-b6b7-2fcbd188f994") SpMemoryStream;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(SpMemoryStream, 0x5fb7ef7d, 0xdff4, 0x468a, 0xb6,0xb7, 0x2f,0xcb,0xd1,0x88,0xf9,0x94)
#endif
#endif

#endif /* __SpeechLib_LIBRARY_DEFINED__ */
/* 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 /* __sapi51_h__ */
