Using XalanCAPI.h to compile a transformer with Microsoft 'C' (not C++) requires the following patch to the new Xerces-C 3.0.1 (xercesc/src/xercesc/util/XercesDefs.hpp. I have no
such problem with Xerces-C.3.0.

A patch is required in order for XALAN-C 1.11 to use its C-APIs with
XERCES-C 3.0.1 using Microsoft C Compilers (not C++).

File: src/xercesc/util/XercesDefs.hpp

Old Section
// ---------------------------------------------------------------------------
// Define namespace symbols if the compiler supports it.
// ---------------------------------------------------------------------------
#if defined(XERCES_HAS_CPP_NAMESPACE)
   #define XERCES_CPP_NAMESPACE_BEGIN namespace XERCES_CPP_NAMESPACE {
   #define XERCES_CPP_NAMESPACE_END  }
   #define XERCES_CPP_NAMESPACE_USE using namespace XERCES_CPP_NAMESPACE;
   #define XERCES_CPP_NAMESPACE_QUALIFIER XERCES_CPP_NAMESPACE::

   namespace XERCES_CPP_NAMESPACE { }
   namespace xercesc = XERCES_CPP_NAMESPACE;
#else
   #define XERCES_CPP_NAMESPACE_BEGIN
   #define XERCES_CPP_NAMESPACE_END
   #define XERCES_CPP_NAMESPACE_USE
   #define XERCES_CPP_NAMESPACE_QUALIFIER
#endif

===========================================================================
Edit Section:  Add test for (__cplusplus)
This prevents 'C' compilers from trying to invoke the 'namespace' commands.
I found this issue when trying to build XALAN-C XSLT ransformation using the
XALAN C-APIs with Microsoft C (not C++) compilation.  Adding the test
for defined(__cplusplus) resolves the C language compatibility issue.
===========================================================================
// ---------------------------------------------------------------------------
// Define namespace symbols if the compiler supports it.
// ---------------------------------------------------------------------------
#if defined(XERCES_HAS_CPP_NAMESPACE) && defined(__cplusplus)
   #define XERCES_CPP_NAMESPACE_BEGIN namespace XERCES_CPP_NAMESPACE {
   #define XERCES_CPP_NAMESPACE_END  }
   #define XERCES_CPP_NAMESPACE_USE using namespace XERCES_CPP_NAMESPACE;
   #define XERCES_CPP_NAMESPACE_QUALIFIER XERCES_CPP_NAMESPACE::

   namespace XERCES_CPP_NAMESPACE { }
   namespace xercesc = XERCES_CPP_NAMESPACE;
#else
   #define XERCES_CPP_NAMESPACE_BEGIN
   #define XERCES_CPP_NAMESPACE_END
   #define XERCES_CPP_NAMESPACE_USE
   #define XERCES_CPP_NAMESPACE_QUALIFIER
#endif



Reply via email to