ISpeechRecoGrammar CmdLoadFromResource Method (SAPI 5.3)

Speech API 5.3
Microsoft Speech API 5.3

Interface: ISpeechRecoGrammar

CmdLoadFromResource Method

The CmdLoadFromResource method loads a command and control grammar from a Win32 resource.

     hModule As Long,
     ResourceName As Variant,
     ResourceType As Variant,
     LanguageId As Long,
     [LoadOption As SpeechLoadOption = SLOStatic]


Specifies the hModule.
Specifies the ResourceName.
Specifies the ResourceType.
Specifies the LanguageId.
[Optional] Specifies whether the grammar is to be loaded for static or dynamic use. The default is static.

Return Value



The grammar resource must be a compiled SAPI 5 binary version of a context-free grammar (CFG).

Using this method will unload the currently loaded CFG or proprietary grammar.


The following Visual Basic form code demonstrates the use of the CmdLoadFromResource method. Before attempting to run this code, you must:

  • Create a SpeechDocs.dll file as detailed in the Sample DLL Code Example, and
  • Make sure your microphone is connected and functional.

The Form_Load procedure creates a grammar object and loads it with the compiled Solitaire grammar contained in the DLL. There are no controls on this form; simply speak into your microphone. Phrases like "Move the red ten" or "Play the queen of hearts" will be recognized.

Option Explicit

Dim WithEvents MyRecoContext As SpSharedRecoContext
Dim MyGrammar As ISpeechRecoGrammar
Dim RsrcHandle As Long

' Change this constant to match the path
' of the SpeechDocs DLL on your machine!
Const Lib As String = "C:\SpeechDocs.dll"
Const RsrcType As String = "CFGGRAMMAR"
Const RsrcName  As Long = 101
Const LangID As Long = &H409;

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" _
    (ByVal lpLibFileName As String) As Long

Private Sub Form_Load()
    On Error GoTo EH

    Set MyRecoContext = New SpSharedRecoContext
    Set MyGrammar = MyRecoContext.CreateGrammar

    ' Obtain a handle to the executable holding the grammar as a resource
    RsrcHandle = LoadLibrary(Lib)

    ' Load the grammar from the resource
    MyGrammar.CmdLoadFromResource RsrcHandle, RsrcName, RsrcType, LangID, SLOStatic

    ' Set all DefaultToActive rules active
    ' NOTE: The solitaire grammar happens to have DefaultToActive rules
    ' which is why we can activate them this way.
    MyGrammar.CmdSetRuleState "", SGDSActive

    If Err.Number Then ShowErrMsg
End Sub

Private Sub MyRecoContext_FalseRecognition _
   (ByVal StreamNumber As Long, _
    ByVal StreamPosition As Variant, _
    ByVal result As SpeechLib.ISpeechRecoResult)

    MsgBox "(not recognized!)"

End Sub

Private Sub MyRecoContext_Recognition _
   (ByVal StreamNumber As Long, _
    ByVal StreamPosition As Variant, _
    ByVal RecognitionType As SpeechLib.SpeechRecognitionType, _
    ByVal result As SpeechLib.ISpeechRecoResult)

    On Error GoTo EH
    MsgBox result.PhraseInfo.GetText

    If Err.Number Then ShowErrMsg
End Sub

Private Sub ShowErrMsg()

    ' Declare identifiers:
    Const NL = vbNewLine
    Dim T As String

    T = "Desc: " & Err.Description & NL
    T = T & "Err #: " & Err.Number
    MsgBox T, vbExclamation, "Run-Time Error"

End Sub