本帖最后由 WvW 于 2010-12-30 10:49:20 编辑

解决方案 »

  1.   

    还请教一个问题:MSXML 的接口, 默认返回 _bstr_t, 如果我封装一次后, 返回为CString, 这样会不会消耗更多内存, 产生内存碎片呢?
      

  2.   

    http://topic.csdn.net/t/20010522/16/130355.html
      

  3.   

     m_xmlnode->Puttext(str.m_str);里面做了什么
      

  4.   


    那是微软的XML tlb文件了, 也没有什么
    inline _bstr_t IXMLElement::Gettext ( ) {
        BSTR _result = 0;
        HRESULT _hr = get_text(&_result);
        if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
        return _bstr_t(_result, false);
    }inline void IXMLElement::Puttext ( _bstr_t p ) {
        HRESULT _hr = put_text(p);
        if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    }
      

  5.   


    可我定义了 UNICODE, 代码没有走到那里去啊.
      

  6.   

    你把m_xmlnode->Puttext(str.m_str);
    这句注释掉,还有内存泄露吗?
      

  7.   

    注释了就没有了哎, 难道用XML存储实时数据是个错误的选择?
      

  8.   

    我估计 修改一个节点的文本项, MSXML会重构tree, 然后有一次删除和释放操作.
      

  9.   

    #ifndef UNICODE
              BSTR str= A2WBSTR((LPTSTR)text, len);
    #else
              BSTR str= ((LPTSTR)text); // 这是不对的!
    #endif        m_xmlnode->Puttext(str.m_str);
        }
    }BSTR str = SysAllocString(text);
    SysFreeString(str);
    建议可以使用_bstr_t VC++编译器支持类或者ATL CComBSTR类。
      

  10.   

    BSTR不是一个简单的字符串,它不是以NULL结尾的,它有长度标识。
      

  11.   


    用 _bstr_t  一样的效果, 不知道为何会泄露, 郁闷死了
    用在WINCE里面的工业软件, 急人.
      

  12.   

    m_xmlnode有没有Release()?
    你不贴代码上来是没有人能帮到你的。