求思路,或相关文件信息皆可

解决方案 »

  1.   

    首先让对象支持序列化
    序列化后的二进制数据使用某种编码(比如BASE64)转换成文本,如果本身就是文本则无需此步
    把文本保存到XML中的CDATA节中
      

  2.   

    请问你说的是不是让对象支持IStream接口?你那里有例子吗?可不可以共享一个。非常感谢
      

  3.   

    支持序列化有很多方式,如果你的对象是COM组件,你可以选择实现IPersistStream[Init]、IPersistStorage、IPersistPropertyBag接口之一,如果你的对象是MFC类,可以直接实现序列化,如果是其它类型,序列化过程可以完全自定义
      

  4.   

    XML Serial 序列化 使用 MSXML2.dll
      

  5.   

    为何不直接用MFC的序列化来保存对象http://it.sohu.com/20040723/n221164254.shtml
      

  6.   

    bool SaveXml(BOOL bFlagSaveAs, CString strPath)
    {
    CString strFilePath = _T(""); if (bFlagSaveAs )
    {
    strFilePath.Format(_T("%s%s"),strPath,LANGUAGE_PROJECT_FILENAME);
    }
    else
    {
    strFilePath.Format(_T("%s%s"),GetProjectPath(),LANGUAGE_PROJECT_FILENAME);
    }


    CWaitCursor wati;
    CComPtr<IXMLDOMDocument> pDoc;
    HRESULT hr = pDoc.CoCreateInstance(__uuidof(DOMDocument));
    if (FAILED(hr))
    {
    pDoc.Detach();
    return false;
    }
    try
    {
    //设置根节点
    CComPtr<IXMLDOMElement>  xmlRoot ; //根节点
    pDoc->createElement(BSTR(_T("FontTable")),&xmlRoot);
    pDoc->appendChild(xmlRoot,NULL); //Language节点
    for (int i = 0 ; i < m_LanguageInfo_ary.GetSize() ; i++)
    {
    CString strLanID  = _T("");
    CString strLanHAlign = _T("");
    CString strLanVAlign = _T(""); Language_Info info = m_LanguageInfo_ary.GetAt(i);
    strLanID.Format(_T("%d"),info.iLanguageID);
    strLanHAlign.Format(_T("%d"),info.HAlignStyle);
    strLanVAlign.Format(_T("%d"),info.VAlignStyle); //设置Language节点的属性
    CComPtr<IXMLDOMElement>  xmlLanElement;
    hr = pDoc->createElement(BSTR(LANGUAGE_ITEM_LANGUAGE),&xmlLanElement);
    xmlRoot->appendChild(xmlLanElement,NULL);
    xmlLanElement->setAttribute(BSTR(_T("Name")) ,CComVariant(info.strLanguageName));
    xmlLanElement->setAttribute(BSTR(_T("H_Align")) ,CComVariant(info.HAlignStyle));
    xmlLanElement->setAttribute(BSTR(_T("V_Align")) ,CComVariant(info.VAlignStyle));
    xmlLanElement->setAttribute(BSTR(_T("H_Offset")) ,CComVariant(info.H_Offset));
    xmlLanElement->setAttribute(BSTR(_T("V_Offset")) ,CComVariant(info.V_Offset)); //创建Style节点
    CResourceList::iterator it = info.StyleMgr.m_ResourceList.begin();
    for (;it!=info.StyleMgr.m_ResourceList.end();it++)
    {
    CResourceItem* pStyleItem = (*it);
    CComPtr<IXMLDOMElement>  xmlStyleElement;
    hr = pDoc->createElement(BSTR(_T("Style")),&xmlStyleElement);
    xmlLanElement->appendChild(xmlStyleElement,NULL);
    xmlStyleElement->setAttribute(BSTR(_T("Name")) ,CComVariant(pStyleItem->m_strResourceName));
    xmlStyleElement->setAttribute(BSTR(_T("ImageFormat")) ,CComVariant(pStyleItem->m_nType));
    xmlStyleElement->setAttribute(BSTR(LANGUAGE_STYLEATTR_RDT) ,CComVariant(pStyleItem->m_strRawDataType));

    xmlStyleElement->setAttribute(BSTR(_T("UseTransColor")) ,CComVariant(pStyleItem->m_bUseTranColor));
    DWORD dwColor = (DWORD)pStyleItem->m_TranColor;
    xmlStyleElement->setAttribute(BSTR(_T("TransColor")) ,CComVariant(dwColor));
    xmlStyleElement->setAttribute(BSTR(_T("C2CTbl")) ,CComVariant(pStyleItem->m_CCTableName));
    xmlStyleElement->setAttribute(BSTR(_T("C2PTbl")) ,CComVariant(pStyleItem->m_CPTableName));
    }
    } hr = pDoc->save(CComVariant(strFilePath));
    CFormatXML::Format(strFilePath);
    if (FAILED(hr))
    {
    pDoc.Detach();
    return false;
    }
    pDoc.Detach();
    }
    catch (CFileException* e)
    {
    e->Delete();
    pDoc.Detach();
    return false;
    } return true;
    }
      

  7.   

    可以用TinyXML或者CMarkup,都是轻量级的XML组件,很管用。我们公司的产品界面布局的保存用的就是TinyXML。网上有很多示例,一搜一大把。