Note
Please see Azure Cognitive Services for Speech documentation for the latest supported speech solutions.
Microsoft Speech Platform
ISpRecoGrammar::SaveCmd
ISpRecoGrammar::SaveCmd allows applications using dynamic grammars to save the current grammar state to a stream.
<pre IsFakePre="true" xmlns="http://www.w3.org/1999/xhtml"> <strong>HRESULT SaveCmd(</strong> <strong> IStream</strong> *<em>pSaveStream</em>, <strong> [annotation ("__deref_opt_out")]LPWSTR</strong> **<em>ppCoMemErrorText</em> <strong>);</strong> </pre>
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.
`
// Declare local identifiers: HRESULT hr = S_OK; CComPtr<ISpRecoGrammar> cpRecoGrammar; CComPtr<ISpRecoGrammar> cpReloadedGrammar; CComPtr<ISpRecoContext> cpRecoContext; CComPtr<IStream> cpHStream; HGLOBAL hGrammar;`// Build and use a SpRecoGrammar object...
// Create a Win32 global stream. hr = ::CreateStreamOnHGlobal(NULL, true, &cpHStream;);
if (SUCCEEDED(hr)) { // Save the current grammar to the global stream. hr = cpRecoGrammar->SaveCmd(cpHStream, NULL); }
if (SUCCEEDED(hr)) { // Create the second grammar to deserialize into. hr = cpRecoContext->CreateGrammar(0, &cpReloadedGrammar;); }
if (SUCCEEDED(hr)) { // Get a handle to the stream with the serialized grammar. ::GetHGlobalFromStream(cpHStream, &hGrammar;); }
// Deserialize the CFG into a new grammar object. hr = cpReloadedGrammar->LoadCmdFromMemory((SPBINARYGRAMMAR *)::GlobalLock(hGrammar), SPLO_DYNAMIC);
if (SUCCEEDED(hr)) { // Do stuff here. }