static _ATL_FUNC_INFO OnTickInfo = {
CC_STDCALL, // Calling convention.
VT_I4, // Return type.
1, // Number of arguments.
{VT_I4} // Argument types.
};
class CSinkObj :
public IDispEventSimpleImpl<IDC_SRCOBJ, CSinkObj,
&DIID__EventSink>
{
public:
BEGIN_SINK_MAP(CSinkObj)
SINK_ENTRY_INFO(IDC_SRCOBJ, DIID__EventSink, 1, OnTick,
&OnTickInfo)
END_SINK_MAP()
HRESULT __stdcall OnTick(long tickcnt)
{
ATLTRACE("CSinkObj::OnTick\n");
return S_OK;
}
...
}
-or- class CSinkObj :
public IDispEventSimpleImpl<IDC_SRCOBJ, CSinkObj,
&DIID__EventSink>
{
public:
BEGIN_SINK_MAP(CSinkObj4)
SINK_ENTRY_EX(IDC_SRCOBJ, DIID__EventSink, 1, OnTick)
// Equivalent to:
// SINK_ENTRY_INFO(IDC_SRCOBJ, DIID__EventSink, 1, OnTick, NULL)
END_SINK_MAP()
HRESULT GetFuncInfoFromId(const IID& iid, DISPID dispidMember,
LCID lcid, _ATL_FUNC_INFO& info)
{
if (InlineIsEqualGUID(iid, DIID__EventSink))
{
info.cc = CC_STDCALL;
switch(dispidMember)
{
case 1:
info.vtReturn = VT_I4;
info.nParams = 1;
info.pVarTypes[0] = VT_I4;
return S_OK;
default:
return E_FAIL;
}
}
return E_FAIL;
}
HRESULT __stdcall OnTick(long tickcnt)
{
ATLTRACE("CSinkObj::OnTick\n");
return S_OK;
}
...
}