Ho seguito le "esercitazioni" su come esporre un framework .NET tramite COM (http://msdn.microsoft.com/en-us/library/zsfww439.aspx e http://msdn.microsoft.com/en-us/library/bd9cdfyx.aspx). Tutto funziona tranne la parte degli eventi. Quando aggiungo eventi per l'interfaccia C# viene generato il seguente codice C++:Registrazione di gestori per evento COM .NET in C++
struct __declspec(uuid("..."))
_MessageEventHandler : IDispatch
{};
struct __declspec(uuid("..."))
IConnection : IDispatch
{
virtual HRESULT __stdcall add_MessageEvent (
/*[in]*/ struct _MessageEventHandler * value) = 0;
virtual HRESULT __stdcall remove_MessageEvent (
/*[in]*/ struct _MessageEventHandler * value) = 0;
}
Il problema è che non ho trovato alcuna informazione su come utilizzare questo in C++. Devo derivare da _MessageEventHandler
e attuare operator()
? O qualcos'altro interamente?
(Si noti che per il momento sto anche cercando l'approccio più documentata di utilizzare IConnectionPointContainer e IConnectionPoint.)
Probabilmente ci si aspetta di derivare da '_MessageEventHandler' e ricevere una chiamata su' IDispatch :: Invoke() 'per l'evento - ma la domanda è con quale' DISPID'? –