У меня есть код на C #, но он мне нужен в cli / c ++, но всегда я получаю эти ошибки
«Ошибка 2: ошибка C2955:« BaseLibCS :: MethodInvoker »: использование класса
generic требует общего списка аргументов ««Ошибка 4, ошибка C2664:
«BaseLibCS :: MethodInvoker :: MethodInvoker (System :: String
^, … cli :: array ^) ‘: невозможно преобразовать параметр 1 из
‘GetNotifications ^ const’ для ‘System :: String ^’ ««Ошибка 3, ошибка C2102: ‘&’требует L-значение «
«Ошибка 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(" ");
}
После одного дня исследования я нахожу проблему, потому что C ++ / CLI не поддерживает анонимных делегатов, это эксклюзивная функция C #. Вам нужно написать целевой метод делегата в отдельном методе класса. Вам также нужно будет объявить тип делегата, MethodInvoker не сможет выполнить эту работу.
большое спасибо и хорошего дня
Других решений пока нет …