There are a number of problems using xeces-C with Borland Builder4. The project file that came with the 1.1.0 was not working (I think it is from an older release version of xerces). I than converted the VC++ project file. Make sure that language complience is Borland and not Ansi C otherwise it will not compile. Besides this there are two problems with the existing code in relation to Builder4.
 
First Problem :
 
_wcsupr only works with widechar when WinNT is used. In Win98 _wcsupr will result in undefined behaviour. I therefore created a function that transforms a widechar to uppercase.
 
void Win32TransService::upperCase(XMLCh* const toUpperCase) const
{
// BUGFIX Martijn Brinkers 000216
// there seems to be something wrong with _wcsupr under Win98
// it seems to be working with NT
 
//    _wcsupr(toUpperCase);
 
// I create my own uppercase funcion
    long len=wcslen(toUpperCase);
 
    for (int i=0; i<len; i++) {
      toUpperCase[i]=std::toupper(toUpperCase[i]);
    }
}
 
Second problem :
 
Builder4 contains a bug with exception handling. The following illustrates the problem :
 
class XML
{
public :
    enum Codes
    {
        NoError                         = 0
      , Error                              = 1
    };
};
 
int main(int argc, char* argv[])
{
    try {
      throw XML::Error;
    }
    catch (const XML::Codes) {
      int dummy=0;
    }
    catch(...) {
      int dummy=0;
    }
}
 
After the exception is thrown, the program will just stop without ever entering the catch
statements. If I change the fist catch statement to
 
    catch (const XML::Codes&) {    // With the & !!!!!!
Then everything is oke !!!
 
This compiler bug results in runtime errors at places where the following catch statements are used :
 
catch(const XML4CErrs::Codes)
 
I therefore had to change all catch statements so that the catch was done by reference like this :
 
catch(const XML4CErrs::Codes&)
 
 
After these changes I got DomPrint and CreateDOMDocument running correctly.
 
Martijn Brinkers
 
 
 
 

Reply via email to