ISpRecoGrammar::SaveCmd (SAPI 5.4)
Microsoft Speech API 5.4
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 |
S_OK |
E_INVALIDARG |
SPERR_NOT_DYNAMIC_GRAMMAR |
SPERR_UNINITIALIZED |
E_POINTER |
FAILED (hr) |
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.
}