Hi Alberto,
I can see the pointer values. They are 0x00000000 and 0xabababab and so
on... As I said, it's just in my incorrect code. Without my mistake the
pointers are fine.

Greetings
Robert

2011/4/15 Alberto Massari <alberto.mass...@progress.com>

> Hi Robert,
> if by "pointers are invalid" you mean that you cannot print them using
> printf, it could be that they are XMLCh* and must be transcoded if you want
> to "see" their values.
>
> Alberto
>
> Il 15/04/2011 11:13, Robert Wermuth ha scritto:
>
>> Hi Alberto,
>> thanks a lot, now it works.
>> But I have an another point. When I compile my wrong code as release
>> build,
>> but with optimation deactivated (compiler option /Od), the program don't
>> crashes. But the pointers in the "XMLResourceIdentifier
>> *resourceIdentifier"-parameter of my MyEntityResolver are also invalid.
>> I don't know how important this information is for you.
>>
>> Greetings
>> Robert
>>
>> 2011/4/15 Alberto Massari<alberto.mass...@progress.com>
>>
>>  Hi Robert,
>>> you are creating an XMLEntityResolver, but using the setEntityResolver
>>> API
>>> that expects an EntityResolver interface; infact, you had to add a cast
>>> to
>>> force the compiler in doing this illegal thing.
>>> You should instead use the setXMLEntityResolver API, that accepts the
>>> correct base interface. However, it's not available in the SAX2XMLReader
>>> interface, and you will have to cast it down to the implementation class
>>>
>>>
>>>  ((SAX2XMLReaderImpl*)pParser)->setXMLEntityResolver(&XmlEntityResolver);
>>>
>>> Alberto
>>>
>>> Il 15/04/2011 10:33, Robert Wermuth ha scritto:
>>>
>>>  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
>>>>
>>>>
>>>>   .
>>>>>>
>>>>>
>>>>  .
>>
>>
>

Reply via email to