BEGIN_INTERFACE_PART这个宏是什么意思?有什么作用?
发布网友
发布时间:2022-04-25 14:15
我来回答
共1个回答
热心网友
时间:2023-10-08 19:11
在类中使用 BEGIN_INTERFACE_PART 和 END_INTERFACE_PART 宏来定义你希望实现的每一个接口
BEGIN_INTERFACE_PART(localClass,iface); END_INTERFACE_PART(localClass)
localClass: 实现接口的类名 iface 要实现的接口名
说明:为你的类要实现的每一个接口,你都需要使用BEGIN_INTERFACE_PART和END_INTERFACE_PART对。这两个宏定义了一个从OLE接口继承的本地类,你也要在这个类的里面申明成员。AddRef,Release和QueryInterface方法被自动的申明。你必须为每一个接口将要实现的函数包含一个申明(这些申明被放置在BEGIN_INTERFACE_PART和END_INTERFACE_PART宏之间)
iface参数是你希望实现的OLE接口,例如IAdviseSink或者IPersistStorage(或者你自已定义的接口)。
localClass参数是你本地将会定义的类名。'X'将被自动的首先考虑。这个命名习惯过去常常被用来避免全局类名冲突。另外,嵌入的成员命名除了以'm_x'为前缀以外,其它的与localClass名称一样。
例如: BEGIN_INTERFACE_PART(MyAdviseSink, IAdviseSink) STDMETHOD_(void,OnDataChange)(LPFORMATETC, LPSTGMEDIUM); STDMETHOD_(void,OnViewChange)(DWORD, LONG); STDMETHOD_(void,OnRename)(LPMONIKER); STDMETHOD_(void,OnSave)(); STDMETHOD_(void,OnClose)(); END_INTERFACE_PART(MyAdviseSink)
将定义一个从IAdviseSink继承的XMyAdviseSink本地类,和被称为m_xMyAdviseSink的类成员。
说明:从添加STDMETHOD_开始的行是从OLE2.H复制的,它是被改进的和必须的。从OLE2.H文件中复制他们能减少错误和更容易理解。