我有一个IConnectionPointContainer
并且知道我想要接收其事件的连接点。现在我需要编写一个包含这些事件的回调方法的类。
所以基本上我这样做:
OleCheck((ExtIntf as IConnectionPointContainer).FindConnectionPoint(IID_IEvents, cp));
OleCheck(cp.Advise(MySink {<--this one I need}, Cookie));
我需要提供MySink
,我知道该怎么做才能调用MyIntf.Invoke
。但是我不想手动将dispid映射到事件方法。
这意味着我不想在Invoke
:
// Handle the event
case DispID of
102 : OnStatusTextChange(pdpParams^.rgvarg^[lpDispIds[0]].bstrval);
104 : OnDownloadComplete;
105 : OnCommandStateChange(pdpParams^.rgvarg^[lpDispIds[0]].lval,
pdpParams^.rgvarg^[lpDispIds[1]].vbool);
106 : OnDownloadBegin;
108 : OnProgressChange(pdpParams^.rgvarg^[lpDispIds[0]].lval,
pdpParams^.rgvarg^[lpDispIds[1]].lval);
112 : OnPropertyChange(pdpParams^.rgvarg^[lpDispIds[0]].bstrval);
{... doh}
对于连接点IID_IEvents
,我有接口IEvents
和dispinterface声明(来自Delphi类型库导入)。我不能以某种方式实施IEvents
吗?我想要一个包含方法的干净类,每个方法都是IID_IEvents
连接点提供的事件之一的回调。
我非常希望有人知道
任何提示?
答案 0 :(得分:1)
TechVanguards有一个为您生成代码的工具:COM Sink Event Generator。
你可以also see my question;我呻吟着不得不写下你所面对的写作。