BEGIN_INTERFACE_PART(Motion, IMotion)
        STDMETHOD_(void, Fly) ();
        STDMETHOD_(int&, GetPosition) ();
    END_INTERFACE_PART(Motion)Motion, IMotion这两个参数是什么意思?

解决方案 »

  1.   

    不知道你对COM了解得怎样!!
    BEGIN_INTERFACE_PART是宣布一个COM接口实现的开始!
    上面这个例子是说明包含这个BEGIN_INTERFACE_PART的类实现了IMotion接口,它在内部并定义成m_xMotion对象!
      

  2.   

    那第一个motion是什么意思呢?
      

  3.   

    to apoor(apoor):
    不知道你的c++学得怎么样?
    如果不是很熟,那么建议你先把c++搞熟悉来,能够很流利地看别人地源代码,再去看com的东西,不然就算你记住了,也是 只其然而不知其所以然,我就是例子。
    想学com建议你看三本书,com技术内幕(Dale Rogerson) com原理与应用 深入解析ATL
      

  4.   

    你要知道是什么意思,最好的办法就是看看这个宏到底是什么样的,如果你的vc装了visual assit,看mfc/atl的源代码就很方便了。但是你如果要学习atl还要一些com的基础知识。
    看看这个宏吧:#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》呵呵,我说的两本书都是潘爱民的,我觉得确实写得不错。