我把一个类定义的对象指针用setitemdata关联后,再用getitemdata函数获得它的DWORD类型的返回值,结果都是1;不管它关联的这个地址是多少getitemdata的值都是1;
但是用它关联一个int类型的变量或int类型的指针变量都很正常请高手高见

解决方案 »

  1.   

    ISmFlowchartsPtr  m_objFlowChart = NULL;  
    ISmFlowStorePtr FlowStore;

    FlowStore = g_cCaxaV5App.m_pSmSession->GetService("SmartFlow.SmFlowStore"); m_objFlowChart = FlowStore->GetFlowchartTemplates();
    IFlowChartCount = m_objFlowChart->GetCount();

    ISmClassesPtr pIsmClassess;
    ISmClassPtr pIsmClass;
    ISmObjectPtr  pObj; _variant_t VValue;

    int IClassesAssignment;

    CCAXAClassPtrList::iterator itPlanClass; 
    for(itPlanClass = m_cClassPtrList.begin(); itPlanClass != m_cClassPtrList.end(); itPlanClass++)
    {

    sDisplayName = (*itPlanClass)->GetDisplayName();

    m_hOneItem = m_FlowChartTree.InsertItem(sDisplayName,1,1,m_hRootItem);

    for(int i = 0; i < IFlowChartCount; i++)
    {
    pObjFlowchart =  m_objFlowChart->GetItem(i);
    pIsmClassess = pObjFlowchart->GetProcessClassesAssignment();

                IClassesAssignment = pIsmClassess->GetCount();

    for(int j = 0; j < IClassesAssignment; j++)
    {
    pIsmClass = pIsmClassess->GetItem(j);

    if ((*itPlanClass)->GetClassId() == pIsmClass->GetClassId())
    {

    VValue = pObjFlowchart->GetValue("TDM_NAME");
    sDisplayName =BSTR(_bstr_t(VValue));

    m_hTwoItem = m_FlowChartTree.InsertItem(sDisplayName,2,2,m_hOneItem);
    DWORD  yy = DWORD(pObjFlowchart);
    m_FlowChartTree.SetItemData(m_hTwoItem,yy);
    //ISmFlowchartPtr pObjFlowchart = (ISmFlowchart *) DWORD tt = m_FlowChartTree.GetItemData(m_hTwoItem); }
    }

    }


    }
      

  2.   

    你这里有个很严重的错误在这你使用了ISmFlowchartsPtr是智能接口指针,对智能指针进行赋值的时候,智能指针会自动对接口调用AddRef。智能接口指针并不是真正的指针,所以DWORD(pObjFlowchart)这句取到的不是接口指针的地址你这里是将接口指针赋给DWORD型变量,应该遵循COM的规范ISmFlowcharts* pIf = pObjFlowchart;
    pIf->AddRef();
    m_FlowChartTree.SetItemData(m_hTwoItem, (DWORD)pIf);最后删除Item的时候需要对Item的Data指向的接口指针调用Release
      

  3.   

    问题原因找到了,是在
    DWORD  yy= DWORD(pObjFlowchart);
    m_FlowChartTree.SetItemData(m_hTwoItem,yy);pObjFlowchart是一个指针,指向了com里的一个对象,它的值不是1,每次运行程序时它的值都不一样,但是DWORD后每次都是1为什么解决,亟待高手讲解