SINK_ENTRY_EX
时间: 2023-11-21 22:58:14 浏览: 141
SINK_ENTRY_EX是ATL中的一个宏,用于将事件处理程序添加到事件源的连接点容器中。它的语法如下:
```cpp
SINK_ENTRY_EX(
nID,
uuid,
nDispid,
fn
);
```
其中,nID是连接点容器的标识符,uuid是事件源的接口标识符,nDispid是事件的标识符,fn是事件处理程序的名称。SINK_ENTRY_EX宏会生成一个结构体,该结构体包含了事件处理程序的信息,并将其添加到连接点容器中。
举个例子,假设我们有一个名为CFun1的类,它实现了一个名为_IFun1Events的事件源接口,其中包含一个名为OnNotify的事件。我们可以使用SINK_ENTRY_EX宏将事件处理程序添加到连接点容器中,如下所示:
```cpp
class CFun1 :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CFun1, &CLSID_Fun1>,
public IDispatchImpl<IFun1, &IID_IFun1, &LIBID_AtlEventServerLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IConnectionPointContainerImpl<CFun1>,
public CProxy_IFun1Events<CFun1>,
public IObjectWithSiteImpl<CFun1>,
public IProvideClassInfo2Impl<&CLSID_Fun1, &DIID__IFun1Events, &LIBID_AtlEventServerLib>,
public CProxy_IAxWinAmbientDispatch<CFun1>,
public IDispEventImpl<1, CFun1, &DIID__IFun1Events, &LIBID_AtlEventServerLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
// ...
BEGIN_SINK_MAP(CFun1)
SINK_ENTRY_EX(0, __uuidof(_IFun1Events), 1, OnNotify)
END_SINK_MAP()
// ...
};
```
这样,当事件源触发OnNotify事件时,CFun1类的OnNotify方法就会被调用。
阅读全文