creting event handler client in vc++ for Source c# event

M

Mayur

Hello all,
Can any one have the source of How to add event handler in unmanaged MFC
application for
event source which is in Managed(c# class library).

Here is the Event Source code
:
namespace ircConnect

{

public class IrcConnection

{

public delegate void MessageEventHandler(object sender,MessageEventArgs e);

public event MessageEventHandler MessageIncome;

}End Class







Event Client

void CADONET_MFCDlg::OnFilling() //This is the MFC dialog box event

{

#pragma push_macro("new")

#undef new

try

{

m_IrcConnection =new IrcConnection();

FileWatcherEvents *f=new FileWatcherEvents();

m_IrcConnection->add_MessageIncome=new
IrcConnection::MessageEventHandler(m_IrcConnection,OnMessageIncome);

};



im using gcroot template
gcroot<IrcConnection*> m_IrcConnection;

gcroot<IrcMessage*> m_IrcMessage;



void static OnMessageIncome( Object* sender,
IrcConnection::MessageEventHandler* e );

but the compile time error generated as follows

error C3363: 'void CADONET_MFCDlg::OnMessageIncome(System::Object __gc
*,ircConnect::IrcConnection::MessageEventHandler __gc *)' : cannot create a
delegate handler for 'ircConnect::IrcConnection::MessageEventHandler' from a
non-member function or a member of an unmanaged class
 
M

Marcus Heege

Hi Sven,

SvenC said:
Hi Mayur,



I guess you will need to create a managed class in your MFC app which
implements the event handler. Use a member like
gcroot<YourManagedHandlerClass*> m_handler;
When you create that instance pass it a pointer to your unmanaged class.
Use that pointer to forward the called managed handler to a member
function of your unmanaged class.
Your guess is right and BTW: if you use VS2005, you can also use helpers
from msclr/event.h to solve the problem.

Marcus
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top