Microsoft Speech SDK
SAPI 5.1
ISpRecoGrammar::SaveCmd
ISpRecoGrammar::SaveCmd allows applications using dynamic grammars to save the current grammar state to a stream.
HRESULT SaveCmd(
IStream *pSaveStream,
WCHAR **ppCoMemErrorText
);
Parameters
- pSaveStream
- [in] The stream to save the compiler binary grammar into.
- ppCoMemErrorText
- [out] Optional parameter of a null-terminated string containing error messages that occurred during the save operation.
Return values
Value | Description |
---|---|
S_OK | Function completed successfully. |
E_INVALIDARG | pSaveStream is invalid or bad. |
SPERR_NOT_DYNAMIC_GRAMMAR | Command was loaded but compiler is not available. |
SPERR_UNINITIALIZED | Compiler is not available. |
E_POINTER | ppCoMemErrorText is invalid or bad. |
FAILED (hr) | Appropriate error message. |
Remarks
Applications can use ::SaveCmd to serialize grammar changes that were made at run time for use at a later time. See also ISpRecoGrammar::LoadCmdFromMemory.
Example
The following code snippet illustrates how to use ISpRecoGrammar::SaveCmd to serialize the CFG from one SpRecoGrammar object and deserialize it into another SpRecoGrammar object.
HRESULT hr = S_OK; // ... build and use a SpRecoGrammar object // create a Win32 global stream hr = ::CreateStreamOnHGlobal(NULL, true, &cpHStream); // Check hr // save the current grammar to the global stream hr = cpRecoGrammar->SaveCmd(cpHStream, NULL); // Check hr // create the second grammar to deserialize into hr = cpRecoContext->CreateGrammar(0, &cpReloadedGrammar); // Check hr // get a handle to the stream with the serialized grammar ::GetHGlobalFromStream(cpHStream, &hGrammar); // Check hr // deserialize the CFG into a new grammar object hr = cpReloadedGrammar->LoadCmdFromMemory((SPBINARYGRAMMAR *)::GlobalLock(hGrammar), SPLO_DYNAMIC); // Check hr