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

经过一天的研究,我发现了问题,这是因为 C++/CLI 不支持匿名委托,这是 C# 独有的功能。您需要在类的单独方法中编写委托目标方法。您还需要声明委托类型,MethodInvoker 无法完成这项工作。

想了很多,祝你有美好的一天

于 2012-12-21T14:02:52.193 回答