HRESULT replaceChild(
  IXMLDOMNode* pNewChild, 
  IXMLDOMNode* pOldChild, 
  IXMLDOMNode** ppOutOldChild
);

解决方案 »

  1.   

    ×ppOutOldChild 返回的是被替换掉的节点指针。因为替换以后你就找不到这个节点了,可以保存这个指针来获得。
      

  2.   

    HRESULT replaceChild( 
      IXMLDOMNode* pNewChild,  // 将要替换旧节点的新节点
      IXMLDOMNode* pOldChild,  // 被替换的旧节点
      IXMLDOMNode** ppOutOldChild // 返回被替换的旧节点,它返回的值应该等于前面传入的pOldChild
    ); 之所以返回删除的节点是因为某些时候我们需要对删除的节点在做处理,如果不返回我们删除了一会就再也不能获取指向他的指针了。
      

  3.   

    1.既然替换之后还有pOldChild == ppOutOldChild(好像也是这样),那替换之后这两个指针不是一回事吗?
    2.替换之后还可以通过pNewChild对新节点操作吗?之后是否需要调用pNewChild->Release()?
    3.如果我想使pOldChild指向替换之后的新节点,即pOldChild = pNewChild;(这种操作会自动调用AddRef()吗?), 会有什么问题?
    这个问题实在令人很难受,谢谢!
      

  4.   

    我感觉,替换完了,pOldChild的值已经变成pNewChild了。所以要提供第三个参数。
      

  5.   


    应该不是这样的1. 替换后pOldChild就可能为空了,ppOutOldChild的值只是可能和替换前的pOldChild相同
    2. I think so.
    3. 不是智能指针,应该不会AddRef.
      

  6.   

    pNewChild->Release()?如果是create的元素必须要release
      

  7.   

    我测试了几种情况:
    替换换后,可以调用pOld->Release()和pOutOldChild->Release();
    pOldChild = pNewChild之后要调AddRef(),否则pNewChild->Release()后对pOldChild操作会失败(我也创建了几个函数,用来创建新的节点然后返回节点指针,
    这么以来也不用不怕有内存泄漏了,呵呵).
    所以,我觉得这个函数很诡异,不知是不是错觉.