1

私は ac# を持っていますが、コードがあり、cli/c++ でそれが必要ですが、常にこのエラーが発生します

「エラー 2 エラー C2955: 'BaseLibCS::MethodInvoker': クラス ジェネリックを使用するには、ジェネリック引数リストが必要です」

「エラー 4 エラー C2664: 'BaseLibCS::MethodInvoker::MethodInvoker(System::String ^,...cli::array ^)': パラメーター 1 を 'GetNotifications ^const ' から 'System::String ^' に変換できません"

「エラー 3 エラー C2102: '&' には左辺値が必要です」

「エラー 1 エラー C2872: 'MethodInvoker': あいまいなシンボル」

これは私のC#コードです:

private void HandleFarmStateChanged(object sender, ValueChangedEventArgs<CFarm.FarmState> e)
        {
            if (control.InvokeRequired)
            {
                control.Invoke(new MethodInvoker(delegate
                {
                    HandleFarmStateChanged(sender, e);
                }));
                return;
            }

           //FarmStateStatusLabel.Text = e.NewValue.ToString();
            Console.WriteLine(e.NewValue.ToString());
            Console.WriteLine("       ");
        }

これは私のC ++コードです:

void GetNotifications::HandleFarmStateChanged(Object ^sender, ValueChangedEventArgs<CFarm::FarmState> ^e)
{
    if (control->InvokeRequired)
            {
                control->Invoke(gcnew MethodInvoker(this,&GetNotifications::HandleFarmStateChanged(sender, e)));
                //}));
                return;
            }

    Console::WriteLine(e->NewValue.ToString());
    Console::WriteLine("       ");
}
4

1 に答える 1

2

調査の 1 日後、私は問題を見つけました。それは、C++/CLI が匿名デリゲートをサポートしていないためです。これは C# の排他的な機能です。クラスの別のメソッドにデリゲート ターゲット メソッドを記述する必要があります。また、デリゲート型を宣言する必要があります。MethodInvoker はその仕事を行うことができません。

良い一日を

于 2012-12-21T14:02:52.193 に答える