Необходимо запустить фиктивный код VBA, SAPI, написанный Microsoft, но неясно, как выполнять вызовы этих подпрограмм с аргументами. - PullRequest
0 голосов
/ 02 апреля 2019

Следующий код был взят из URL: https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms720590(v=vs.85)

Страница пытается что-то рассказать об этом, но она расплывчатая. Следующий пример кода представляет собой простое, но функциональное приложение распознавания, использующее распознаватель в процессе (или InProc). Он использует грамматику диктовки и позволяет свободно диктовать. Комментированные строки ссылаются на гипотетические метки в форме для возможного отображения информации. Чтобы увидеть распознанную фразу, добавьте одну метку с именем Label1. Конечно, вы можете изменить это приложение в соответствии с вашими требованиями. Перед запуском приложения должна быть включена речевая ссылка. С помощью меню «Проект»> «Ссылки» найдите и выберите библиотеку объектов речи Microsoft. Для распознавателя InProc требуются дополнительные строки, которых нет для общих распознавателей. Для распознавателей InProc аудиообъект для ввода или вывода должен быть назначен явно.

'Dim WithEvents RC As SpInProcRecoContext
Dim Recognizer As SpInprocRecognizer
Dim myGrammar As ISpeechRecoGrammar

Sub Form_Load()
    On Error GoTo EH

    Set RC = New SpInProcRecoContext
    Set Recognizer = RC.Recognizer

    Set myGrammar = RC.CreateGrammar
    myGrammar.DictationSetState SGDSActive

    Dim Category As SpObjectTokenCategory
    Set Category = New SpObjectTokenCategory
    Category.SetId SpeechCategoryAudioIn

    Dim Token As SpObjectToken
    Set Token = New SpObjectToken
    Token.SetId Category.Default()
    Set Recognizer.AudioInput = Token

EH:
    If Err.Number Then ShowErrMsg
End Sub

Sub RC_Recognition(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal RecognitionType As SpeechLib.SpeechRecognitionType, ByVal Result As SpeechLib.ISpeechRecoResult)
    On Error GoTo EH

    Range("G8").Value = Result.PhraseInfo.GetText

EH:
    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

End Sub
Sub MyMacro()
    Call Form_Load
    Call RC_Recognition
End Sub````

Not able figure out how to call subroutine "RC_Recognition" that is taking some arguments.

1 Ответ

0 голосов
/ 05 апреля 2019

строка Dim WithEvents RC As SpInProcRecoContext является ключом.Это автоматически отображает функцию RC_Recognition как обработчик для события Recognition.

...