Hallo mensen,
ik heb een functie, deze maakt een pointer aan (MSXML2::IXMLDocumentPtr). Overal in mijn applicatie gaat dit goed en kan ik met het xml document aan de slag.
Nu ben ik bezig met een nieuwe functie in mijn applicatie, ook hierin heb ik een xml document nodig. Dus ik roep de functie weer aan, deze returnt een pointer. Als ik dan door de code stap (F11 in VC6) zie ik dat mijn functie word aangeroepen, en deze netjes een pointer returnt, maar op het moment dat ik dan terug kom in mijn functie, word mijn variabele niet geset. Een beetje moeilijk uit te leggen, ik zal het ff met wat code illustreren:
De aanroep van de functie
De functie:
Op het moment dat mijn functie bij return pDom aankomt is deze een pointer naar een XML document als ik in de watch kijk, op het moment dat ik dan weer terugkom bij pDoc = pNewDom() blijft pDoc op 0x00000000 staan, geen pointer dus...
Hoe kan deze pointer verloren gaan?
ik heb een functie, deze maakt een pointer aan (MSXML2::IXMLDocumentPtr). Overal in mijn applicatie gaat dit goed en kan ik met het xml document aan de slag.
Nu ben ik bezig met een nieuwe functie in mijn applicatie, ook hierin heb ik een xml document nodig. Dus ik roep de functie weer aan, deze returnt een pointer. Als ik dan door de code stap (F11 in VC6) zie ik dat mijn functie word aangeroepen, en deze netjes een pointer returnt, maar op het moment dat ik dan terug kom in mijn functie, word mijn variabele niet geset. Een beetje moeilijk uit te leggen, ik zal het ff met wat code illustreren:
De aanroep van de functie
C++:
1
2
| MSXML2::IXMLDocumentPtr pDoc = 0; pDoc = pNewDom(); |
De functie:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| MSXML2::IXMLDOMDocumentPtr pNewDom( ) { bool bContinue = true; MSXML2::IXMLDOMDocumentPtr pDom = 0; HRESULT hResult = E_FAIL; CComVariant vtRefChild; try { // create dom if ( bContinue ) { hResult = pDom.CreateInstance(__uuidof(MSXML2::DOMDocument40)); if ( hResult == S_OK ) { bContinue = true; } else { ATLTRACE("bNewDom CreateInstance(Msxml2.DOMDocument.4.0) FAILED, 0x%X", hResult); bContinue = false; } } } catch ( _com_error& e) { TRACE_EXCEPT( "bNewDom", e); bContinue = false; } return pDom; } |
Op het moment dat mijn functie bij return pDom aankomt is deze een pointer naar een XML document als ik in de watch kijk, op het moment dat ik dan weer terugkom bij pDoc = pNewDom() blijft pDoc op 0x00000000 staan, geen pointer dus...
Hoe kan deze pointer verloren gaan?