typedef struct ISpVoice ISpVoice; typedef struct ISpVoiceVtbl { HRESULT (__stdcall * QueryInterface) (ISpVoice * This, const IID * const riid, void **ppvObject); ULONG (__stdcall * AddRef) (ISpVoice * This); ULONG (__stdcall * Release) (ISpVoice * This); HRESULT (__stdcall * SetNotifySink) (ISpVoice * This, ISpNotifySink * pNotifySink); HRESULT (__stdcall * SetNotifyWindowMessage) (ISpVoice * This, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); HRESULT (__stdcall * SetNotifyCallbackFunction) (ISpVoice * This, SPNOTIFYCALLBACK * pfnCallback, WPARAM wParam, LPARAM lParam); HRESULT (__stdcall * SetNotifyCallbackInterface) (ISpVoice * This, ISpNotifyCallback * pSpCallback, WPARAM wParam, LPARAM lParam); HRESULT (__stdcall * SetNotifyWin32Event) (ISpVoice * This); HRESULT (__stdcall * WaitForNotifyEvent) (ISpVoice * This, DWORD dwMilliseconds); HANDLE (__stdcall * GetNotifyEventHandle) (ISpVoice * This); 10HRESULT (__stdcall * SetInterest) (ISpVoice * This, ULONGLONG ullEventInterest, ULONGLONG ullQueuedInterest); HRESULT (__stdcall * GetEvents) (ISpVoice * This, ULONG ulCount, SPEVENT * pEventArray, ULONG * pulFetched); HRESULT (__stdcall * GetInfo) (ISpVoice * This, SPEVENTSOURCEINFO * pInfo); HRESULT (__stdcall * SetOutput) (ISpVoice * This, IUnknown * pUnkOutput, BOOL fAllowFormatChanges); HRESULT (__stdcall * GetOutputObjectToken) (ISpVoice * This, ISpObjectToken ** ppObjectToken); HRESULT (__stdcall * GetOutputStream) (ISpVoice * This, ISpStreamFormat ** ppStream); HRESULT (__stdcall * Pause) (ISpVoice * This); HRESULT (__stdcall * Resume) (ISpVoice * This); 18HRESULT (__stdcall * SetVoice) (ISpVoice * This, ISpObjectToken * pToken); HRESULT (__stdcall * GetVoice) (ISpVoice * This, ISpObjectToken ** ppToken); HRESULT (__stdcall * Speak) (ISpVoice * This, const WCHAR * pwcs, DWORD dwFlags, ULONG * pulStreamNumber); HRESULT (__stdcall * SpeakStream) (ISpVoice * This, IStream * pStream, DWORD dwFlags, ULONG * pulStreamNumber); HRESULT (__stdcall * GetStatus) (ISpVoice * This, SPVOICESTATUS * pStatus, WCHAR ** ppszLastBookmark); HRESULT (__stdcall * Skip) (ISpVoice * This, WCHAR * pItemType, long lNumItems, ULONG * pulNumSkipped); HRESULT (__stdcall * SetPriority) (ISpVoice * This, SPVPRIORITY ePriority); HRESULT (__stdcall * GetPriority) (ISpVoice * This, SPVPRIORITY * pePriority); HRESULT (__stdcall * SetAlertBoundary) (ISpVoice * This, SPEVENTENUM eBoundary); HRESULT (__stdcall * GetAlertBoundary) (ISpVoice * This, SPEVENTENUM * peBoundary); HRESULT (__stdcall * SetRate) (ISpVoice * This, long RateAdjust); HRESULT (__stdcall * GetRate) (ISpVoice * This, long *pRateAdjust); HRESULT (__stdcall * SetVolume) (ISpVoice * This, USHORT usVolume); HRESULT (__stdcall * GetVolume) (ISpVoice * This, USHORT * pusVolume); HRESULT (__stdcall * WaitUntilDone) (ISpVoice * This, ULONG msTimeout); HRESULT (__stdcall * SetSyncSpeakTimeout) (ISpVoice * This, ULONG msTimeout); HRESULT (__stdcall * GetSyncSpeakTimeout) (ISpVoice * This, ULONG * pmsTimeout); HANDLE (__stdcall * SpeakCompleteEvent) (ISpVoice * This); HRESULT (__stdcall * IsUISupported) (ISpVoice * This, const WCHAR * pszTypeOfUI, void *pvExtraData, ULONG cbExtraData, BOOL * pfSupported); HRESULT (__stdcall * DisplayUI) (ISpVoice * This, HWND hwndParent, const WCHAR * pszTitle, const WCHAR * pszTypeOfUI, void *pvExtraData, ULONG cbExtraData); } ISpVoiceVtbl; struct ISpVoice { struct ISpVoiceVtbl *lpVtbl; };