Все,MSXML2 :: IXMLDOMDocument2Ptr-> GetXML() испортить мою строку!
это мой код
//declare string pointer
BSTR markup;
//initialize markup to some well formed XML <-
//declare and initialize XML Document
MSXML2::IXMLDOMDocument2Ptr pXMLDoc;
HRESULT hr;
hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
pXMLDoc->async = VARIANT_FALSE;
pXMLDoc->validateOnParse = VARIANT_TRUE;
pXMLDoc->preserveWhiteSpace = VARIANT_TRUE;
//load markup into XML document
vtBoolResult = pXMLDoc->loadXML(markup);
//do some changes to the XML file<-
//get back string from XML doc
markup = pXMLDoc->Getxml(); //<-- this retrieves RUBBISH
На данный момент моя строка наломать (всего несколько китайских символов в начале, то мусор). Похож на проблему с кодировкой.
Я также попытался следующие:
_bstr_t superMarkup = _bstr_t(markup);
//did my stuff
superMarkup = pXMLDoc->Getxml();
markup = superMarkup;
, но до сих пор я получаю тот же результат.
Даже если я вызову GetXML(), ничего не изменив в документе xml, я все равно получаю мусор.
На данный момент, если я пытаюсь присвоить искаженный указатель на другой указатель будет TRow ошибки:
Attempted to restore write protected memory. this is often an indication that other memory is corrupted.
Любого предложение?
EDIT1:
я узнал, что это происходит в связи с размером строки XML. Если это происходит в данной строке XML, и я уменьшаю размер (сохраняя ту же схему), он будет работать нормально. Похоже, MSXML2 :: DOMDocument40 имеет ограничение по размеру? Подробно это происходит, если у меня есть более 16407 символов. У меня есть еще один GetXML, который будет извлекать RUBBISH - если это < = 16407, все работает нормально.
EDIT2:
Родди был прав - я пропускал, что _bstr_t
класс ...
кольца любой колокол?
Приветствия
Перечитайте мое сообщение. Вам нужно полностью обрезать BSTR, если вы не поймете 100%, как это работает. – Roddy 2008-11-28 10:56:09
вы можете предложить фрагмент кода для реализации вашего решения, чтобы я мог понять пример? – JohnIdol 2008-12-04 17:14:41