2013-08-02 5 views
1

Я использую IXLMDOMDocument, чтобы загрузить XML-файл из потока с помощьюBSTR bstrRtf = 0xcccccccccccccccc <Bad Ptr> отладки (= CXX0030: Ошибка: выражение не может быть оценено)

IXMLDOMDocument *pDomDoc = pDomDoc->load(vtHtmlSource, &vfSuccess); 

После загрузки потока (содержащего XML содержимое) создает таблицу стилей, чтобы получить содержимое ident должным образом. Вышеупомянутая часть работает без проблем. Я уверен, что, но после этого, когда Спектрально узел (таблицы стилей в к bstrRtf), выполнив ниже -

BSTR bstrRtf; 
hr = pDomDoc->transformNode(m_pStyleSheetNode, &bstrRtf); 
//on debugging we get m_pStyleSheetNode = 0x0000000002b77ba8 that means it is correct and stylesheet is created properly. 
//but bstrRtf = 0xcccccccccccccccc <Bad Ptr> = CXX0030: Error: expression cannot be evaluated 
//that means there is some problem here 

if (hr) { 
    hr = HRESULT_FROM_WIN32(GetLastError()); //this hr surprisingly returns OK(hr = S_OK) 
}; 

Я не знаю, почему и как. Он не должен этого делать, потому что в bstrRtf у нас очень странное значение. Я ожидаю, что это даст некоторую ошибку, но я не знаю, почему это так.

Может ли кто-нибудь объяснить, что это значит? bstrRtf = 0xcccccccccccccccc <Bad Ptr>? Когда кто-то получит такую ​​ошибку? В чем смысл 0xcccccccccccccccc <Bad Ptr>?

когда я инициализирую его с нулевой ошибкой instance->m_bstrRtf = 0x0000000000000000 <Bad Ptr> при отладке. и не работает. но почему он возвращает S_OK даже после этого ??

ответ

2

bstrRtf не инициализирован - у него еще нет действительного значения. Фактическое значение 0xcccccccccccccccc - это то, что MS заполняет память так, что можно обнаружить неинициализированные переменные.

Это значение выбрано специально таким образом, что оно «не является допустимым адресом памяти» - таким образом вы не можете случайно или по назначению использовать память неинициализированной переменной, не получая какую-либо ошибку или ловушку.

+0

, поэтому вы имеете в виду, что мне просто нужно его инициализировать ?? – Sss

+0

, когда я инициализирую его с нулевой ошибкой, экземпляр -> m_bstrRtf = 0x0000000000000000 при отладке. и не работает. но почему он возвращает S_OK даже после этого ?? – Sss

+0

Я не совсем уверен. В документации, по-видимому, подразумевается, что 'pDomDoc-> transformNode()' должен заполнить 'bstrRtf' с помощью выделения. Но тот факт, что он не меняется, указывает на то, что он не был изменен. –