Note
Please see Azure Cognitive Services for Speech documentation for the latest supported speech solutions.
Microsoft Speech Platform
ISpRecoContext::CreateGrammar
ISpRecoContext::CreateGrammar creates an SpRecoGrammar object.
<pre IsFakePre="true" xmlns="http://www.w3.org/1999/xhtml"> <strong>HRESULT CreateGrammar(</strong> <strong> ULONGLONG</strong> <em>ullGrammarId</em>, <a runat="server" href="jj127756(v=msdn.10).md"><strong>ISpRecoGrammar</strong></a> **<em>ppGrammar</em> <strong>);</strong> </pre>
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 | Description |
---|---|
S_OK | Function completed successfully. |
E_POINTER | ppGrammar is invalid. |
E_OUTOFMEMORY | Not enough system memory to create a grammar object. |
SPERR_SR_ENGINE_EXCEPTION | An exception was thrown by the SR engine. |
FAILED(hr) | Appropriate error message. |
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;);
}