c# - Delegate Variance in c++/cli -
i in process of converting working c# code c++/cli, , i'm having trouble understanding why not compile.
the error received:
void mynamespace::handler::datachanged(system::object ^,system::eventargs ^)' : specified function not match delegate type 'void (system::object ^,system::data::datarowchangeeventargs ^)'
looks c++/cli doesn't support parameter variance delegates c# , vb do, see this microsoft connect bug report.
as work around can wrap call handler in wrapper takes datarowchangeeventargs , calls handler:
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); } }
Comments
Post a Comment