Exemple #1
0
Result GetFirstElementByTagName(MSXML::IXMLDOMElementPtr& parent, const string& tagName, MSXML::IXMLDOMElementPtr& pEl)
{
	Result r;

	try
	{
		pEl = 0;
		MSXML::IXMLDOMNodeListPtr pList = parent->getElementsByTagName(tagName.c_str());
		if(pList == NULL)
		{
			r.Fail(Format("No '%' nodes found (pList = 0)").s(tagName).Str());
		}
		else
		{
			if(!pList->length)
			{
				r.Fail(Format("No '%' nodes found (length = 0)").s(tagName).Str());
			}
			else
			{
				pEl = pList->nextNode();
				r.Succeed();
			}
		}
	}
	catch(_com_error& e)
	{
		r.Fail(Format("Com error: % %").s(e.ErrorMessage()).s(e.Description()).Str());
	}

	return r;
}
Exemple #2
0
Result XMLGetAttribute(_variant_t& out, MSXML::IXMLDOMElementPtr pEl, const string& sAttribute)
{
	Result r;
	try
	{
    out = pEl->getAttribute(sAttribute.c_str());
		if(out.vt == VT_NULL)
		{
			r.Fail(Format("Attribute '%' not found, or VT_NULL").s(sAttribute).Str());
		}
		else
		{
			r.Succeed();
		}
	}
	catch(_com_error& e)
	{
		r.Fail(Format("Error reading the %s attribute from xml. % %").s(sAttribute).s(e.ErrorMessage()).s(e.Description()).Str());
	}
	return r;
}
Exemple #3
0
Result FileToXML(MSXML::IXMLDOMDocumentPtr& p, const string& fileName)
{
	Result r;

	try
	{
		HRESULT hr;
		if(FAILED(hr = p.CreateInstance("msxml.domdocument")))
		{
			r.Fail(Format("Failed to create instance of msxml.domdocument.  Error code: %").ul(hr).Str());
		}
		else
		{
      VARIANT_BOOL b = p->load(fileName.c_str());
			if(b == VARIANT_FALSE)
			{
				MSXML::IXMLDOMParseErrorPtr pErr = p->GetparseError();
				if(pErr == NULL)
				{
					r.Fail(_T("Failed to load XML into msxml.domdocument.  Could not get IXMLDOMParseErrorPtr for details."));
				}
				else
				{
					r.Fail(Format("Failed to parse xml.  %").s(pErr->reason).Str());
				}
			}
			else
			{
				r.Succeed();
			}
		}
	}
	catch(_com_error& e)
	{
		r.Fail(Format("Error loading XML into msxml.domdocument. % %").s(e.ErrorMessage()).s(e.Description()).Str());
	}

	return r;
}
Exemple #4
0
Result XMLSetAttribute(const _variant_t& val, MSXML::IXMLDOMElementPtr pEl, const string& sAttribute)
{
	Result r;
	try
	{
		pEl->setAttribute(sAttribute.c_str(), val);
		r.Succeed();
	}
	catch(_com_error& e)
	{
		r.Fail(Format("Com error: % %").s(e.ErrorMessage()).s(e.Description()).Str());
	}
	return r;
}
Exemple #5
0
Result XMLToString(string& s, MSXML::IXMLDOMNodePtr p)
{
	Result r;

	try
	{
		s = (PCTSTR)p->xml;
	}
	catch(_com_error& e)
	{
		r.Fail(Format("Error extracting XML. % %").s(e.ErrorMessage()).s(e.Description()).Str());
	}

	return r;
}
Exemple #6
0
Result XMLGetAttribute(_variant_t& out, VARTYPE destType, MSXML::IXMLDOMElementPtr pEl, const string& sAttribute)
{
	Result r = XMLGetAttribute(out, pEl, sAttribute);
	if(r.Succeeded())
	{
		try
		{
			out.ChangeType(destType);
		}
		catch(_com_error& e)
		{
			r.Fail(Format("Error converting %s attribute to its destination type. % %").s(sAttribute).s(e.ErrorMessage()).s(e.Description()).Str());
		}
	}
	return r;
}
Exemple #7
0
Result ProcessFixed(Arg& a, Version::VersionResource& res)
{
  cout << "Setting fixed value \"" << a.name << "\"...";
  Result r;
  DWORD value;
  if(!(r = ParseDWORDString(a.value, value)))
  {
    cout << endl;
    return r;
  }

  if(a.name == "dwFileVersionMS")
  {
    res.fileVersionMS = value;
  }
  else if(a.name == "dwFileVersionLS")
  {
    res.fileVersionLS = value;
  }
  else if(a.name == "dwProductVersionMS")
  {
    res.productVersionMS = value;
  }
  else if(a.name == "dwProductVersionLS")
  {
    res.productVersionLS = value;
  }
  else if(a.name == "dwFileFlagsMask")
  {
    res.fileFlagsMask = value;
  }
  else if(a.name == "dwFileFlags")
  {
    res.fileFlags = value;
  }
  else if(a.name == "dwFileOS")
  {
    res.fileOS = value;
  }
  else if(a.name == "dwFileType")
  {
    res.fileType = value;
  }
  else if(a.name == "dwFileSubtype")
  {
    res.fileSubType = value;
  }
  else if(a.name == "dwFileDateMS")
  {
    res.fileDateMS = value;
  }
  else if(a.name == "dwFileDateLS")
  {
    res.fileDateLS = value;
  }
  else
  {
    cout << endl;
		return r.Fail(Format("Unrecognized fixed value name: %").qs(a.name).Str());
  }

  cout << "Done (1 value updated)." << endl;

  return r.Succeed();
}