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

Popular posts from this blog

linux - Using a Cron Job to check if my mod_wsgi / apache server is running and restart -

actionscript 3 - TweenLite does not work with object -

jQuery Ajax Render Fragments OR Whole Page -