ssstruct AFX_MSGMAP
{
AFX_MSGMAP* pBaseMessageMap;
AFX_MSGMAP_ENTRY*  lpEntries;
}#define AFX_MSGMAP_ENTRY _messageEntries[];#define BEGIN_MESSAGE_MAP(theClass,baseClass)\
AFX_MSG theClass::messageMMap = \
{&(baseClass::messageMap),
     (AFX_MSGMAP_ENTRY*) &(theClass::messageEntries)};
}
我的问题是:最后一行中为什么要加“&”??本来messageEntries已经是一个指针了,再加&不就是AFX_MSGMAP_ENTRY**了么??那不就不符合第4行要AFX_MSGMAP_ENTRY*了么??

解决方案 »

  1.   

    少了一行代码:
    #define DECLARE_MESSAGE_MAP()
    static AFX_MSGMAP* messageMap;
    static AFX_MSGMAP_ENTRY*  _messageEntries[];
      

  2.   

    struct AFX_MSGMAP_ENTRY  // MFC 4.0
    {
        UINT nMessage; // windows message
        UINT nCode;    // control code or WM_NOTIFY code
        UINT nID;      // control ID (or 0 for windows messages)
        UINT nLastID;  // used for entries specifying a range of control id's
        UINT nSig;     // signature type (action) or pointer to message #
        AFX_PMSG pfn;  // routine to call (or special value)
    };
    struct AFX_MSGMAP
    {
            AFX_MSGMAP* pBaseMessageMap;
            AFX_MSGMAP_ENTRY* lpEntries;
    };#define DECLARE_MESSAGE_MAP() \
            static AFX_MSGMAP_ENTRY _messageEntries[]; \
            static AFX_MSGMAP messageMap; \
            virtual AFX_MSGMAP* GetMessageMap() const;#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
            AFX_MSGMAP* theClass::GetMessageMap() const \
                    { return &theClass::messageMap; } \
            AFX_MSGMAP theClass::messageMap = \
            { &(baseClass::messageMap), \
                    (AFX_MSGMAP_ENTRY*) &(theClass::_messageEntries) }; \
            AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
            {#define END_MESSAGE_MAP() \
            { 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
            };
     问题:
    本来_messageEntries在DECLARE_MESSAGE_MAP宏中的定义是static AFX_MSGMAP_ENTRY _messageEntries[];
    就已经是地址了还加&??