真心求大家帮我分析下m_TaskMap.find(ulLAW & 0xFFFF0000);中ulLAW & 0xFFFF0000的意图
(做过消息映射的进),感谢99999辈子
它和下面代码中enTask     = 0x00880000 + (enMsgForLAW<<24) 有没关系啊还有个关键问题:CUECtrlV20::CUECtrlV20():CTTask(enTask)传参数和m_TaskMap.insert(TASKMAP::value_type(((CTTask *)pue)->GetTaskType(),(CTTask *)pue));
有没关系啊,这语法和逻辑都好复杂,求真心帮助UINT32 CUEModule::AW(UINT32 ulLAW,UINT8* pucPara,UINT32 ulParaLen,UINT8* pucResult,UINT32& ulResultLen)
{
TASKMAP::iterator iter = m_TaskMap.find(ulLAW & 0xFFFF0000); if(iter == m_TaskMap.end())
{
PRINT_LOG("CUEModule","AW","the map m_TaskMap does not have an element with a key of ulLAW = %d!,failed",ulLAW);
return FALSE;
} (*iter).second->DispatchAW(ulLAW,pucPara,ulParaLen,pucResult,ulResultLen); return TRUE;
}class CTTask  
{
public:
    
    UINT32 GetTaskType();
  
};void CUEModule::InitTaskMap(UINT32 ulUeVersion)
{

case UEXX:
{
CUECtrlVXX * pue = NULL;
pue = new CUECtrlVXX;
if(NULL != pue)
{
m_TaskMap.insert(TASKMAP::value_type(((CTTask *)pue)->GetTaskType(),(CTTask *)pue));
CCompressUpload *pFtp = new CCompressUpload;
m_TaskMap.insert(TASKMAP::value_type(((CTTask *)pFtp)->GetTaskType(),(CTTask *)pFtp)); CTPSGPS *pGps = new CTPSGPS(pue);
m_TaskMap.insert(TASKMAP::value_type(((CTTask *)pGps)->GetTaskType(),(CTTask *)pGps));
}
}
break;
......
}CUECtrlVXX::CUECtrlVXX():CTTask(enTask)
{
  ......
}enTask     = 0x00880000 + (enMsgForLAW<<24) enum
{
en_ConnectToUe = enTask,
en_DisconnectFromUe,
......
}

解决方案 »

  1.   

    ulLAW & 0xFFFF0000
    就是取ulLAW的高16位CUECtrlV20::CUECtrlV20():CTTask(enTask)传参数
    这是在派生类构造函数中初始化基类的语法,CTTask是CUECtrlV20的基类吗?m_TaskMap.insert(TASKMAP::value_type(((CTTask *)pue)->GetTaskType(),(CTTask *)pue));
    第一个参数
    map的元素类型是value_type,这里就是调用构造函数构造一个临时的对象
    TASKMAP::value_type(...)
    每个元素都由key,value对构成,
    所以TASKMAP::value_type()构造函数传入
    ((CTTask *)pue)->GetTaskType()表示key,
    (CTTask *)pue表示值
      

  2.   

    ,
    能从逻辑上分析分析,我的那段代码吗?我发觉给CUECtrlV20::CUECtrlV20():CTTask(enTask),顺便传个值,消息映射就找不到响应函数了,这个是为什么呢
      

  3.   


    你说的消息映射是MFC的消息映射吗?CTTask是什么类啊?
      

  4.   

    struct AW_MSGMAP_ENTRY;
    struct AW_MSGMAP;#define DECLARE_AWMSG_MAP() \
            static AW_MSGMAP_ENTRY _AWMsgEntries[]; \
            static AW_MSGMAP AWMsgMap; \
            virtual AW_MSGMAP* GetAWMsgMap() const;class CTTask  
    {
    public:
        CTTask(UINT32 ulTaskType);
        virtual ~CTTask();        virtual UINT32 DispatchAW(LOW_AW_TYPE enLAW,
                               UINT8* pucPara,UINT32 ulParaLen,
                               UINT8* pucResult,UINT32& ulResultLen);
        UINT32 GetTaskType();
        DECLARE_AWMSG_MAP()
    protected:
    UINT32 m_ulTaskType;
    };