Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с put_text (MSXML&VC++) 
:(
    Опции темы
Alexandre
Дата 14.11.2005, 13:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Столкнулся с задачей требующей использования XML.
ВОзникла следующая проблема - функция put_text возвращает ошибку

Код

void CMxwlDataList::SaveData(void) 
{ 
   MSXML::IXMLDOMNode* rootNode=NULL; 
   MSXML::IXMLDOMNode* pNode=NULL; 
   MSXML::IXMLDOMDocument* document = NULL; 
   MSXML::IXMLDOMParseError* parseError = NULL; 
   MSXML::IXMLDOMElement* element = NULL;    
   VARIANT var, nodeValue; 
   HRESULT hr; 

   CString progName, path; 
   char lp[1000]; 
   progName="hr.exe"; 
   GetModuleFileName(GetModuleHandle(NULL), lp, 1000 ); 
   path=lp; 
   path.Delete(path.Find(progName, 0),progName.GetLength()); 
   int i=0; 

   CoUninitialize(); 
   hr = CoInitialize(NULL); 
   if (!FAILED(hr)) 
   { 
      hr = CoCreateInstance(MSXML::CLSID_DOMDocument, NULL, 
         CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, 
         MSXML::IID_IXMLDOMDocument, (LPVOID*)&document); 
      if (document) 
      { 
         BSTR bstr = NULL; 
         document->put_async(VARIANT_FALSE); 
         bstr = m_XMLPath.AllocSysString(); 

         VARIANT_BOOL    vb; 
         VARIANT   vURL; 
         vURL.vt = VT_BSTR; 
         V_BSTR(&vURL) = bstr; 
         document->load(vURL,&vb); 
         if(vb!=VARIANT_TRUE) 
         { 
            MSXML::IXMLDOMParseError  *pXMLError = NULL; 
            LONG errorCode = E_FAIL; 
            BSTR bstrErr = NULL; 

            document->get_parseError(&pXMLError); 
            pXMLError->get_errorCode(&errorCode); 
            pXMLError->get_reason(&bstrErr); 
         } 
         else 
         { 
            int count = this->GetPropertyCount(); 
            for(long l = 0; l < count; l++) 
               { 
                  CString name, value, type; 
                  CBCGPProp* pSubProp = this->GetProperty(l); 
                  type = "//"; 
                  type += pSubProp->GetType(); 
                  type += "/"; 
                  name = pSubProp->GetName(); 
                  value = "fuck";//pSubProp->GetValue(); 
                  document->selectSingleNode(type.AllocSysString(), &pNode); 
                  if(pNode) 
                  { 
                     hr = pNode->put_text(value.AllocSysString()); 
                     if(FAILED(hr)) 
                     { 
                        MSXML::IXMLDOMParseError  *pXMLError = NULL; 
                        LONG errorCode = E_FAIL; 
                        BSTR bstrErr = NULL; 

                        document->get_parseError(&pXMLError); 
                        pXMLError->get_reason(&bstrErr); 
                        pXMLError->get_errorCode(&errorCode); 
                     } 
                  } 
                  GetChildData(pSubProp, document, type, rootNode); 
               } 
         } 
      VariantInit(&var); 
      V_BSTR(&var) = path+SysAllocString(L"MXWLData\\myData.mxwl"); 
      V_VT(&var) = VT_BSTR; 
      document->save(var); 
      SysFreeString(bstr); 
      } 
   } 
} 

void CMxwlDataList::GetChildData(CBCGPProp* pCurProp, MSXML::IXMLDOMDocument* document, CString XPath, MSXML::IXMLDOMNode* rootNode) 
{ 
   MSXML::IXMLDOMNode* pNode=NULL; 
   MSXML::IXMLDOMElement* element = NULL;    
   MSXML::IXMLDOMParseError* parseError = NULL; 
   HRESULT hr = S_OK; 
   VARIANT nodeValue; 

   int count = pCurProp->GetSubItemsCount(); 
   for(long l = 0; l < count; l++) 
      { 
         CString name, value, type; 
         CBCGPProp* pSubProp = pCurProp->GetSubItem(l); 
         type = XPath + pSubProp->GetType()+"/"; 
         name = pSubProp->GetName(); 
         value = pSubProp->GetValue(); 
         document->selectSingleNode(type.AllocSysString(), &pNode); 
         if(pNode) 
         { 
            hr = pNode->put_text(value.AllocSysString()); 
            if(FAILED(hr)) 
            { 
               MSXML::IXMLDOMParseError  *pXMLError = NULL; 
               LONG errorCode = E_FAIL; 
               BSTR bstrErr = NULL; 

               document->get_parseError(&pXMLError); 
               pXMLError->get_reason(&bstrErr); 
               pXMLError->get_errorCode(&errorCode); 
            } 
         } 
         GetChildData(pSubProp, document, type, rootNode); 
      } 
} 



Импорт делал как

Код

#import <msxml.dll> named_guids raw_interfaces_only 

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0377 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.