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
ISpRecoContext::CreateGrammar
ISpRecoContext::CreateGrammar creates an SpRecoGrammar object.
HRESULT CreateGrammar(
ULONGLONG ullGrammarId,
ISpRecoGrammar **ppGrammar
);
Parameters
- ullGrammarId
[in] Specifies the grammar identifier. The identifier is used by the application and is not required. This identifier is associated with all result objects from the grammar (see SPPHRASE.ullGrammarID). - ppGrammar
[out] Address of a pointer which receives the ISpRecoGrammar object. The application must call IUnknown::Release on the object when finished using it.
Return values
Value |
S_OK |
E_POINTER |
E_OUTOFMEMORY |
SPERR_SR_ENGINE_EXCEPTION |
FAILED(hr) |
Example
The following code snippet illustrates the use of ISpRecoContext::CreateGrammar.
// Declare local identifiers:
HRESULT hr = S_OK;
CComPtr<ISpRecoContext> cpRecoContext;
CComPtr<ISpRecoResult> cpRecoResult;
CComPtr<ISpRecoGrammar> cpRecoGrammar;
ULONGLONG ullGramId = 1;
SPPHRASE *pPhrase;
const WCHAR *MY_CFG_FILENAME = L"Foo.cfg"; // Dummy file name.
// Create a grammar object.
hr = cpRecoContext->CreateGrammar(ullGramId, &cpRecoGrammar;);
if (SUCCEEDED(hr))
{
// Load a cfg from a file (constant points to dummy file name).
hr = cpRecoGrammar->LoadCmdFromFile(MY_CFG_FILENAME, SPLO_STATIC);
}
if (SUCCEEDED(hr))
{
// Activate the top-level rules.
hr = cpRecoGrammar->SetRuleState(NULL, NULL, SPRS_ACTIVE);
}
if (SUCCEEDED(hr))
{
// Get a recognition.
// ...
}
// Get the recognized phrase from the recognition result object.
hr = cpRecoResult->GetPhrase(&pPhrase;);
if (SUCCEEDED(hr))
{
// Check the grammar id of the recognition result.
_ASSERT(GRAM_ID == pPhrase->ullGrammarID);
// Release system resources.
::CoTaskMemFree(&pPhrase;);
}