Allora, sono alle prime armi con il C++, ho creato una funzione da esportare in Visual Basic:
La funzione estrae il contenuto di un tag XML, tag e Xml sono passati in input alla funzione, insieme ad un valore nCount che per ora -1 vale solo il primo tag, 1 per estrarre tutti i tag di quel tipo restituendoli separati da un carattere null.codice:#include <string> #include <windows.h> #include <COMDEF.H> BSTR __stdcall ParseXML(LPCSTR pszItem, LPCSTR pszXml, int nCount) { using namespace std; int nStart, nEnd = 0; string sXml ( (string)pszXml ); basic_string <char> sTemp; string sOpenTag, sCloseTag; sOpenTag = "<" + (string)pszItem + ">"; sCloseTag = "</" + (string)pszItem + ">"; do { nStart = sXml.find(sOpenTag, nEnd); if ( nStart != -1 ) { nStart += strlen(pszItem) + 2; nEnd = sXml.find(sCloseTag, nStart); if ( nEnd != -1 ) { sTemp += sXml.substr(nStart, nEnd - nStart); sTemp += char("\0"); } } if ( nCount == -1 ) break; } while ( nStart != -1 ); if ( sTemp.length() > 0 ) sTemp = sTemp.substr(0, sTemp.length() - 1); _bstr_t outValue(sTemp.c_str()); outValue = SysAllocStringByteLen(outValue, strlen(outValue)) ; return outValue.copy(); }
Se ho una stringa Xml di questo tipo:
<ERRORE>tets test test</ERRORE><ERRORE>test test test test</ERRORE>
la funzione esporta correttamente in Visual Basic:
tets test testtest test test test //con ParseXML("ERRORE", sXml, 1)
tets test test //con ParseXML("ERRORE", sXml)
I problemi sorgono quando il primo tag contiene un numero pari di parole, la stringa restituita termina con un null.
Xml:
<ERRORE>tets test test test</ERRORE>
Risultato della chiamata ParseXML("ERRORE", sXml)
tets test test test // con il carattere null che non si vede ma sta
Questo succede solo con un numero pari di parole.
Qualcuno sa il xchè di questa situazione anomala per me?
Grazie a tutti.
P.S.
Sono disperato![]()

Rispondi quotando