Hi Alberto, at first thanks for your fast answer. I am using stack objects, but I starts the parsing in an child stackframe, so that the stackobjects should be valid at parse-time. The program runs in debug build well, but in the release build it crashes. I found out that it crashes at XMLString::replicate() (called by RegxParser::parse()) at the memcpy()-function. The program don't crashes if I remove my own entity resolver.
Here is some code of my program for you: Here is my entity resolver: class MyEntityResolver : public XMLEntityResolver { public: virtual ~MyEntityResolver() { } MyEntityResolver() { } virtual InputSource *resolveEntity(XMLResourceIdentifier *resourceIdentifier) { //this prozedure get fired one time, but all the pointers are invalid (I made them public for reading them) printf("BaseURI: 0x%08X\nLocator: 0x%08X\nNameSpace: 0x%08X\nPublicId: 0x%08X\nResourceIdentifierType: 0x%08X\n" "SystemId: 0x%08X" , (UINT) resourceIdentifier->fBaseURI, (UINT) resourceIdentifier->fLocator, (UINT) resourceIdentifier->fNameSpace, (UINT) resourceIdentifier->fPublicId, (UINT) resourceIdentifier->fResourceIdentifierType, (UINT) resourceIdentifier->fSystemId); return g_pMemBufSourceForDTD; } }; And here is the code for parsing the XML-file: SAX2XMLReader* pParser = XMLReaderFactory::createXMLReader(); XMLPScanToken Token; MyDocumentHandler XmlHandler; MemoryManagerImpl MemManager; void * pDestXMLData; Grammar * pGrammar; pDestXMLData = MemManager.allocate(p_nSize); memcpy(pDestXMLData, p_pXMLData, p_nSize); MemBufInputSource MemBufSource( (const XMLByte *) pDestXMLData, p_nSize, "Fake sytem ID", FALSE, &MemManager); pParser->setContentHandler(&XmlHandler); MyErrorHandler XmlErrorHandler; pParser->setErrorHandler(&XmlErrorHandler); MyEntityResolver XmlEntityResolver; pParser->setEntityResolver((EntityResolver *const) &XmlEntityResolver); pGrammar = pParser->loadGrammar( *g_pMemBufSourceForDTD, Grammar::DTDGrammarType, TRUE); pParser->setFeature(XMLUni::fgXercesUseCachedGrammarInParse, TRUE); pParser->setFeature(XMLUni::fgXercesSchemaFullChecking, TRUE); pParser->setFeature(XMLUni::fgSAX2CoreValidation, TRUE); pParser->setFeature(XMLUni::fgXercesSkipDTDValidation, FALSE); pParser->setFeature(XMLUni::fgXercesLoadExternalDTD, TRUE); pParser->setFeature(XMLUni::fgXercesDynamic, TRUE); try { if(!pParser->parseFirst(MemBufSource, Token)) //Here is the crash! { goto ParseError; } while(pParser->parseNext(Token)) { if(g_bParseError == TRUE) { MemManager.deallocate(pDestXMLData); delete pParser; return FALSE; } } } Is that all you need? Greetings Robert 2011/4/14 Alberto Massari <alberto.mass...@progress.com> Hi Robert, it's hard to tell what's wrong without seeing your code. I would guess you are allocating an object on the stack that is destroyed before the parsing take place... Could you share the code you are using? Alberto Il 14/04/2011 17:56, Robert Wermuth ha scritto: Hello, I am using xerces 3.1.1 with the SAX2XMLReader. I use pParser->setEntityResolver() to install my own entity resolver. I compile my project with Visual Studio c++ 9.1 (using the static xerces libs). But in the Release build my program crashes on pParser->parseFirst() when I set my entity resolver.I tried to compile the example code shown there: http://xerces.apache.org/xerces-c/apiDocs-3/classXMLEntityResolver.html. But I get a compiler error (XMLResourceIdentifier::SystemId is not defined.). Is there an error in the lib? Greetings Robert > > >> >>