ISpRecoGrammar::SaveCmd (Windows Embedded CE 6.0)
1/6/2010
This method allows applications using dynamic grammars to save the current grammar state to a stream.
Applications can use this method to serialize grammar changes that were made at run time for use at a later time. See also ISpRecoGrammar::LoadCmdFromMemory.
Syntax
HRESULT SaveCmd(
IStream* pSaveStream,
WCHAR** ppCoMemErrorText
);
Parameters
- pSaveStream
[in] Pointer to an object implementing IStream that represents the stream to which to save the compiler binary grammar.
- ppCoMemErrorText
[out, optional] Address of a pointer to a null-terminated string specifying error messages that occurred during the save operation.
Return Value
The following table shows the possible 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. |
Example
The following code snippet illustrates how to use this method to serialize the CFG from one grammar object, and deserialize it into another grammar 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
Requirements
Header | sapi.h, sapi.idl |
Library | sapilib.lib |
Windows Embedded CE | Windows CE .NET 4.1 and later |