Похоже, что C ++ / CLI не поддерживает дисперсию параметров для делегатов, как это делают C # и VB, см. этот отчет об ошибках подключения Microsoft .
В качестве обходного пути вы можете обернуть ваш вызов обработчику в оболочку, которая принимает DataRowChangeEventArgs и вызывает ваш обработчик:
public ref class MyClass
{
....
public:
void MyClass::Delegates(DataTable ^table)
{
Handler ^handler = gcnew Handler();
DataRowChangeEventForwarder& forwarder =
gcnew DataRowChangeEventForwarder(
new EventHandler(handler, &MyNamespace::Handler::DataChanged)));
table->RowChanged += gcnew DataRowChangeEventHandler (forwarder, &MyNamespace::MyClass::RowChangedDelegate);
}
}
public ref class DataRowChangeEventForwarder
{
private:
EventHandler^ eventHandler;
public:
EventForwarder(EventHandler^ eventHandler)
{
this->eventHandler = eventHander;
}
void MyClass::RowChangedDelegate(Object ^sender, DataRowEventArgs ^arg)
{
handler->DataChanged(sender, arg);
}
}