ISpRecoGrammar::LoadCmdFromProprietaryGrammar
ISpRecoGrammar::LoadCmdFromProprietaryGrammar loads a proprietary grammar.
HRESULT LoadCmdFromProprietaryGrammar(
REFGUID rguidParam,
LPCWSTR *pszStringParam,
const void *pvDataParam,
ULONG cbDataSize,
SPLOADOPTIONS Options
);
Parameters
- rguidParam
- [in] Unique identifier of the grammar. The GUID will be used by the application and the SR engine to uniquely identify the SR engine for verifying support.
- pszStringParam
- [in, string] The null-terminated string command. The string can be used by the application and the SR engine to specify which part of a grammar to utilize.
- pvDataParam
- [in] Additional information for the process. SAPI will handle the marshaling of the data to the SR engine.
- cbDataSize
- [in] The size, in bytes, of pvDataParam. SAPI will handle the marshaling of the data to the SR engine.
- Options
- [in] Flag of type SPLOADOPTIONS indicating whether the file should be loaded statically or dynamically. This value must be SPLO_STATIC.
Return values
Value | Description |
---|---|
S_OK | Function completed successfully. |
E_INVALIDARG | pszStringParam or pvDataParam is invalid or bad. Alternatively, Options is not SPLO_STATIC. |
FAILED(hr) | Appropriate error message. |
Remarks
When an application calls ::LoadCmdFromProprietaryGrammar, the currently loaded CFG or proprietary will be unloaded.
Applications should use ::LoadCmdFromProprietaryGrammar when using a proprietary grammar format that the SR engine supports. If the current SR engine does not support the proprietary grammar format (specified using rguidParam and pszStringParam), the SR engine may return E_NOTIMPL.
Example
// Declare local identifiers:
HRESULT hr = S_OK;
CComPtr<ISpRecoGrammar> cpRecoGrammar;
CComPtr<ISpRecoContext> cpRecoContext;
ULONGLONG ullGramId = 1;
GUID rguidParam;
// Create a new grammar object.
hr = cpRecoContext->CreateGrammar(ullGramId, &cpRecoGrammar;);
if (SUCCEEDED(hr))
{
// Load a proprietary grammar.
hr = cpRecoGrammar->LoadCmdFromProprietaryGrammar(rguidParam, L"Rule1", NULL, NULL, SPLO_STATIC);
}
if (SUCCEEDED(hr))
{
// Do stuff here.
}