MSXML, SelectSingleNode
-
Hallo Leute!
Wenn ich auf ein CComPtr<IXMLDOMDocument> zwei mal ein SelectSingleNode ausführe, dann gibts eine Assertion.
Ich habe das Problem extrahiert und in einen Testrahmen für das geneigte Auditorium gepackt
CComPtr<IXMLDOMDocument> m_spXMLDoc; CoInitialize(NULL); { HRESULT hr = m_spXMLDoc.CoCreateInstance(__uuidof(DOMDocument)); m_spXMLDoc->loadXML(CComBSTR("<root><first/><second/></root>"), NULL); CComPtr<IXMLDOMNode> spNode; m_spXMLDoc->selectSingleNode(CComBSTR("/root"), &spNode); // BEIM ZWEITEN MAL ALLERDINGS KRACHT ES??????? m_spXMLDoc->selectSingleNode(CComBSTR("/root"), &spNode); /*hier gehts daneben*/ // Aus die Maus ... aber warum????? } CoUninitialize();Also, ich habe keine Ahnung, wo der Hund begraben liegt!
Danke im Voraus
Christian
-
genau das gleiche Problem
habe ich auch. Desshalb hohl ich den Thread ins Leben zurück. Hat jemand eine Idee??
-
nur mal ins blaue geraten
"CComPtr<IXMLDOMNode> spNode;" wird beim ersten mal leer initialisiert und dann gefuellt
dh es bestitzt dann eine groesse - evtl kann man die nicht mehr aendern, evtl muss spNode stets leer sein bevor es gefuellt werden kann
-
Hab jetzt noch etwas rausgefunden.
MSXML2::IXMLDOMDocument2Ptr m_pDoc("Msxml2.DOMDocument.4.0"); v_ret = m_pDoc->load(v_file); pNode = m_pDoc->selectSingleNode(bstName); .... _variant_t v; v.punkVal = pRefChild; pChild = pNode->insertBefore(pChild, v); m_pDoc->save(v_file);Sehr komisch, wenn ich meinen Code einmal durchlaufen lasse, dann funktionierts. Wenn ich den Code debugge, dann funktionierts.
Wenn ich den Code in einer Schleife 2mal ausführe, dann kommt die Exception beim pNode = m_pDoc->selectSingleNode(bstName);
Und das auch nur, wenn ich tasächlich ein neues pChild einbaue.
Kann das sein, dass m_pDoc->save(v_file); nicht fertig wird, bevor ich das XMl Dokument neu lade??m_pDoc->async=false; hab ich auch, dass wirkt sich aber nur aufs laden aus, nicht aufs save, oder?
-
ist pNode beim zweiten durchlauf wieder leer ?
-
es liegt nicht daran, dass ich auf einen Nullzeiger zugreife.
Ich hab das Problem hier nochmal genauer untersucht:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-217778.html