ISpRecoGrammar::SaveCmd (Microsoft Speech Platform)

Microsoft Speech Platform SDK 11

Microsoft Speech Platform

ISpRecoGrammar::SaveCmd

ISpRecoGrammar::SaveCmd allows applications using dynamic grammars to save the current grammar state to a stream.

HRESULT SaveCmd(
   IStream                                   *pSaveStream,
   [annotation ("__deref_opt_out")]LPWSTR   **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.


// 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.
}