SpeechRecognizedEventArgs

SpeechRecognizedEventArgs

请看下面的代码

private: System::Void button3_Click(System::Object^  sender, System::EventArgs^  e)
{
    System::Speech::Recognition::SpeechRecognizer ^sr = gcnew System::Speech::Recognition::SpeechRecognizer();

    array<String ^> ^strs = gcnew array<String ^> {"Hello", "World"};

    System::Speech::Recognition::Choices ^colors = gcnew System::Speech::Recognition::Choices();
    colors->Add(strs);

    System::Speech::Recognition::GrammarBuilder ^gb = gcnew System::Speech::Recognition::GrammarBuilder();
    gb->Append(colors);

    System::Speech::Recognition::Grammar ^g = gcnew System::Speech::Recognition::Grammar(gb);
    sr->LoadGrammar(g);

    // System::IntPtr ptr = gcnew System::IntPtr(&sr_SpeechRecognized);
    sr->SpeechRecognized += gcnew System::EventHandler<System::Speech::Recognition::SpeechRecognizedEventArgs>(this,&Form1::sr_SpeechRecognized);
}

void sr_SpeechRecognized(System::Object ^sender, System::Speech::Recognition::SpeechRecognizedEventArgs^ e)
{
 }


此代码生成以下错误

1>------ Build started: Project: SpeechTest, Configuration: Debug Win32 ------
1>  SpeechTest.cpp
1>c:\users\yohan\documents\visual studio 2010\projects\speechtest\speechtest\Form1.h(144): error C3225: generic type argument for 'TEventArgs' cannot be 'System::Speech::Recognition::SpeechRecognizedEventArgs', it must be a value type or a handle to a reference type
1>c:\users\yohan\documents\visual studio 2010\projects\speechtest\speechtest\Form1.h(144): error C3352: 'void SpeechTest::Form1::sr_SpeechRecognized(System::Object ^,System::Speech::Recognition::SpeechRecognizedEventArgs ^)' : the specified function does not match the delegate type 'void (System::Object ^,System::Speech::Recognition::SpeechRecognizedEventArgs)'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


在这里,一切正常,期望创建处理程序sr->SpeechRecognized += gcnew System::EventHandler<System::Speech::Recognition::SpeechRecognizedEventArgs>(this,&Form1::sr_SpeechRecognized);

如果您将此处理程序部分注释掉,一切都会好的。这里的Form表示当前的GUI形式,这是C ++ / CLI构建的默认GUI形式。所有这些代码都在该表单内。我以阅读文章的方式创建了该处理程序。所以有人可以帮我解决这个问题吗?

最佳答案

您缺少^

sr->SpeechRecognized += gcnew System::EventHandler<System::Speech::Recognition::SpeechRecognizedEventArgs^>(this,&Form1::sr_SpeechRecognized);
                                                                                           // right here ^


仔细查看收到的错误消息,删除命名空间,并使用换行符使所有内容对齐。

     错误C3352:'无效的SpeechTest :: Form1 :: sr_SpeechRecognized(Object ^,SpeechRecognizedEventArgs ^)':
指定的函数与委托类型'void(Object ^,SpeechRecognizedEventArgs)'不匹配
                                                                                                ^


您正在尝试为采用SpeechRecognizedEventArgs的方法创建委托,但为它指定采用SpeechRecognizedEventArgs^的方法的名称。

关于c# - 如何在C++/CLI中创建C#事件处理程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16602180/

10-10 21:54