void create(CString str)
{
     BSTR s;
     s=::SysAllocString(str);
     CComPtr<IXMLDOMElement> e = NULL;
     HRESULT hr = xmldoc.createElement(s,&e);   //xmldoc是一个预先定义并实例化的CComPtr<IXMLDOMDocument>变量
}我调用create这个方法传L"AAA"进去能正确执行,直接声明一个CString变量并赋值传进来也能正确执行。但是我将调用CTreeCtrl::GetItemText(返回值是CString类型)方法获取的值传进去,hr就总是返回e_fail错误,纠结死了.....

解决方案 »

  1.   

    CTreeCtrl::GetItemText方法返回的值我查看了下是正确的,但调用createElement方法时就老报错
      

  2.   

    没人知道吗?我估计就是createElement的第一个参数BSTR接收的字符转换有问题,但不知道怎么解决
      

  3.   


    如果是这样,那你先声明一个字符串变量,然后存储你那个CTreeCtrl::GetItemText的返回值,再传到 Create不就行了
      

  4.   

    那就这样
    Cstring stringA = CTreeCtrl::GetItemText();
    Cstring stringB = _T("xxxx");
    这两种传递进去看看行不行
      

  5.   

    找到原因了,和我传的字符有关,我传L"123"等数字字符串进去就失败,传L"aaa"等就成功,真不明白这是为什么......
      

  6.   

    重新定义函数
    void create(CString& str){  //注意参数  是引用类型
          ....
    }
    试试看