BEGIN_INTERFACE_PART(Motion, IMotion)
STDMETHOD_(void, Fly) ();
STDMETHOD_(int&, GetPosition) ();
END_INTERFACE_PART(Motion)Motion, IMotion这两个参数是什么意思?
STDMETHOD_(void, Fly) ();
STDMETHOD_(int&, GetPosition) ();
END_INTERFACE_PART(Motion)Motion, IMotion这两个参数是什么意思?
BEGIN_INTERFACE_PART是宣布一个COM接口实现的开始!
上面这个例子是说明包含这个BEGIN_INTERFACE_PART的类实现了IMotion接口,它在内部并定义成m_xMotion对象!
不知道你的c++学得怎么样?
如果不是很熟,那么建议你先把c++搞熟悉来,能够很流利地看别人地源代码,再去看com的东西,不然就算你记住了,也是 只其然而不知其所以然,我就是例子。
想学com建议你看三本书,com技术内幕(Dale Rogerson) com原理与应用 深入解析ATL
看看这个宏吧:#define BEGIN_INTERFACE_PART(localClass, baseClass) \
class X##localClass : public baseClass \
{ \
public: \
STDMETHOD_(ULONG, AddRef)(); \
STDMETHOD_(ULONG, Release)(); \
STDMETHOD(QueryInterface)(REFIID iid, LPVOID* ppvObj); \#ifndef _AFX_NO_NESTED_DERIVATION
#define BEGIN_INTERFACE_PART_DERIVE(localClass, baseClass) \
class X##localClass : public baseClass \
{ \
public: \#else
#define BEGIN_INTERFACE_PART_DERIVE(localClass, baseClass) \
BEGIN_INTERFACE_PART(localClass, baseClass) \#endif
我们看前面几行就知道这个宏是什么意思了(后面的,我也没有研究,hehe),它定义了一个名字为X##localclass(在你举的例子里就是XMotion)的嵌套类。定义这个类有什么呢?就是为类实现IMotion这个接口,MFC/ATL中实现接口的一种方法就是用嵌套类(看看《com原理与应用》).
另外,这宏还声明了IUnknown接口的3个成员函数,因为所有的接口都从IUnknown派生,都必须实现这3个函数。其实,宏在MFC/ATL中用了很多,也用得很好(代码看起来很整齐),但是你要懂这些宏的具体含义最好看看宏的定义,还要有一些相关知识。
如果研究ATL的宏,建议看看《深入解析ATL》呵呵,我说的两本书都是潘爱民的,我觉得确实写得不错。