Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Microsoft Speech API 5.3
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.
}