2013-05-17 62 views
1

请看看下面的代码如何在C++/CLI中创建C#事件处理程序?

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表单。所有这些代码都在这种形式中。我以我阅读文章的方式创建了这个处理程序。那么有人可以帮我纠正这个问题吗?

回答

4

您错过了^

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

采取在您收到此错误信息仔细一看,与命名空间取出,并用换行符,使事情排队。

 
    error C3352: 'void SpeechTest::Form1::sr_SpeechRecognized(Object^,SpeechRecognizedEventArgs^)' : 
the specified function does not match the delegate type 'void (Object^,SpeechRecognizedEventArgs)' 
                           ^

你想创建一个委托给带有SpeechRecognizedEventArgs的方法,但你给它,需要一个SpeechRecognizedEventArgs^的方法的名称。

+0

无言谢谢..谢谢! –

相关问题