4 lines of edits are required in two files. One file in the XALAN-C package
and one file in the XERCES-C package.  The description and reason follows:


I am trying again to create a "C" language based application using
"XalanCAPI.h"
and find that "XMLCh" is undefined when the following typedef is processed
and
a "C" compiler is being used instead of a "C++" compiler.  Note that the
"C" compiler does not define the (__cplusplus) macro.

    /**
     * This is a typedef for characters encoded in UTF-16.
     */
    typedef XMLCh           XalanUTF16Char;

What follows is the include path and my edits to resolve the situation.

<xalanc/XalanTransformer/XalanCAPI.h>

  #include <xalanc/XalanTransformer/XalanTransformerDefinitions.hpp>

<xalanc/Include/PlatformDefinitions.hpp>

  #if defined (__cplusplus)
  #include "xercesc/util/XercesDefs.hpp"
  #endif

//  NOTE: The XercesDefs.hpp IS REQUIRED TO DEFINE "XMLCh" type.
//  EDIT: is to remove the (__cplusplus) restriction and just do the include.

/*  #if defined (__cplusplus)  */
  #include "xercesc/util/XercesDefs.hpp"
/*  #endif  */

<xercesc/util/XercesDefs.hpp>

  #include <xercesc/util/Xerces_autoconf_config.hpp>

//  NOTE: This include file defines the "XMLCh" data type which may be
//    either 16 or 32 bit values depending on the definition of wchar_t.
//    Microsoft defines 16-bit wchar_t, GNU/Linux GLIBC defines 32-bit
wchar_t.
//
//  NOTE: The following macros may be defined if (__cplusplus) is undefined.
//    XERCES_HAS_CPP_NAMESPACE
//    XERCES_STD_NAMESPACE
//  These should be undefined if (__cplusplus) is undefined.
//
//  EDIT: <xercesc/util/XercesDefs.hpp>
//  The "C" language compilers do not know the "C++" namespace and using
commands.
//

/* #if defined(XERCES_HAS_CPP_NAMESPACE)  */
   #if defined(XERCES_HAS_CPP_NAMESPACE) && defined(__cplusplus)

/* #if defined(XERCES_STD_NAMESPACE)      */
   #if defined(XERCES_STD_NAMESPACE) && defined(__cplusplus)

===============

These simple edits resolve the "XMLCh" definition issue and fix "C" compiler
inability to process "C++" "namespace" and "using" commands.

<xalanc/Include/PlatformDefinitions.hpp>
<xercesc/util/XercesDefs.hpp>

After editing these two files, the <xalanc/XalanTransformer/XalanCAPI.h>
becomes a
usable interface for "C" language XSLT transformation products.






Reply via email to