/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER within this package.
 */
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 440
#endif

#include "rpc.h"
#include "rpcndr.h"

#ifndef __msxml2_h__
#define __msxml2_h__

#ifndef __IXMLDOMImplementation_FWD_DEFINED__
#define __IXMLDOMImplementation_FWD_DEFINED__
typedef struct IXMLDOMImplementation IXMLDOMImplementation;
#endif

#ifndef __IXMLDOMNode_FWD_DEFINED__
#define __IXMLDOMNode_FWD_DEFINED__
typedef struct IXMLDOMNode IXMLDOMNode;
#endif

#ifndef __IXMLDOMDocumentFragment_FWD_DEFINED__
#define __IXMLDOMDocumentFragment_FWD_DEFINED__
typedef struct IXMLDOMDocumentFragment IXMLDOMDocumentFragment;
#endif

#ifndef __IXMLDOMDocument_FWD_DEFINED__
#define __IXMLDOMDocument_FWD_DEFINED__
typedef struct IXMLDOMDocument IXMLDOMDocument;
#endif

#ifndef __IXMLDOMDocument2_FWD_DEFINED__
#define __IXMLDOMDocument2_FWD_DEFINED__
typedef struct IXMLDOMDocument2 IXMLDOMDocument2;
#endif

#ifndef __IXMLDOMNodeList_FWD_DEFINED__
#define __IXMLDOMNodeList_FWD_DEFINED__
typedef struct IXMLDOMNodeList IXMLDOMNodeList;
#endif

#ifndef __IXMLDOMNamedNodeMap_FWD_DEFINED__
#define __IXMLDOMNamedNodeMap_FWD_DEFINED__
typedef struct IXMLDOMNamedNodeMap IXMLDOMNamedNodeMap;
#endif

#ifndef __IXMLDOMCharacterData_FWD_DEFINED__
#define __IXMLDOMCharacterData_FWD_DEFINED__
typedef struct IXMLDOMCharacterData IXMLDOMCharacterData;
#endif

#ifndef __IXMLDOMAttribute_FWD_DEFINED__
#define __IXMLDOMAttribute_FWD_DEFINED__
typedef struct IXMLDOMAttribute IXMLDOMAttribute;
#endif

#ifndef __IXMLDOMElement_FWD_DEFINED__
#define __IXMLDOMElement_FWD_DEFINED__
typedef struct IXMLDOMElement IXMLDOMElement;
#endif

#ifndef __IXMLDOMText_FWD_DEFINED__
#define __IXMLDOMText_FWD_DEFINED__
typedef struct IXMLDOMText IXMLDOMText;
#endif

#ifndef __IXMLDOMComment_FWD_DEFINED__
#define __IXMLDOMComment_FWD_DEFINED__
typedef struct IXMLDOMComment IXMLDOMComment;
#endif

#ifndef __IXMLDOMProcessingInstruction_FWD_DEFINED__
#define __IXMLDOMProcessingInstruction_FWD_DEFINED__
typedef struct IXMLDOMProcessingInstruction IXMLDOMProcessingInstruction;
#endif

#ifndef __IXMLDOMCDATASection_FWD_DEFINED__
#define __IXMLDOMCDATASection_FWD_DEFINED__
typedef struct IXMLDOMCDATASection IXMLDOMCDATASection;
#endif

#ifndef __IXMLDOMDocumentType_FWD_DEFINED__
#define __IXMLDOMDocumentType_FWD_DEFINED__
typedef struct IXMLDOMDocumentType IXMLDOMDocumentType;
#endif

#ifndef __IXMLDOMNotation_FWD_DEFINED__
#define __IXMLDOMNotation_FWD_DEFINED__
typedef struct IXMLDOMNotation IXMLDOMNotation;
#endif

#ifndef __IXMLDOMEntity_FWD_DEFINED__
#define __IXMLDOMEntity_FWD_DEFINED__
typedef struct IXMLDOMEntity IXMLDOMEntity;
#endif

#ifndef __IXMLDOMEntityReference_FWD_DEFINED__
#define __IXMLDOMEntityReference_FWD_DEFINED__
typedef struct IXMLDOMEntityReference IXMLDOMEntityReference;
#endif

#ifndef __IXMLDOMParseError_FWD_DEFINED__
#define __IXMLDOMParseError_FWD_DEFINED__
typedef struct IXMLDOMParseError IXMLDOMParseError;
#endif

#ifndef __IXMLDOMSchemaCollection_FWD_DEFINED__
#define __IXMLDOMSchemaCollection_FWD_DEFINED__
typedef struct IXMLDOMSchemaCollection IXMLDOMSchemaCollection;
#endif

#ifndef __IXTLRuntime_FWD_DEFINED__
#define __IXTLRuntime_FWD_DEFINED__
typedef struct IXTLRuntime IXTLRuntime;
#endif

#ifndef __IXSLTemplate_FWD_DEFINED__
#define __IXSLTemplate_FWD_DEFINED__
typedef struct IXSLTemplate IXSLTemplate;
#endif

#ifndef __IXSLProcessor_FWD_DEFINED__
#define __IXSLProcessor_FWD_DEFINED__
typedef struct IXSLProcessor IXSLProcessor;
#endif

#ifndef __ISAXXMLReader_FWD_DEFINED__
#define __ISAXXMLReader_FWD_DEFINED__
typedef struct ISAXXMLReader ISAXXMLReader;
#endif

#ifndef __ISAXXMLFilter_FWD_DEFINED__
#define __ISAXXMLFilter_FWD_DEFINED__
typedef struct ISAXXMLFilter ISAXXMLFilter;
#endif

#ifndef __ISAXLocator_FWD_DEFINED__
#define __ISAXLocator_FWD_DEFINED__
typedef struct ISAXLocator ISAXLocator;
#endif

#ifndef __ISAXEntityResolver_FWD_DEFINED__
#define __ISAXEntityResolver_FWD_DEFINED__
typedef struct ISAXEntityResolver ISAXEntityResolver;
#endif

#ifndef __ISAXContentHandler_FWD_DEFINED__
#define __ISAXContentHandler_FWD_DEFINED__
typedef struct ISAXContentHandler ISAXContentHandler;
#endif

#ifndef __ISAXDTDHandler_FWD_DEFINED__
#define __ISAXDTDHandler_FWD_DEFINED__
typedef struct ISAXDTDHandler ISAXDTDHandler;
#endif

#ifndef __ISAXErrorHandler_FWD_DEFINED__
#define __ISAXErrorHandler_FWD_DEFINED__
typedef struct ISAXErrorHandler ISAXErrorHandler;
#endif

#ifndef __ISAXLexicalHandler_FWD_DEFINED__
#define __ISAXLexicalHandler_FWD_DEFINED__
typedef struct ISAXLexicalHandler ISAXLexicalHandler;
#endif

#ifndef __ISAXDeclHandler_FWD_DEFINED__
#define __ISAXDeclHandler_FWD_DEFINED__
typedef struct ISAXDeclHandler ISAXDeclHandler;
#endif

#ifndef __ISAXAttributes_FWD_DEFINED__
#define __ISAXAttributes_FWD_DEFINED__
typedef struct ISAXAttributes ISAXAttributes;
#endif

#ifndef __IVBSAXXMLReader_FWD_DEFINED__
#define __IVBSAXXMLReader_FWD_DEFINED__
typedef struct IVBSAXXMLReader IVBSAXXMLReader;
#endif

#ifndef __IVBSAXXMLFilter_FWD_DEFINED__
#define __IVBSAXXMLFilter_FWD_DEFINED__
typedef struct IVBSAXXMLFilter IVBSAXXMLFilter;
#endif

#ifndef __IVBSAXLocator_FWD_DEFINED__
#define __IVBSAXLocator_FWD_DEFINED__
typedef struct IVBSAXLocator IVBSAXLocator;
#endif

#ifndef __IVBSAXEntityResolver_FWD_DEFINED__
#define __IVBSAXEntityResolver_FWD_DEFINED__
typedef struct IVBSAXEntityResolver IVBSAXEntityResolver;
#endif

#ifndef __IVBSAXContentHandler_FWD_DEFINED__
#define __IVBSAXContentHandler_FWD_DEFINED__
typedef struct IVBSAXContentHandler IVBSAXContentHandler;
#endif

#ifndef __IVBSAXDTDHandler_FWD_DEFINED__
#define __IVBSAXDTDHandler_FWD_DEFINED__
typedef struct IVBSAXDTDHandler IVBSAXDTDHandler;
#endif

#ifndef __IVBSAXErrorHandler_FWD_DEFINED__
#define __IVBSAXErrorHandler_FWD_DEFINED__
typedef struct IVBSAXErrorHandler IVBSAXErrorHandler;
#endif

#ifndef __IVBSAXLexicalHandler_FWD_DEFINED__
#define __IVBSAXLexicalHandler_FWD_DEFINED__
typedef struct IVBSAXLexicalHandler IVBSAXLexicalHandler;
#endif

#ifndef __IVBSAXDeclHandler_FWD_DEFINED__
#define __IVBSAXDeclHandler_FWD_DEFINED__
typedef struct IVBSAXDeclHandler IVBSAXDeclHandler;
#endif

#ifndef __IVBSAXAttributes_FWD_DEFINED__
#define __IVBSAXAttributes_FWD_DEFINED__
typedef struct IVBSAXAttributes IVBSAXAttributes;
#endif

#ifndef __IMXWriter_FWD_DEFINED__
#define __IMXWriter_FWD_DEFINED__
typedef struct IMXWriter IMXWriter;
#endif

#ifndef __IMXAttributes_FWD_DEFINED__
#define __IMXAttributes_FWD_DEFINED__
typedef struct IMXAttributes IMXAttributes;
#endif

#ifndef __IMXReaderControl_FWD_DEFINED__
#define __IMXReaderControl_FWD_DEFINED__
typedef struct IMXReaderControl IMXReaderControl;
#endif

#ifndef __IMXSchemaDeclHandler_FWD_DEFINED__
#define __IMXSchemaDeclHandler_FWD_DEFINED__
typedef struct IMXSchemaDeclHandler IMXSchemaDeclHandler;
#endif

#ifndef __IXMLDOMSchemaCollection2_FWD_DEFINED__
#define __IXMLDOMSchemaCollection2_FWD_DEFINED__
typedef struct IXMLDOMSchemaCollection2 IXMLDOMSchemaCollection2;
#endif

#ifndef __ISchemaStringCollection_FWD_DEFINED__
#define __ISchemaStringCollection_FWD_DEFINED__
typedef struct ISchemaStringCollection ISchemaStringCollection;
#endif

#ifndef __ISchemaItemCollection_FWD_DEFINED__
#define __ISchemaItemCollection_FWD_DEFINED__
typedef struct ISchemaItemCollection ISchemaItemCollection;
#endif

#ifndef __ISchemaItem_FWD_DEFINED__
#define __ISchemaItem_FWD_DEFINED__
typedef struct ISchemaItem ISchemaItem;
#endif

#ifndef __ISchema_FWD_DEFINED__
#define __ISchema_FWD_DEFINED__
typedef struct ISchema ISchema;
#endif

#ifndef __ISchemaParticle_FWD_DEFINED__
#define __ISchemaParticle_FWD_DEFINED__
typedef struct ISchemaParticle ISchemaParticle;
#endif

#ifndef __ISchemaAttribute_FWD_DEFINED__
#define __ISchemaAttribute_FWD_DEFINED__
typedef struct ISchemaAttribute ISchemaAttribute;
#endif

#ifndef __ISchemaElement_FWD_DEFINED__
#define __ISchemaElement_FWD_DEFINED__
typedef struct ISchemaElement ISchemaElement;
#endif

#ifndef __ISchemaType_FWD_DEFINED__
#define __ISchemaType_FWD_DEFINED__
typedef struct ISchemaType ISchemaType;
#endif

#ifndef __ISchemaComplexType_FWD_DEFINED__
#define __ISchemaComplexType_FWD_DEFINED__
typedef struct ISchemaComplexType ISchemaComplexType;
#endif

#ifndef __ISchemaAttributeGroup_FWD_DEFINED__
#define __ISchemaAttributeGroup_FWD_DEFINED__
typedef struct ISchemaAttributeGroup ISchemaAttributeGroup;
#endif

#ifndef __ISchemaModelGroup_FWD_DEFINED__
#define __ISchemaModelGroup_FWD_DEFINED__
typedef struct ISchemaModelGroup ISchemaModelGroup;
#endif

#ifndef __ISchemaAny_FWD_DEFINED__
#define __ISchemaAny_FWD_DEFINED__
typedef struct ISchemaAny ISchemaAny;
#endif

#ifndef __ISchemaIdentityConstraint_FWD_DEFINED__
#define __ISchemaIdentityConstraint_FWD_DEFINED__
typedef struct ISchemaIdentityConstraint ISchemaIdentityConstraint;
#endif

#ifndef __ISchemaNotation_FWD_DEFINED__
#define __ISchemaNotation_FWD_DEFINED__
typedef struct ISchemaNotation ISchemaNotation;
#endif

#ifndef __IXMLElementCollection_FWD_DEFINED__
#define __IXMLElementCollection_FWD_DEFINED__
typedef struct IXMLElementCollection IXMLElementCollection;
#endif

#ifndef __IXMLDocument_FWD_DEFINED__
#define __IXMLDocument_FWD_DEFINED__
typedef struct IXMLDocument IXMLDocument;
#endif

#ifndef __IXMLDocument2_FWD_DEFINED__
#define __IXMLDocument2_FWD_DEFINED__
typedef struct IXMLDocument2 IXMLDocument2;
#endif

#ifndef __IXMLElement_FWD_DEFINED__
#define __IXMLElement_FWD_DEFINED__
typedef struct IXMLElement IXMLElement;
#endif

#ifndef __IXMLElement2_FWD_DEFINED__
#define __IXMLElement2_FWD_DEFINED__
typedef struct IXMLElement2 IXMLElement2;
#endif

#ifndef __IXMLAttribute_FWD_DEFINED__
#define __IXMLAttribute_FWD_DEFINED__
typedef struct IXMLAttribute IXMLAttribute;
#endif

#ifndef __IXMLError_FWD_DEFINED__
#define __IXMLError_FWD_DEFINED__
typedef struct IXMLError IXMLError;
#endif

#ifndef __IXMLDOMSelection_FWD_DEFINED__
#define __IXMLDOMSelection_FWD_DEFINED__
typedef struct IXMLDOMSelection IXMLDOMSelection;
#endif

#ifndef __XMLDOMDocumentEvents_FWD_DEFINED__
#define __XMLDOMDocumentEvents_FWD_DEFINED__
typedef struct XMLDOMDocumentEvents XMLDOMDocumentEvents;
#endif

#ifndef __IDSOControl_FWD_DEFINED__
#define __IDSOControl_FWD_DEFINED__
typedef struct IDSOControl IDSOControl;
#endif

#ifndef __IXMLHTTPRequest_FWD_DEFINED__
#define __IXMLHTTPRequest_FWD_DEFINED__
typedef struct IXMLHTTPRequest IXMLHTTPRequest;
#endif

#ifndef __IServerXMLHTTPRequest_FWD_DEFINED__
#define __IServerXMLHTTPRequest_FWD_DEFINED__
typedef struct IServerXMLHTTPRequest IServerXMLHTTPRequest;
#endif

#ifndef __IServerXMLHTTPRequest2_FWD_DEFINED__
#define __IServerXMLHTTPRequest2_FWD_DEFINED__
typedef struct IServerXMLHTTPRequest2 IServerXMLHTTPRequest2;
#endif

#ifndef __IMXNamespacePrefixes_FWD_DEFINED__
#define __IMXNamespacePrefixes_FWD_DEFINED__
typedef struct IMXNamespacePrefixes IMXNamespacePrefixes;
#endif

#ifndef __IVBMXNamespaceManager_FWD_DEFINED__
#define __IVBMXNamespaceManager_FWD_DEFINED__
typedef struct IVBMXNamespaceManager IVBMXNamespaceManager;
#endif

#ifndef __IMXNamespaceManager_FWD_DEFINED__
#define __IMXNamespaceManager_FWD_DEFINED__
typedef struct IMXNamespaceManager IMXNamespaceManager;
#endif

#ifndef __DOMDocument_FWD_DEFINED__
#define __DOMDocument_FWD_DEFINED__
#ifdef __cplusplus
typedef class DOMDocument DOMDocument;
#else
typedef struct DOMDocument DOMDocument;
#endif
#endif

#ifndef __DOMDocument26_FWD_DEFINED__
#define __DOMDocument26_FWD_DEFINED__
#ifdef __cplusplus
typedef class DOMDocument26 DOMDocument26;
#else
typedef struct DOMDocument26 DOMDocument26;
#endif
#endif

#ifndef __DOMDocument30_FWD_DEFINED__
#define __DOMDocument30_FWD_DEFINED__
#ifdef __cplusplus
typedef class DOMDocument30 DOMDocument30;
#else
typedef struct DOMDocument30 DOMDocument30;
#endif
#endif

#ifndef __DOMDocument40_FWD_DEFINED__
#define __DOMDocument40_FWD_DEFINED__
#ifdef __cplusplus
typedef class DOMDocument40 DOMDocument40;
#else
typedef struct DOMDocument40 DOMDocument40;
#endif
#endif

#ifndef __FreeThreadedDOMDocument_FWD_DEFINED__
#define __FreeThreadedDOMDocument_FWD_DEFINED__
#ifdef __cplusplus
typedef class FreeThreadedDOMDocument FreeThreadedDOMDocument;
#else
typedef struct FreeThreadedDOMDocument FreeThreadedDOMDocument;
#endif
#endif

#ifndef __FreeThreadedDOMDocument26_FWD_DEFINED__
#define __FreeThreadedDOMDocument26_FWD_DEFINED__
#ifdef __cplusplus
typedef class FreeThreadedDOMDocument26 FreeThreadedDOMDocument26;
#else
typedef struct FreeThreadedDOMDocument26 FreeThreadedDOMDocument26;
#endif
#endif

#ifndef __FreeThreadedDOMDocument30_FWD_DEFINED__
#define __FreeThreadedDOMDocument30_FWD_DEFINED__
#ifdef __cplusplus
typedef class FreeThreadedDOMDocument30 FreeThreadedDOMDocument30;
#else
typedef struct FreeThreadedDOMDocument30 FreeThreadedDOMDocument30;
#endif
#endif

#ifndef __FreeThreadedDOMDocument40_FWD_DEFINED__
#define __FreeThreadedDOMDocument40_FWD_DEFINED__
#ifdef __cplusplus
typedef class FreeThreadedDOMDocument40 FreeThreadedDOMDocument40;
#else
typedef struct FreeThreadedDOMDocument40 FreeThreadedDOMDocument40;
#endif
#endif

#ifndef __XMLSchemaCache_FWD_DEFINED__
#define __XMLSchemaCache_FWD_DEFINED__
#ifdef __cplusplus
typedef class XMLSchemaCache XMLSchemaCache;
#else
typedef struct XMLSchemaCache XMLSchemaCache;
#endif
#endif

#ifndef __XMLSchemaCache26_FWD_DEFINED__
#define __XMLSchemaCache26_FWD_DEFINED__
#ifdef __cplusplus
typedef class XMLSchemaCache26 XMLSchemaCache26;
#else
typedef struct XMLSchemaCache26 XMLSchemaCache26;
#endif
#endif

#ifndef __XMLSchemaCache30_FWD_DEFINED__
#define __XMLSchemaCache30_FWD_DEFINED__
#ifdef __cplusplus
typedef class XMLSchemaCache30 XMLSchemaCache30;
#else
typedef struct XMLSchemaCache30 XMLSchemaCache30;
#endif
#endif

#ifndef __XMLSchemaCache40_FWD_DEFINED__
#define __XMLSchemaCache40_FWD_DEFINED__
#ifdef __cplusplus
typedef class XMLSchemaCache40 XMLSchemaCache40;
#else
typedef struct XMLSchemaCache40 XMLSchemaCache40;
#endif
#endif

#ifndef __XSLTemplate_FWD_DEFINED__
#define __XSLTemplate_FWD_DEFINED__
#ifdef __cplusplus
typedef class XSLTemplate XSLTemplate;
#else
typedef struct XSLTemplate XSLTemplate;
#endif
#endif

#ifndef __XSLTemplate26_FWD_DEFINED__
#define __XSLTemplate26_FWD_DEFINED__
#ifdef __cplusplus
typedef class XSLTemplate26 XSLTemplate26;
#else
typedef struct XSLTemplate26 XSLTemplate26;
#endif
#endif

#ifndef __XSLTemplate30_FWD_DEFINED__
#define __XSLTemplate30_FWD_DEFINED__
#ifdef __cplusplus
typedef class XSLTemplate30 XSLTemplate30;
#else
typedef struct XSLTemplate30 XSLTemplate30;
#endif
#endif

#ifndef __XSLTemplate40_FWD_DEFINED__
#define __XSLTemplate40_FWD_DEFINED__
#ifdef __cplusplus
typedef class XSLTemplate40 XSLTemplate40;
#else
typedef struct XSLTemplate40 XSLTemplate40;
#endif
#endif

#ifndef __DSOControl_FWD_DEFINED__
#define __DSOControl_FWD_DEFINED__
#ifdef __cplusplus
typedef class DSOControl DSOControl;
#else
typedef struct DSOControl DSOControl;
#endif
#endif

#ifndef __DSOControl26_FWD_DEFINED__
#define __DSOControl26_FWD_DEFINED__
#ifdef __cplusplus
typedef class DSOControl26 DSOControl26;
#else
typedef struct DSOControl26 DSOControl26;
#endif
#endif

#ifndef __DSOControl30_FWD_DEFINED__
#define __DSOControl30_FWD_DEFINED__
#ifdef __cplusplus
typedef class DSOControl30 DSOControl30;
#else
typedef struct DSOControl30 DSOControl30;
#endif
#endif

#ifndef __DSOControl40_FWD_DEFINED__
#define __DSOControl40_FWD_DEFINED__
#ifdef __cplusplus
typedef class DSOControl40 DSOControl40;
#else
typedef struct DSOControl40 DSOControl40;
#endif
#endif

#ifndef __XMLHTTP_FWD_DEFINED__
#define __XMLHTTP_FWD_DEFINED__
#ifdef __cplusplus
typedef class XMLHTTP XMLHTTP;
#else
typedef struct XMLHTTP XMLHTTP;
#endif
#endif

#ifndef __XMLHTTP26_FWD_DEFINED__
#define __XMLHTTP26_FWD_DEFINED__
#ifdef __cplusplus
typedef class XMLHTTP26 XMLHTTP26;
#else
typedef struct XMLHTTP26 XMLHTTP26;
#endif
#endif

#ifndef __XMLHTTP30_FWD_DEFINED__
#define __XMLHTTP30_FWD_DEFINED__
#ifdef __cplusplus
typedef class XMLHTTP30 XMLHTTP30;
#else
typedef struct XMLHTTP30 XMLHTTP30;
#endif
#endif

#ifndef __XMLHTTP40_FWD_DEFINED__
#define __XMLHTTP40_FWD_DEFINED__
#ifdef __cplusplus
typedef class XMLHTTP40 XMLHTTP40;
#else
typedef struct XMLHTTP40 XMLHTTP40;
#endif
#endif

#ifndef __ServerXMLHTTP_FWD_DEFINED__
#define __ServerXMLHTTP_FWD_DEFINED__
#ifdef __cplusplus
typedef class ServerXMLHTTP ServerXMLHTTP;
#else
typedef struct ServerXMLHTTP ServerXMLHTTP;
#endif
#endif

#ifndef __ServerXMLHTTP30_FWD_DEFINED__
#define __ServerXMLHTTP30_FWD_DEFINED__
#ifdef __cplusplus
typedef class ServerXMLHTTP30 ServerXMLHTTP30;
#else
typedef struct ServerXMLHTTP30 ServerXMLHTTP30;
#endif
#endif

#ifndef __ServerXMLHTTP40_FWD_DEFINED__
#define __ServerXMLHTTP40_FWD_DEFINED__
#ifdef __cplusplus
typedef class ServerXMLHTTP40 ServerXMLHTTP40;
#else
typedef struct ServerXMLHTTP40 ServerXMLHTTP40;
#endif
#endif

#ifndef __SAXXMLReader_FWD_DEFINED__
#define __SAXXMLReader_FWD_DEFINED__
#ifdef __cplusplus
typedef class SAXXMLReader SAXXMLReader;
#else
typedef struct SAXXMLReader SAXXMLReader;
#endif
#endif

#ifndef __SAXXMLReader30_FWD_DEFINED__
#define __SAXXMLReader30_FWD_DEFINED__
#ifdef __cplusplus
typedef class SAXXMLReader30 SAXXMLReader30;
#else
typedef struct SAXXMLReader30 SAXXMLReader30;
#endif
#endif

#ifndef __SAXXMLReader40_FWD_DEFINED__
#define __SAXXMLReader40_FWD_DEFINED__
#ifdef __cplusplus
typedef class SAXXMLReader40 SAXXMLReader40;
#else
typedef struct SAXXMLReader40 SAXXMLReader40;
#endif
#endif

#ifndef __MXXMLWriter_FWD_DEFINED__
#define __MXXMLWriter_FWD_DEFINED__
#ifdef __cplusplus
typedef class MXXMLWriter MXXMLWriter;
#else
typedef struct MXXMLWriter MXXMLWriter;
#endif
#endif

#ifndef __MXXMLWriter30_FWD_DEFINED__
#define __MXXMLWriter30_FWD_DEFINED__
#ifdef __cplusplus
typedef class MXXMLWriter30 MXXMLWriter30;
#else
typedef struct MXXMLWriter30 MXXMLWriter30;
#endif
#endif

#ifndef __MXXMLWriter40_FWD_DEFINED__
#define __MXXMLWriter40_FWD_DEFINED__
#ifdef __cplusplus
typedef class MXXMLWriter40 MXXMLWriter40;
#else
typedef struct MXXMLWriter40 MXXMLWriter40;
#endif
#endif

#ifndef __MXHTMLWriter_FWD_DEFINED__
#define __MXHTMLWriter_FWD_DEFINED__
#ifdef __cplusplus
typedef class MXHTMLWriter MXHTMLWriter;
#else
typedef struct MXHTMLWriter MXHTMLWriter;
#endif
#endif

#ifndef __MXHTMLWriter30_FWD_DEFINED__
#define __MXHTMLWriter30_FWD_DEFINED__
#ifdef __cplusplus
typedef class MXHTMLWriter30 MXHTMLWriter30;
#else
typedef struct MXHTMLWriter30 MXHTMLWriter30;
#endif
#endif

#ifndef __MXHTMLWriter40_FWD_DEFINED__
#define __MXHTMLWriter40_FWD_DEFINED__
#ifdef __cplusplus
typedef class MXHTMLWriter40 MXHTMLWriter40;
#else
typedef struct MXHTMLWriter40 MXHTMLWriter40;
#endif
#endif

#ifndef __SAXAttributes_FWD_DEFINED__
#define __SAXAttributes_FWD_DEFINED__
#ifdef __cplusplus
typedef class SAXAttributes SAXAttributes;
#else
typedef struct SAXAttributes SAXAttributes;
#endif
#endif

#ifndef __SAXAttributes30_FWD_DEFINED__
#define __SAXAttributes30_FWD_DEFINED__
#ifdef __cplusplus
typedef class SAXAttributes30 SAXAttributes30;
#else
typedef struct SAXAttributes30 SAXAttributes30;
#endif
#endif

#ifndef __SAXAttributes40_FWD_DEFINED__
#define __SAXAttributes40_FWD_DEFINED__
#ifdef __cplusplus
typedef class SAXAttributes40 SAXAttributes40;
#else
typedef struct SAXAttributes40 SAXAttributes40;
#endif
#endif

#ifndef __MXNamespaceManager_FWD_DEFINED__
#define __MXNamespaceManager_FWD_DEFINED__
#ifdef __cplusplus
typedef class MXNamespaceManager MXNamespaceManager;
#else
typedef struct MXNamespaceManager MXNamespaceManager;
#endif
#endif

#ifndef __MXNamespaceManager40_FWD_DEFINED__
#define __MXNamespaceManager40_FWD_DEFINED__
#ifdef __cplusplus
typedef class MXNamespaceManager40 MXNamespaceManager40;
#else
typedef struct MXNamespaceManager40 MXNamespaceManager40;
#endif
#endif

#ifndef __XMLDocument_FWD_DEFINED__
#define __XMLDocument_FWD_DEFINED__
#ifdef __cplusplus
typedef class XMLDocument XMLDocument;
#else
typedef struct XMLDocument XMLDocument;
#endif
#endif

#include "unknwn.h"
#include "objidl.h"
#include "oaidl.h"

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __MIDL_user_allocate_free_DEFINED__
#define __MIDL_user_allocate_free_DEFINED__
  void *__RPC_API MIDL_user_allocate(size_t);
  void __RPC_API MIDL_user_free(void *);
#endif

#define DOMDocument DOMDocument2
#define CLSID_DOMDocument CLSID_DOMDocument2

#ifdef __USE_MSXML2_NAMESPACE__
  namespace MSXML2 {
#endif
#ifndef __msxml_h__
    typedef struct _xml_error {
      unsigned int _nLine;
      BSTR _pchBuf;
      unsigned int _cchBuf;
      unsigned int _ich;
      BSTR _pszFound;
      BSTR _pszExpected;
      DWORD _reserved1;
      DWORD _reserved2;
    } XML_ERROR;
#endif
#ifdef __ISAXXMLReader_INTERFACE_DEFINED__
#undef __MSXML2_LIBRARY_DEFINED__
#endif

    extern RPC_IF_HANDLE __MIDL_itf_msxml2_0000_v0_0_c_ifspec;
    extern RPC_IF_HANDLE __MIDL_itf_msxml2_0000_v0_0_s_ifspec;

#ifndef __MSXML2_LIBRARY_DEFINED__
#define __MSXML2_LIBRARY_DEFINED__

#undef ParseURL
#if !defined(__msxml_h__)
    typedef enum tagXMLEMEM_TYPE {
      XMLELEMTYPE_ELEMENT = 0,XMLELEMTYPE_TEXT = XMLELEMTYPE_ELEMENT + 1,XMLELEMTYPE_COMMENT = XMLELEMTYPE_TEXT + 1,
      XMLELEMTYPE_DOCUMENT = XMLELEMTYPE_COMMENT + 1,XMLELEMTYPE_DTD = XMLELEMTYPE_DOCUMENT + 1,XMLELEMTYPE_PI = XMLELEMTYPE_DTD + 1,
      XMLELEMTYPE_OTHER = XMLELEMTYPE_PI + 1
    } XMLELEM_TYPE;
#endif
#if !defined(__msxml_h__) || defined(__IXMLElementNotificationSink_INTERFACE_DEFINED__)
    typedef enum tagDOMNodeType {
      NODE_INVALID = 0,NODE_ELEMENT = NODE_INVALID + 1,NODE_ATTRIBUTE = NODE_ELEMENT + 1,NODE_TEXT = NODE_ATTRIBUTE + 1,
      NODE_CDATA_SECTION = NODE_TEXT + 1,NODE_ENTITY_REFERENCE = NODE_CDATA_SECTION + 1,NODE_ENTITY = NODE_ENTITY_REFERENCE + 1,
      NODE_PROCESSING_INSTRUCTION = NODE_ENTITY + 1,NODE_COMMENT = NODE_PROCESSING_INSTRUCTION + 1,NODE_DOCUMENT = NODE_COMMENT + 1,
      NODE_DOCUMENT_TYPE = NODE_DOCUMENT + 1,NODE_DOCUMENT_FRAGMENT = NODE_DOCUMENT_TYPE + 1,NODE_NOTATION = NODE_DOCUMENT_FRAGMENT + 1
    } DOMNodeType;
#endif
#if !defined(__msxml_sxh_enums__)
#define __msxml_sxh_enums__
    typedef enum _SERVERXMLHTTP_OPTION {
      SXH_OPTION_URL = -1,SXH_OPTION_URL_CODEPAGE = SXH_OPTION_URL + 1,SXH_OPTION_ESCAPE_PERCENT_IN_URL = SXH_OPTION_URL_CODEPAGE + 1,
      SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS = SXH_OPTION_ESCAPE_PERCENT_IN_URL + 1,
      SXH_OPTION_SELECT_CLIENT_SSL_CERT = SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS + 1
    } SERVERXMLHTTP_OPTION;

    typedef enum _SXH_SERVER_CERT_OPTION {
      SXH_SERVER_CERT_IGNORE_UNKNOWN_CA = 0x100,SXH_SERVER_CERT_IGNORE_WRONG_USAGE = 0x200,SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID = 0x1000,
      SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID = 0x2000,
      SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS = SXH_SERVER_CERT_IGNORE_UNKNOWN_CA + SXH_SERVER_CERT_IGNORE_WRONG_USAGE + SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID + SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID
    } SXH_SERVER_CERT_OPTION;

    typedef enum _SXH_PROXY_SETTING {
      SXH_PROXY_SET_DEFAULT = 0,SXH_PROXY_SET_PRECONFIG = 0,SXH_PROXY_SET_DIRECT = 0x1,SXH_PROXY_SET_PROXY = 0x2
    } SXH_PROXY_SETTING;
#endif

#ifndef __msxml_som_enums__
#define __msxml_som_enums__
    typedef enum _SOMITEMTYPE {
      SOMITEM_SCHEMA = 0x1000,SOMITEM_ATTRIBUTE = 0x1001,SOMITEM_ATTRIBUTEGROUP = 0x1002,SOMITEM_NOTATION = 0x1003,
      SOMITEM_IDENTITYCONSTRAINT = 0x1100,SOMITEM_KEY = 0x1101,SOMITEM_KEYREF = 0x1102,SOMITEM_UNIQUE = 0x1103,SOMITEM_ANYTYPE = 0x2000,
      SOMITEM_DATATYPE = 0x2100,SOMITEM_DATATYPE_ANYTYPE = 0x2101,SOMITEM_DATATYPE_ANYURI = 0x2102,SOMITEM_DATATYPE_BASE64BINARY = 0x2103,
      SOMITEM_DATATYPE_BOOLEAN = 0x2104,SOMITEM_DATATYPE_BYTE = 0x2105,SOMITEM_DATATYPE_DATE = 0x2106,SOMITEM_DATATYPE_DATETIME = 0x2107,
      SOMITEM_DATATYPE_DAY = 0x2108,SOMITEM_DATATYPE_DECIMAL = 0x2109,SOMITEM_DATATYPE_DOUBLE = 0x210a,SOMITEM_DATATYPE_DURATION = 0x210b,
      SOMITEM_DATATYPE_ENTITIES = 0x210c,SOMITEM_DATATYPE_ENTITY = 0x210d,SOMITEM_DATATYPE_FLOAT = 0x210e,SOMITEM_DATATYPE_HEXBINARY = 0x210f,
      SOMITEM_DATATYPE_ID = 0x2110,SOMITEM_DATATYPE_IDREF = 0x2111,SOMITEM_DATATYPE_IDREFS = 0x2112,SOMITEM_DATATYPE_INT = 0x2113,
      SOMITEM_DATATYPE_INTEGER = 0x2114,SOMITEM_DATATYPE_LANGUAGE = 0x2115,SOMITEM_DATATYPE_LONG = 0x2116,SOMITEM_DATATYPE_MONTH = 0x2117,
      SOMITEM_DATATYPE_MONTHDAY = 0x2118,SOMITEM_DATATYPE_NAME = 0x2119,SOMITEM_DATATYPE_NCNAME = 0x211a,SOMITEM_DATATYPE_NEGATIVEINTEGER = 0x211b,
      SOMITEM_DATATYPE_NMTOKEN = 0x211c,SOMITEM_DATATYPE_NMTOKENS = 0x211d,SOMITEM_DATATYPE_NONNEGATIVEINTEGER = 0x211e,
      SOMITEM_DATATYPE_NONPOSITIVEINTEGER = 0x211f,SOMITEM_DATATYPE_NORMALIZEDSTRING = 0x2120,SOMITEM_DATATYPE_NOTATION = 0x2121,
      SOMITEM_DATATYPE_POSITIVEINTEGER = 0x2122,SOMITEM_DATATYPE_QNAME = 0x2123,SOMITEM_DATATYPE_SHORT = 0x2124,SOMITEM_DATATYPE_STRING = 0x2125,
      SOMITEM_DATATYPE_TIME = 0x2126,SOMITEM_DATATYPE_TOKEN = 0x2127,SOMITEM_DATATYPE_UNSIGNEDBYTE = 0x2128,SOMITEM_DATATYPE_UNSIGNEDINT = 0x2129,
      SOMITEM_DATATYPE_UNSIGNEDLONG = 0x212a,SOMITEM_DATATYPE_UNSIGNEDSHORT = 0x212b,SOMITEM_DATATYPE_YEAR = 0x212c,SOMITEM_DATATYPE_YEARMONTH = 0x212d,
      SOMITEM_DATATYPE_ANYSIMPLETYPE = 0x21ff,SOMITEM_SIMPLETYPE = 0x2200,SOMITEM_COMPLEXTYPE = 0x2400,SOMITEM_PARTICLE = 0x4000,SOMITEM_ANY = 0x4001,
      SOMITEM_ANYATTRIBUTE = 0x4002,SOMITEM_ELEMENT = 0x4003,SOMITEM_GROUP = 0x4100,SOMITEM_ALL = 0x4101,SOMITEM_CHOICE = 0x4102,SOMITEM_SEQUENCE = 0x4103,
      SOMITEM_EMPTYPARTICLE = 0x4104,SOMITEM_NULL = 0x800,SOMITEM_NULL_TYPE = 0x2800,SOMITEM_NULL_ANY = 0x4801,SOMITEM_NULL_ANYATTRIBUTE = 0x4802,
      SOMITEM_NULL_ELEMENT = 0x4803
    } SOMITEMTYPE;

    typedef enum _SCHEMAUSE {
      SCHEMAUSE_OPTIONAL = 0,SCHEMAUSE_PROHIBITED = SCHEMAUSE_OPTIONAL + 1,SCHEMAUSE_REQUIRED = SCHEMAUSE_PROHIBITED + 1
    } SCHEMAUSE;

    typedef enum _SCHEMADERIVATIONMETHOD {
      SCHEMADERIVATIONMETHOD_EMPTY = 0,SCHEMADERIVATIONMETHOD_SUBSTITUTION = 0x1,SCHEMADERIVATIONMETHOD_EXTENSION = 0x2,
      SCHEMADERIVATIONMETHOD_RESTRICTION = 0x4,SCHEMADERIVATIONMETHOD_LIST = 0x8,SCHEMADERIVATIONMETHOD_UNION = 0x10,SCHEMADERIVATIONMETHOD_ALL = 0xff,
      SCHEMADERIVATIONMETHOD_NONE = 0x100
    } SCHEMADERIVATIONMETHOD;

    typedef enum _SCHEMACONTENTTYPE {
      SCHEMACONTENTTYPE_EMPTY = 0,SCHEMACONTENTTYPE_TEXTONLY = SCHEMACONTENTTYPE_EMPTY + 1,SCHEMACONTENTTYPE_ELEMENTONLY = SCHEMACONTENTTYPE_TEXTONLY + 1,
      SCHEMACONTENTTYPE_MIXED = SCHEMACONTENTTYPE_ELEMENTONLY + 1
    } SCHEMACONTENTTYPE;

    typedef enum _SCHEMAPROCESSCONTENTS {
      SCHEMAPROCESSCONTENTS_NONE = 0,SCHEMAPROCESSCONTENTS_SKIP = SCHEMAPROCESSCONTENTS_NONE + 1,
      SCHEMAPROCESSCONTENTS_LAX = SCHEMAPROCESSCONTENTS_SKIP + 1,SCHEMAPROCESSCONTENTS_STRICT = SCHEMAPROCESSCONTENTS_LAX + 1
    } SCHEMAPROCESSCONTENTS;

    typedef enum _SCHEMAWHITESPACE {
      SCHEMAWHITESPACE_NONE = -1,SCHEMAWHITESPACE_PRESERVE = 0,SCHEMAWHITESPACE_REPLACE = 1,SCHEMAWHITESPACE_COLLAPSE = 2
    } SCHEMAWHITESPACE;

    typedef enum _SCHEMATYPEVARIETY {
      SCHEMATYPEVARIETY_NONE = -1,SCHEMATYPEVARIETY_ATOMIC = 0,SCHEMATYPEVARIETY_LIST = 1,SCHEMATYPEVARIETY_UNION = 2
    } SCHEMATYPEVARIETY;
#endif

    EXTERN_C const IID LIBID_MSXML2;
#ifndef __IXMLDOMImplementation_INTERFACE_DEFINED__
#define __IXMLDOMImplementation_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMImplementation;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMImplementation : public IDispatch {
    public:
      virtual HRESULT WINAPI hasFeature(BSTR feature,BSTR version,VARIANT_BOOL *hasFeature) = 0;
    };
#else
    typedef struct IXMLDOMImplementationVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMImplementation *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMImplementation *This);
	ULONG (WINAPI *Release)(IXMLDOMImplementation *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMImplementation *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMImplementation *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMImplementation *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMImplementation *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *hasFeature)(IXMLDOMImplementation *This,BSTR feature,BSTR version,VARIANT_BOOL *hasFeature);
      END_INTERFACE
    } IXMLDOMImplementationVtbl;
    struct IXMLDOMImplementation {
      CONST_VTBL struct IXMLDOMImplementationVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMImplementation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMImplementation_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMImplementation_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMImplementation_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMImplementation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMImplementation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMImplementation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMImplementation_hasFeature(This,feature,version,hasFeature) (This)->lpVtbl->hasFeature(This,feature,version,hasFeature)
#endif
#endif
    HRESULT WINAPI IXMLDOMImplementation_hasFeature_Proxy(IXMLDOMImplementation *This,BSTR feature,BSTR version,VARIANT_BOOL *hasFeature);
    void __RPC_STUB IXMLDOMImplementation_hasFeature_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMNode_INTERFACE_DEFINED__
#define __IXMLDOMNode_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMNode;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMNode : public IDispatch {
    public:
      virtual HRESULT WINAPI get_nodeName(BSTR *name) = 0;
      virtual HRESULT WINAPI get_nodeValue(VARIANT *value) = 0;
      virtual HRESULT WINAPI put_nodeValue(VARIANT value) = 0;
      virtual HRESULT WINAPI get_nodeType(DOMNodeType *type) = 0;
      virtual HRESULT WINAPI get_parentNode(IXMLDOMNode **parent) = 0;
      virtual HRESULT WINAPI get_childNodes(IXMLDOMNodeList **childList) = 0;
      virtual HRESULT WINAPI get_firstChild(IXMLDOMNode **firstChild) = 0;
      virtual HRESULT WINAPI get_lastChild(IXMLDOMNode **lastChild) = 0;
      virtual HRESULT WINAPI get_previousSibling(IXMLDOMNode **previousSibling) = 0;
      virtual HRESULT WINAPI get_nextSibling(IXMLDOMNode **nextSibling) = 0;
      virtual HRESULT WINAPI get_attributes(IXMLDOMNamedNodeMap **attributeMap) = 0;
      virtual HRESULT WINAPI insertBefore(IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild) = 0;
      virtual HRESULT WINAPI replaceChild(IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild) = 0;
      virtual HRESULT WINAPI removeChild(IXMLDOMNode *childNode,IXMLDOMNode **oldChild) = 0;
      virtual HRESULT WINAPI appendChild(IXMLDOMNode *newChild,IXMLDOMNode **outNewChild) = 0;
      virtual HRESULT WINAPI hasChildNodes(VARIANT_BOOL *hasChild) = 0;
      virtual HRESULT WINAPI get_ownerDocument(IXMLDOMDocument **DOMDocument) = 0;
      virtual HRESULT WINAPI cloneNode(VARIANT_BOOL deep,IXMLDOMNode **cloneRoot) = 0;
      virtual HRESULT WINAPI get_nodeTypeString(BSTR *nodeType) = 0;
      virtual HRESULT WINAPI get_text(BSTR *text) = 0;
      virtual HRESULT WINAPI put_text(BSTR text) = 0;
      virtual HRESULT WINAPI get_specified(VARIANT_BOOL *isSpecified) = 0;
      virtual HRESULT WINAPI get_definition(IXMLDOMNode **definitionNode) = 0;
      virtual HRESULT WINAPI get_nodeTypedValue(VARIANT *typedValue) = 0;
      virtual HRESULT WINAPI put_nodeTypedValue(VARIANT typedValue) = 0;
      virtual HRESULT WINAPI get_dataType(VARIANT *dataTypeName) = 0;
      virtual HRESULT WINAPI put_dataType(BSTR dataTypeName) = 0;
      virtual HRESULT WINAPI get_xml(BSTR *xmlString) = 0;
      virtual HRESULT WINAPI transformNode(IXMLDOMNode *stylesheet,BSTR *xmlString) = 0;
      virtual HRESULT WINAPI selectNodes(BSTR queryString,IXMLDOMNodeList **resultList) = 0;
      virtual HRESULT WINAPI selectSingleNode(BSTR queryString,IXMLDOMNode **resultNode) = 0;
      virtual HRESULT WINAPI get_parsed(VARIANT_BOOL *isParsed) = 0;
      virtual HRESULT WINAPI get_namespaceURI(BSTR *namespaceURI) = 0;
      virtual HRESULT WINAPI get_prefix(BSTR *prefixString) = 0;
      virtual HRESULT WINAPI get_baseName(BSTR *nameString) = 0;
      virtual HRESULT WINAPI transformNodeToObject(IXMLDOMNode *stylesheet,VARIANT outputObject) = 0;
    };
#else
    typedef struct IXMLDOMNodeVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMNode *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMNode *This);
	ULONG (WINAPI *Release)(IXMLDOMNode *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMNode *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMNode *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMNode *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMNode *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMNode *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMNode *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMNode *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMNode *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMNode *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMNode *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMNode *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMNode *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMNode *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMNode *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMNode *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMNode *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMNode *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMNode *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMNode *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMNode *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMNode *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMNode *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMNode *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMNode *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMNode *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMNode *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMNode *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMNode *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMNode *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMNode *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMNode *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMNode *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMNode *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMNode *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMNode *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMNode *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMNode *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMNode *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMNode *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMNode *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
      END_INTERFACE
    } IXMLDOMNodeVtbl;
    struct IXMLDOMNode {
      CONST_VTBL struct IXMLDOMNodeVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMNode_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMNode_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMNode_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMNode_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMNode_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMNode_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMNode_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMNode_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMNode_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMNode_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMNode_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMNode_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMNode_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMNode_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMNode_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMNode_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMNode_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMNode_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMNode_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMNode_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMNode_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMNode_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMNode_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMNode_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMNode_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMNode_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMNode_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMNode_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMNode_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMNode_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMNode_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMNode_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMNode_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMNode_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMNode_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMNode_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMNode_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMNode_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMNode_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMNode_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMNode_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMNode_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMNode_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#endif
#endif
    HRESULT WINAPI IXMLDOMNode_get_nodeName_Proxy(IXMLDOMNode *This,BSTR *name);
    void __RPC_STUB IXMLDOMNode_get_nodeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_nodeValue_Proxy(IXMLDOMNode *This,VARIANT *value);
    void __RPC_STUB IXMLDOMNode_get_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_put_nodeValue_Proxy(IXMLDOMNode *This,VARIANT value);
    void __RPC_STUB IXMLDOMNode_put_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_nodeType_Proxy(IXMLDOMNode *This,DOMNodeType *type);
    void __RPC_STUB IXMLDOMNode_get_nodeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_parentNode_Proxy(IXMLDOMNode *This,IXMLDOMNode **parent);
    void __RPC_STUB IXMLDOMNode_get_parentNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_childNodes_Proxy(IXMLDOMNode *This,IXMLDOMNodeList **childList);
    void __RPC_STUB IXMLDOMNode_get_childNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_firstChild_Proxy(IXMLDOMNode *This,IXMLDOMNode **firstChild);
    void __RPC_STUB IXMLDOMNode_get_firstChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_lastChild_Proxy(IXMLDOMNode *This,IXMLDOMNode **lastChild);
    void __RPC_STUB IXMLDOMNode_get_lastChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_previousSibling_Proxy(IXMLDOMNode *This,IXMLDOMNode **previousSibling);
    void __RPC_STUB IXMLDOMNode_get_previousSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_nextSibling_Proxy(IXMLDOMNode *This,IXMLDOMNode **nextSibling);
    void __RPC_STUB IXMLDOMNode_get_nextSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_attributes_Proxy(IXMLDOMNode *This,IXMLDOMNamedNodeMap **attributeMap);
    void __RPC_STUB IXMLDOMNode_get_attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_insertBefore_Proxy(IXMLDOMNode *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
    void __RPC_STUB IXMLDOMNode_insertBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_replaceChild_Proxy(IXMLDOMNode *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
    void __RPC_STUB IXMLDOMNode_replaceChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_removeChild_Proxy(IXMLDOMNode *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
    void __RPC_STUB IXMLDOMNode_removeChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_appendChild_Proxy(IXMLDOMNode *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
    void __RPC_STUB IXMLDOMNode_appendChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_hasChildNodes_Proxy(IXMLDOMNode *This,VARIANT_BOOL *hasChild);
    void __RPC_STUB IXMLDOMNode_hasChildNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_ownerDocument_Proxy(IXMLDOMNode *This,IXMLDOMDocument **DOMDocument);
    void __RPC_STUB IXMLDOMNode_get_ownerDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_cloneNode_Proxy(IXMLDOMNode *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
    void __RPC_STUB IXMLDOMNode_cloneNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_nodeTypeString_Proxy(IXMLDOMNode *This,BSTR *nodeType);
    void __RPC_STUB IXMLDOMNode_get_nodeTypeString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_text_Proxy(IXMLDOMNode *This,BSTR *text);
    void __RPC_STUB IXMLDOMNode_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_put_text_Proxy(IXMLDOMNode *This,BSTR text);
    void __RPC_STUB IXMLDOMNode_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_specified_Proxy(IXMLDOMNode *This,VARIANT_BOOL *isSpecified);
    void __RPC_STUB IXMLDOMNode_get_specified_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_definition_Proxy(IXMLDOMNode *This,IXMLDOMNode **definitionNode);
    void __RPC_STUB IXMLDOMNode_get_definition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_nodeTypedValue_Proxy(IXMLDOMNode *This,VARIANT *typedValue);
    void __RPC_STUB IXMLDOMNode_get_nodeTypedValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_put_nodeTypedValue_Proxy(IXMLDOMNode *This,VARIANT typedValue);
    void __RPC_STUB IXMLDOMNode_put_nodeTypedValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_dataType_Proxy(IXMLDOMNode *This,VARIANT *dataTypeName);
    void __RPC_STUB IXMLDOMNode_get_dataType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_put_dataType_Proxy(IXMLDOMNode *This,BSTR dataTypeName);
    void __RPC_STUB IXMLDOMNode_put_dataType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_xml_Proxy(IXMLDOMNode *This,BSTR *xmlString);
    void __RPC_STUB IXMLDOMNode_get_xml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_transformNode_Proxy(IXMLDOMNode *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
    void __RPC_STUB IXMLDOMNode_transformNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_selectNodes_Proxy(IXMLDOMNode *This,BSTR queryString,IXMLDOMNodeList **resultList);
    void __RPC_STUB IXMLDOMNode_selectNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_selectSingleNode_Proxy(IXMLDOMNode *This,BSTR queryString,IXMLDOMNode **resultNode);
    void __RPC_STUB IXMLDOMNode_selectSingleNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_parsed_Proxy(IXMLDOMNode *This,VARIANT_BOOL *isParsed);
    void __RPC_STUB IXMLDOMNode_get_parsed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_namespaceURI_Proxy(IXMLDOMNode *This,BSTR *namespaceURI);
    void __RPC_STUB IXMLDOMNode_get_namespaceURI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_prefix_Proxy(IXMLDOMNode *This,BSTR *prefixString);
    void __RPC_STUB IXMLDOMNode_get_prefix_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_get_baseName_Proxy(IXMLDOMNode *This,BSTR *nameString);
    void __RPC_STUB IXMLDOMNode_get_baseName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNode_transformNodeToObject_Proxy(IXMLDOMNode *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
    void __RPC_STUB IXMLDOMNode_transformNodeToObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMDocumentFragment_INTERFACE_DEFINED__
#define __IXMLDOMDocumentFragment_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMDocumentFragment;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMDocumentFragment : public IXMLDOMNode {
    };
#else
    typedef struct IXMLDOMDocumentFragmentVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMDocumentFragment *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMDocumentFragment *This);
	ULONG (WINAPI *Release)(IXMLDOMDocumentFragment *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMDocumentFragment *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMDocumentFragment *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMDocumentFragment *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMDocumentFragment *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMDocumentFragment *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMDocumentFragment *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMDocumentFragment *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMDocumentFragment *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMDocumentFragment *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMDocumentFragment *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMDocumentFragment *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMDocumentFragment *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMDocumentFragment *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMDocumentFragment *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMDocumentFragment *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMDocumentFragment *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMDocumentFragment *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMDocumentFragment *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMDocumentFragment *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMDocumentFragment *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMDocumentFragment *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMDocumentFragment *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMDocumentFragment *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMDocumentFragment *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMDocumentFragment *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMDocumentFragment *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMDocumentFragment *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMDocumentFragment *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMDocumentFragment *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMDocumentFragment *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMDocumentFragment *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMDocumentFragment *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMDocumentFragment *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMDocumentFragment *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMDocumentFragment *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMDocumentFragment *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMDocumentFragment *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMDocumentFragment *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMDocumentFragment *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMDocumentFragment *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
      END_INTERFACE
    } IXMLDOMDocumentFragmentVtbl;
    struct IXMLDOMDocumentFragment {
      CONST_VTBL struct IXMLDOMDocumentFragmentVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMDocumentFragment_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMDocumentFragment_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMDocumentFragment_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMDocumentFragment_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMDocumentFragment_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMDocumentFragment_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMDocumentFragment_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMDocumentFragment_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMDocumentFragment_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMDocumentFragment_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMDocumentFragment_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMDocumentFragment_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMDocumentFragment_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMDocumentFragment_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMDocumentFragment_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMDocumentFragment_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMDocumentFragment_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMDocumentFragment_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMDocumentFragment_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMDocumentFragment_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMDocumentFragment_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMDocumentFragment_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMDocumentFragment_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMDocumentFragment_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMDocumentFragment_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMDocumentFragment_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMDocumentFragment_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMDocumentFragment_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMDocumentFragment_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMDocumentFragment_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMDocumentFragment_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMDocumentFragment_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMDocumentFragment_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMDocumentFragment_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMDocumentFragment_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMDocumentFragment_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMDocumentFragment_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMDocumentFragment_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMDocumentFragment_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMDocumentFragment_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMDocumentFragment_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMDocumentFragment_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMDocumentFragment_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#endif
#endif
#endif

#ifndef __IXMLDOMDocument_INTERFACE_DEFINED__
#define __IXMLDOMDocument_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMDocument;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMDocument : public IXMLDOMNode {
    public:
      virtual HRESULT WINAPI get_doctype(IXMLDOMDocumentType **documentType) = 0;
      virtual HRESULT WINAPI get_implementation(IXMLDOMImplementation **impl) = 0;
      virtual HRESULT WINAPI get_documentElement(IXMLDOMElement **DOMElement) = 0;
      virtual HRESULT WINAPI putref_documentElement(IXMLDOMElement *DOMElement) = 0;
      virtual HRESULT WINAPI createElement(BSTR tagName,IXMLDOMElement **element) = 0;
      virtual HRESULT WINAPI createDocumentFragment(IXMLDOMDocumentFragment **docFrag) = 0;
      virtual HRESULT WINAPI createTextNode(BSTR data,IXMLDOMText **text) = 0;
      virtual HRESULT WINAPI createComment(BSTR data,IXMLDOMComment **comment) = 0;
      virtual HRESULT WINAPI createCDATASection(BSTR data,IXMLDOMCDATASection **cdata) = 0;
      virtual HRESULT WINAPI createProcessingInstruction(BSTR target,BSTR data,IXMLDOMProcessingInstruction **pi) = 0;
      virtual HRESULT WINAPI createAttribute(BSTR name,IXMLDOMAttribute **attribute) = 0;
      virtual HRESULT WINAPI createEntityReference(BSTR name,IXMLDOMEntityReference **entityRef) = 0;
      virtual HRESULT WINAPI getElementsByTagName(BSTR tagName,IXMLDOMNodeList **resultList) = 0;
      virtual HRESULT WINAPI createNode(VARIANT Type,BSTR name,BSTR namespaceURI,IXMLDOMNode **node) = 0;
      virtual HRESULT WINAPI nodeFromID(BSTR idString,IXMLDOMNode **node) = 0;
      virtual HRESULT WINAPI load(VARIANT xmlSource,VARIANT_BOOL *isSuccessful) = 0;
      virtual HRESULT WINAPI get_readyState(long *value) = 0;
      virtual HRESULT WINAPI get_parseError(IXMLDOMParseError **errorObj) = 0;
      virtual HRESULT WINAPI get_url(BSTR *urlString) = 0;
      virtual HRESULT WINAPI get_async(VARIANT_BOOL *isAsync) = 0;
      virtual HRESULT WINAPI put_async(VARIANT_BOOL isAsync) = 0;
      virtual HRESULT WINAPI abort(void) = 0;
      virtual HRESULT WINAPI loadXML(BSTR bstrXML,VARIANT_BOOL *isSuccessful) = 0;
      virtual HRESULT WINAPI save(VARIANT destination) = 0;
      virtual HRESULT WINAPI get_validateOnParse(VARIANT_BOOL *isValidating) = 0;
      virtual HRESULT WINAPI put_validateOnParse(VARIANT_BOOL isValidating) = 0;
      virtual HRESULT WINAPI get_resolveExternals(VARIANT_BOOL *isResolving) = 0;
      virtual HRESULT WINAPI put_resolveExternals(VARIANT_BOOL isResolving) = 0;
      virtual HRESULT WINAPI get_preserveWhiteSpace(VARIANT_BOOL *isPreserving) = 0;
      virtual HRESULT WINAPI put_preserveWhiteSpace(VARIANT_BOOL isPreserving) = 0;
      virtual HRESULT WINAPI put_onreadystatechange(VARIANT readystatechangeSink) = 0;
      virtual HRESULT WINAPI put_ondataavailable(VARIANT ondataavailableSink) = 0;
      virtual HRESULT WINAPI put_ontransformnode(VARIANT ontransformnodeSink) = 0;
    };
#else
    typedef struct IXMLDOMDocumentVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMDocument *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMDocument *This);
	ULONG (WINAPI *Release)(IXMLDOMDocument *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMDocument *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMDocument *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMDocument *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMDocument *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMDocument *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMDocument *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMDocument *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMDocument *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMDocument *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMDocument *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMDocument *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMDocument *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMDocument *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMDocument *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMDocument *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMDocument *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMDocument *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMDocument *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMDocument *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMDocument *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMDocument *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMDocument *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMDocument *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMDocument *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMDocument *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMDocument *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMDocument *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMDocument *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMDocument *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMDocument *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMDocument *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMDocument *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMDocument *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMDocument *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMDocument *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMDocument *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMDocument *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMDocument *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMDocument *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMDocument *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *get_doctype)(IXMLDOMDocument *This,IXMLDOMDocumentType **documentType);
	HRESULT (WINAPI *get_implementation)(IXMLDOMDocument *This,IXMLDOMImplementation **impl);
	HRESULT (WINAPI *get_documentElement)(IXMLDOMDocument *This,IXMLDOMElement **DOMElement);
	HRESULT (WINAPI *putref_documentElement)(IXMLDOMDocument *This,IXMLDOMElement *DOMElement);
	HRESULT (WINAPI *createElement)(IXMLDOMDocument *This,BSTR tagName,IXMLDOMElement **element);
	HRESULT (WINAPI *createDocumentFragment)(IXMLDOMDocument *This,IXMLDOMDocumentFragment **docFrag);
	HRESULT (WINAPI *createTextNode)(IXMLDOMDocument *This,BSTR data,IXMLDOMText **text);
	HRESULT (WINAPI *createComment)(IXMLDOMDocument *This,BSTR data,IXMLDOMComment **comment);
	HRESULT (WINAPI *createCDATASection)(IXMLDOMDocument *This,BSTR data,IXMLDOMCDATASection **cdata);
	HRESULT (WINAPI *createProcessingInstruction)(IXMLDOMDocument *This,BSTR target,BSTR data,IXMLDOMProcessingInstruction **pi);
	HRESULT (WINAPI *createAttribute)(IXMLDOMDocument *This,BSTR name,IXMLDOMAttribute **attribute);
	HRESULT (WINAPI *createEntityReference)(IXMLDOMDocument *This,BSTR name,IXMLDOMEntityReference **entityRef);
	HRESULT (WINAPI *getElementsByTagName)(IXMLDOMDocument *This,BSTR tagName,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *createNode)(IXMLDOMDocument *This,VARIANT Type,BSTR name,BSTR namespaceURI,IXMLDOMNode **node);
	HRESULT (WINAPI *nodeFromID)(IXMLDOMDocument *This,BSTR idString,IXMLDOMNode **node);
	HRESULT (WINAPI *load)(IXMLDOMDocument *This,VARIANT xmlSource,VARIANT_BOOL *isSuccessful);
	HRESULT (WINAPI *get_readyState)(IXMLDOMDocument *This,long *value);
	HRESULT (WINAPI *get_parseError)(IXMLDOMDocument *This,IXMLDOMParseError **errorObj);
	HRESULT (WINAPI *get_url)(IXMLDOMDocument *This,BSTR *urlString);
	HRESULT (WINAPI *get_async)(IXMLDOMDocument *This,VARIANT_BOOL *isAsync);
	HRESULT (WINAPI *put_async)(IXMLDOMDocument *This,VARIANT_BOOL isAsync);
	HRESULT (WINAPI *abort)(IXMLDOMDocument *This);
	HRESULT (WINAPI *loadXML)(IXMLDOMDocument *This,BSTR bstrXML,VARIANT_BOOL *isSuccessful);
	HRESULT (WINAPI *save)(IXMLDOMDocument *This,VARIANT destination);
	HRESULT (WINAPI *get_validateOnParse)(IXMLDOMDocument *This,VARIANT_BOOL *isValidating);
	HRESULT (WINAPI *put_validateOnParse)(IXMLDOMDocument *This,VARIANT_BOOL isValidating);
	HRESULT (WINAPI *get_resolveExternals)(IXMLDOMDocument *This,VARIANT_BOOL *isResolving);
	HRESULT (WINAPI *put_resolveExternals)(IXMLDOMDocument *This,VARIANT_BOOL isResolving);
	HRESULT (WINAPI *get_preserveWhiteSpace)(IXMLDOMDocument *This,VARIANT_BOOL *isPreserving);
	HRESULT (WINAPI *put_preserveWhiteSpace)(IXMLDOMDocument *This,VARIANT_BOOL isPreserving);
	HRESULT (WINAPI *put_onreadystatechange)(IXMLDOMDocument *This,VARIANT readystatechangeSink);
	HRESULT (WINAPI *put_ondataavailable)(IXMLDOMDocument *This,VARIANT ondataavailableSink);
	HRESULT (WINAPI *put_ontransformnode)(IXMLDOMDocument *This,VARIANT ontransformnodeSink);
      END_INTERFACE
    } IXMLDOMDocumentVtbl;
    struct IXMLDOMDocument {
      CONST_VTBL struct IXMLDOMDocumentVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMDocument_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMDocument_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMDocument_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMDocument_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMDocument_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMDocument_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMDocument_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMDocument_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMDocument_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMDocument_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMDocument_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMDocument_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMDocument_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMDocument_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMDocument_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMDocument_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMDocument_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMDocument_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMDocument_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMDocument_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMDocument_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMDocument_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMDocument_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMDocument_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMDocument_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMDocument_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMDocument_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMDocument_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMDocument_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMDocument_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMDocument_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMDocument_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMDocument_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMDocument_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMDocument_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMDocument_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMDocument_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMDocument_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMDocument_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMDocument_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMDocument_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMDocument_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMDocument_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXMLDOMDocument_get_doctype(This,documentType) (This)->lpVtbl->get_doctype(This,documentType)
#define IXMLDOMDocument_get_implementation(This,impl) (This)->lpVtbl->get_implementation(This,impl)
#define IXMLDOMDocument_get_documentElement(This,DOMElement) (This)->lpVtbl->get_documentElement(This,DOMElement)
#define IXMLDOMDocument_putref_documentElement(This,DOMElement) (This)->lpVtbl->putref_documentElement(This,DOMElement)
#define IXMLDOMDocument_createElement(This,tagName,element) (This)->lpVtbl->createElement(This,tagName,element)
#define IXMLDOMDocument_createDocumentFragment(This,docFrag) (This)->lpVtbl->createDocumentFragment(This,docFrag)
#define IXMLDOMDocument_createTextNode(This,data,text) (This)->lpVtbl->createTextNode(This,data,text)
#define IXMLDOMDocument_createComment(This,data,comment) (This)->lpVtbl->createComment(This,data,comment)
#define IXMLDOMDocument_createCDATASection(This,data,cdata) (This)->lpVtbl->createCDATASection(This,data,cdata)
#define IXMLDOMDocument_createProcessingInstruction(This,target,data,pi) (This)->lpVtbl->createProcessingInstruction(This,target,data,pi)
#define IXMLDOMDocument_createAttribute(This,name,attribute) (This)->lpVtbl->createAttribute(This,name,attribute)
#define IXMLDOMDocument_createEntityReference(This,name,entityRef) (This)->lpVtbl->createEntityReference(This,name,entityRef)
#define IXMLDOMDocument_getElementsByTagName(This,tagName,resultList) (This)->lpVtbl->getElementsByTagName(This,tagName,resultList)
#define IXMLDOMDocument_createNode(This,Type,name,namespaceURI,node) (This)->lpVtbl->createNode(This,Type,name,namespaceURI,node)
#define IXMLDOMDocument_nodeFromID(This,idString,node) (This)->lpVtbl->nodeFromID(This,idString,node)
#define IXMLDOMDocument_load(This,xmlSource,isSuccessful) (This)->lpVtbl->load(This,xmlSource,isSuccessful)
#define IXMLDOMDocument_get_readyState(This,value) (This)->lpVtbl->get_readyState(This,value)
#define IXMLDOMDocument_get_parseError(This,errorObj) (This)->lpVtbl->get_parseError(This,errorObj)
#define IXMLDOMDocument_get_url(This,urlString) (This)->lpVtbl->get_url(This,urlString)
#define IXMLDOMDocument_get_async(This,isAsync) (This)->lpVtbl->get_async(This,isAsync)
#define IXMLDOMDocument_put_async(This,isAsync) (This)->lpVtbl->put_async(This,isAsync)
#define IXMLDOMDocument_abort(This) (This)->lpVtbl->abort(This)
#define IXMLDOMDocument_loadXML(This,bstrXML,isSuccessful) (This)->lpVtbl->loadXML(This,bstrXML,isSuccessful)
#define IXMLDOMDocument_save(This,destination) (This)->lpVtbl->save(This,destination)
#define IXMLDOMDocument_get_validateOnParse(This,isValidating) (This)->lpVtbl->get_validateOnParse(This,isValidating)
#define IXMLDOMDocument_put_validateOnParse(This,isValidating) (This)->lpVtbl->put_validateOnParse(This,isValidating)
#define IXMLDOMDocument_get_resolveExternals(This,isResolving) (This)->lpVtbl->get_resolveExternals(This,isResolving)
#define IXMLDOMDocument_put_resolveExternals(This,isResolving) (This)->lpVtbl->put_resolveExternals(This,isResolving)
#define IXMLDOMDocument_get_preserveWhiteSpace(This,isPreserving) (This)->lpVtbl->get_preserveWhiteSpace(This,isPreserving)
#define IXMLDOMDocument_put_preserveWhiteSpace(This,isPreserving) (This)->lpVtbl->put_preserveWhiteSpace(This,isPreserving)
#define IXMLDOMDocument_put_onreadystatechange(This,readystatechangeSink) (This)->lpVtbl->put_onreadystatechange(This,readystatechangeSink)
#define IXMLDOMDocument_put_ondataavailable(This,ondataavailableSink) (This)->lpVtbl->put_ondataavailable(This,ondataavailableSink)
#define IXMLDOMDocument_put_ontransformnode(This,ontransformnodeSink) (This)->lpVtbl->put_ontransformnode(This,ontransformnodeSink)
#endif
#endif
    HRESULT WINAPI IXMLDOMDocument_get_doctype_Proxy(IXMLDOMDocument *This,IXMLDOMDocumentType **documentType);
    void __RPC_STUB IXMLDOMDocument_get_doctype_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_get_implementation_Proxy(IXMLDOMDocument *This,IXMLDOMImplementation **impl);
    void __RPC_STUB IXMLDOMDocument_get_implementation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_get_documentElement_Proxy(IXMLDOMDocument *This,IXMLDOMElement **DOMElement);
    void __RPC_STUB IXMLDOMDocument_get_documentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_putref_documentElement_Proxy(IXMLDOMDocument *This,IXMLDOMElement *DOMElement);
    void __RPC_STUB IXMLDOMDocument_putref_documentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_createElement_Proxy(IXMLDOMDocument *This,BSTR tagName,IXMLDOMElement **element);
    void __RPC_STUB IXMLDOMDocument_createElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_createDocumentFragment_Proxy(IXMLDOMDocument *This,IXMLDOMDocumentFragment **docFrag);
    void __RPC_STUB IXMLDOMDocument_createDocumentFragment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_createTextNode_Proxy(IXMLDOMDocument *This,BSTR data,IXMLDOMText **text);
    void __RPC_STUB IXMLDOMDocument_createTextNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_createComment_Proxy(IXMLDOMDocument *This,BSTR data,IXMLDOMComment **comment);
    void __RPC_STUB IXMLDOMDocument_createComment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_createCDATASection_Proxy(IXMLDOMDocument *This,BSTR data,IXMLDOMCDATASection **cdata);
    void __RPC_STUB IXMLDOMDocument_createCDATASection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_createProcessingInstruction_Proxy(IXMLDOMDocument *This,BSTR target,BSTR data,IXMLDOMProcessingInstruction **pi);
    void __RPC_STUB IXMLDOMDocument_createProcessingInstruction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_createAttribute_Proxy(IXMLDOMDocument *This,BSTR name,IXMLDOMAttribute **attribute);
    void __RPC_STUB IXMLDOMDocument_createAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_createEntityReference_Proxy(IXMLDOMDocument *This,BSTR name,IXMLDOMEntityReference **entityRef);
    void __RPC_STUB IXMLDOMDocument_createEntityReference_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_getElementsByTagName_Proxy(IXMLDOMDocument *This,BSTR tagName,IXMLDOMNodeList **resultList);
    void __RPC_STUB IXMLDOMDocument_getElementsByTagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_createNode_Proxy(IXMLDOMDocument *This,VARIANT Type,BSTR name,BSTR namespaceURI,IXMLDOMNode **node);
    void __RPC_STUB IXMLDOMDocument_createNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_nodeFromID_Proxy(IXMLDOMDocument *This,BSTR idString,IXMLDOMNode **node);
    void __RPC_STUB IXMLDOMDocument_nodeFromID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_load_Proxy(IXMLDOMDocument *This,VARIANT xmlSource,VARIANT_BOOL *isSuccessful);
    void __RPC_STUB IXMLDOMDocument_load_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_get_readyState_Proxy(IXMLDOMDocument *This,long *value);
    void __RPC_STUB IXMLDOMDocument_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_get_parseError_Proxy(IXMLDOMDocument *This,IXMLDOMParseError **errorObj);
    void __RPC_STUB IXMLDOMDocument_get_parseError_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_get_url_Proxy(IXMLDOMDocument *This,BSTR *urlString);
    void __RPC_STUB IXMLDOMDocument_get_url_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_get_async_Proxy(IXMLDOMDocument *This,VARIANT_BOOL *isAsync);
    void __RPC_STUB IXMLDOMDocument_get_async_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_put_async_Proxy(IXMLDOMDocument *This,VARIANT_BOOL isAsync);
    void __RPC_STUB IXMLDOMDocument_put_async_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_abort_Proxy(IXMLDOMDocument *This);
    void __RPC_STUB IXMLDOMDocument_abort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_loadXML_Proxy(IXMLDOMDocument *This,BSTR bstrXML,VARIANT_BOOL *isSuccessful);
    void __RPC_STUB IXMLDOMDocument_loadXML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_save_Proxy(IXMLDOMDocument *This,VARIANT destination);
    void __RPC_STUB IXMLDOMDocument_save_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_get_validateOnParse_Proxy(IXMLDOMDocument *This,VARIANT_BOOL *isValidating);
    void __RPC_STUB IXMLDOMDocument_get_validateOnParse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_put_validateOnParse_Proxy(IXMLDOMDocument *This,VARIANT_BOOL isValidating);
    void __RPC_STUB IXMLDOMDocument_put_validateOnParse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_get_resolveExternals_Proxy(IXMLDOMDocument *This,VARIANT_BOOL *isResolving);
    void __RPC_STUB IXMLDOMDocument_get_resolveExternals_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_put_resolveExternals_Proxy(IXMLDOMDocument *This,VARIANT_BOOL isResolving);
    void __RPC_STUB IXMLDOMDocument_put_resolveExternals_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_get_preserveWhiteSpace_Proxy(IXMLDOMDocument *This,VARIANT_BOOL *isPreserving);
    void __RPC_STUB IXMLDOMDocument_get_preserveWhiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_put_preserveWhiteSpace_Proxy(IXMLDOMDocument *This,VARIANT_BOOL isPreserving);
    void __RPC_STUB IXMLDOMDocument_put_preserveWhiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_put_onreadystatechange_Proxy(IXMLDOMDocument *This,VARIANT readystatechangeSink);
    void __RPC_STUB IXMLDOMDocument_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_put_ondataavailable_Proxy(IXMLDOMDocument *This,VARIANT ondataavailableSink);
    void __RPC_STUB IXMLDOMDocument_put_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument_put_ontransformnode_Proxy(IXMLDOMDocument *This,VARIANT ontransformnodeSink);
    void __RPC_STUB IXMLDOMDocument_put_ontransformnode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMDocument2_INTERFACE_DEFINED__
#define __IXMLDOMDocument2_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMDocument2;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMDocument2 : public IXMLDOMDocument {
    public:
      virtual HRESULT WINAPI get_namespaces(IXMLDOMSchemaCollection **namespaceCollection) = 0;
      virtual HRESULT WINAPI get_schemas(VARIANT *otherCollection) = 0;
      virtual HRESULT WINAPI putref_schemas(VARIANT otherCollection) = 0;
      virtual HRESULT WINAPI validate(IXMLDOMParseError **errorObj) = 0;
      virtual HRESULT WINAPI setProperty(BSTR name,VARIANT value) = 0;
      virtual HRESULT WINAPI getProperty(BSTR name,VARIANT *value) = 0;
    };
#else
    typedef struct IXMLDOMDocument2Vtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMDocument2 *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMDocument2 *This);
	ULONG (WINAPI *Release)(IXMLDOMDocument2 *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMDocument2 *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMDocument2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMDocument2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMDocument2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMDocument2 *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMDocument2 *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMDocument2 *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMDocument2 *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMDocument2 *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMDocument2 *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMDocument2 *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMDocument2 *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMDocument2 *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMDocument2 *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMDocument2 *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMDocument2 *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMDocument2 *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMDocument2 *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMDocument2 *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMDocument2 *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMDocument2 *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMDocument2 *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMDocument2 *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMDocument2 *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMDocument2 *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMDocument2 *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMDocument2 *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMDocument2 *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMDocument2 *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMDocument2 *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMDocument2 *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMDocument2 *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMDocument2 *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMDocument2 *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMDocument2 *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMDocument2 *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMDocument2 *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMDocument2 *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMDocument2 *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMDocument2 *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *get_doctype)(IXMLDOMDocument2 *This,IXMLDOMDocumentType **documentType);
	HRESULT (WINAPI *get_implementation)(IXMLDOMDocument2 *This,IXMLDOMImplementation **impl);
	HRESULT (WINAPI *get_documentElement)(IXMLDOMDocument2 *This,IXMLDOMElement **DOMElement);
	HRESULT (WINAPI *putref_documentElement)(IXMLDOMDocument2 *This,IXMLDOMElement *DOMElement);
	HRESULT (WINAPI *createElement)(IXMLDOMDocument2 *This,BSTR tagName,IXMLDOMElement **element);
	HRESULT (WINAPI *createDocumentFragment)(IXMLDOMDocument2 *This,IXMLDOMDocumentFragment **docFrag);
	HRESULT (WINAPI *createTextNode)(IXMLDOMDocument2 *This,BSTR data,IXMLDOMText **text);
	HRESULT (WINAPI *createComment)(IXMLDOMDocument2 *This,BSTR data,IXMLDOMComment **comment);
	HRESULT (WINAPI *createCDATASection)(IXMLDOMDocument2 *This,BSTR data,IXMLDOMCDATASection **cdata);
	HRESULT (WINAPI *createProcessingInstruction)(IXMLDOMDocument2 *This,BSTR target,BSTR data,IXMLDOMProcessingInstruction **pi);
	HRESULT (WINAPI *createAttribute)(IXMLDOMDocument2 *This,BSTR name,IXMLDOMAttribute **attribute);
	HRESULT (WINAPI *createEntityReference)(IXMLDOMDocument2 *This,BSTR name,IXMLDOMEntityReference **entityRef);
	HRESULT (WINAPI *getElementsByTagName)(IXMLDOMDocument2 *This,BSTR tagName,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *createNode)(IXMLDOMDocument2 *This,VARIANT Type,BSTR name,BSTR namespaceURI,IXMLDOMNode **node);
	HRESULT (WINAPI *nodeFromID)(IXMLDOMDocument2 *This,BSTR idString,IXMLDOMNode **node);
	HRESULT (WINAPI *load)(IXMLDOMDocument2 *This,VARIANT xmlSource,VARIANT_BOOL *isSuccessful);
	HRESULT (WINAPI *get_readyState)(IXMLDOMDocument2 *This,long *value);
	HRESULT (WINAPI *get_parseError)(IXMLDOMDocument2 *This,IXMLDOMParseError **errorObj);
	HRESULT (WINAPI *get_url)(IXMLDOMDocument2 *This,BSTR *urlString);
	HRESULT (WINAPI *get_async)(IXMLDOMDocument2 *This,VARIANT_BOOL *isAsync);
	HRESULT (WINAPI *put_async)(IXMLDOMDocument2 *This,VARIANT_BOOL isAsync);
	HRESULT (WINAPI *abort)(IXMLDOMDocument2 *This);
	HRESULT (WINAPI *loadXML)(IXMLDOMDocument2 *This,BSTR bstrXML,VARIANT_BOOL *isSuccessful);
	HRESULT (WINAPI *save)(IXMLDOMDocument2 *This,VARIANT destination);
	HRESULT (WINAPI *get_validateOnParse)(IXMLDOMDocument2 *This,VARIANT_BOOL *isValidating);
	HRESULT (WINAPI *put_validateOnParse)(IXMLDOMDocument2 *This,VARIANT_BOOL isValidating);
	HRESULT (WINAPI *get_resolveExternals)(IXMLDOMDocument2 *This,VARIANT_BOOL *isResolving);
	HRESULT (WINAPI *put_resolveExternals)(IXMLDOMDocument2 *This,VARIANT_BOOL isResolving);
	HRESULT (WINAPI *get_preserveWhiteSpace)(IXMLDOMDocument2 *This,VARIANT_BOOL *isPreserving);
	HRESULT (WINAPI *put_preserveWhiteSpace)(IXMLDOMDocument2 *This,VARIANT_BOOL isPreserving);
	HRESULT (WINAPI *put_onreadystatechange)(IXMLDOMDocument2 *This,VARIANT readystatechangeSink);
	HRESULT (WINAPI *put_ondataavailable)(IXMLDOMDocument2 *This,VARIANT ondataavailableSink);
	HRESULT (WINAPI *put_ontransformnode)(IXMLDOMDocument2 *This,VARIANT ontransformnodeSink);
	HRESULT (WINAPI *get_namespaces)(IXMLDOMDocument2 *This,IXMLDOMSchemaCollection **namespaceCollection);
	HRESULT (WINAPI *get_schemas)(IXMLDOMDocument2 *This,VARIANT *otherCollection);
	HRESULT (WINAPI *putref_schemas)(IXMLDOMDocument2 *This,VARIANT otherCollection);
	HRESULT (WINAPI *validate)(IXMLDOMDocument2 *This,IXMLDOMParseError **errorObj);
	HRESULT (WINAPI *setProperty)(IXMLDOMDocument2 *This,BSTR name,VARIANT value);
	HRESULT (WINAPI *getProperty)(IXMLDOMDocument2 *This,BSTR name,VARIANT *value);
      END_INTERFACE
    } IXMLDOMDocument2Vtbl;
    struct IXMLDOMDocument2 {
      CONST_VTBL struct IXMLDOMDocument2Vtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMDocument2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMDocument2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMDocument2_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMDocument2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMDocument2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMDocument2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMDocument2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMDocument2_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMDocument2_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMDocument2_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMDocument2_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMDocument2_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMDocument2_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMDocument2_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMDocument2_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMDocument2_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMDocument2_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMDocument2_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMDocument2_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMDocument2_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMDocument2_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMDocument2_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMDocument2_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMDocument2_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMDocument2_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMDocument2_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMDocument2_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMDocument2_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMDocument2_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMDocument2_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMDocument2_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMDocument2_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMDocument2_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMDocument2_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMDocument2_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMDocument2_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMDocument2_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMDocument2_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMDocument2_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMDocument2_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMDocument2_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMDocument2_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMDocument2_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXMLDOMDocument2_get_doctype(This,documentType) (This)->lpVtbl->get_doctype(This,documentType)
#define IXMLDOMDocument2_get_implementation(This,impl) (This)->lpVtbl->get_implementation(This,impl)
#define IXMLDOMDocument2_get_documentElement(This,DOMElement) (This)->lpVtbl->get_documentElement(This,DOMElement)
#define IXMLDOMDocument2_putref_documentElement(This,DOMElement) (This)->lpVtbl->putref_documentElement(This,DOMElement)
#define IXMLDOMDocument2_createElement(This,tagName,element) (This)->lpVtbl->createElement(This,tagName,element)
#define IXMLDOMDocument2_createDocumentFragment(This,docFrag) (This)->lpVtbl->createDocumentFragment(This,docFrag)
#define IXMLDOMDocument2_createTextNode(This,data,text) (This)->lpVtbl->createTextNode(This,data,text)
#define IXMLDOMDocument2_createComment(This,data,comment) (This)->lpVtbl->createComment(This,data,comment)
#define IXMLDOMDocument2_createCDATASection(This,data,cdata) (This)->lpVtbl->createCDATASection(This,data,cdata)
#define IXMLDOMDocument2_createProcessingInstruction(This,target,data,pi) (This)->lpVtbl->createProcessingInstruction(This,target,data,pi)
#define IXMLDOMDocument2_createAttribute(This,name,attribute) (This)->lpVtbl->createAttribute(This,name,attribute)
#define IXMLDOMDocument2_createEntityReference(This,name,entityRef) (This)->lpVtbl->createEntityReference(This,name,entityRef)
#define IXMLDOMDocument2_getElementsByTagName(This,tagName,resultList) (This)->lpVtbl->getElementsByTagName(This,tagName,resultList)
#define IXMLDOMDocument2_createNode(This,Type,name,namespaceURI,node) (This)->lpVtbl->createNode(This,Type,name,namespaceURI,node)
#define IXMLDOMDocument2_nodeFromID(This,idString,node) (This)->lpVtbl->nodeFromID(This,idString,node)
#define IXMLDOMDocument2_load(This,xmlSource,isSuccessful) (This)->lpVtbl->load(This,xmlSource,isSuccessful)
#define IXMLDOMDocument2_get_readyState(This,value) (This)->lpVtbl->get_readyState(This,value)
#define IXMLDOMDocument2_get_parseError(This,errorObj) (This)->lpVtbl->get_parseError(This,errorObj)
#define IXMLDOMDocument2_get_url(This,urlString) (This)->lpVtbl->get_url(This,urlString)
#define IXMLDOMDocument2_get_async(This,isAsync) (This)->lpVtbl->get_async(This,isAsync)
#define IXMLDOMDocument2_put_async(This,isAsync) (This)->lpVtbl->put_async(This,isAsync)
#define IXMLDOMDocument2_abort(This) (This)->lpVtbl->abort(This)
#define IXMLDOMDocument2_loadXML(This,bstrXML,isSuccessful) (This)->lpVtbl->loadXML(This,bstrXML,isSuccessful)
#define IXMLDOMDocument2_save(This,destination) (This)->lpVtbl->save(This,destination)
#define IXMLDOMDocument2_get_validateOnParse(This,isValidating) (This)->lpVtbl->get_validateOnParse(This,isValidating)
#define IXMLDOMDocument2_put_validateOnParse(This,isValidating) (This)->lpVtbl->put_validateOnParse(This,isValidating)
#define IXMLDOMDocument2_get_resolveExternals(This,isResolving) (This)->lpVtbl->get_resolveExternals(This,isResolving)
#define IXMLDOMDocument2_put_resolveExternals(This,isResolving) (This)->lpVtbl->put_resolveExternals(This,isResolving)
#define IXMLDOMDocument2_get_preserveWhiteSpace(This,isPreserving) (This)->lpVtbl->get_preserveWhiteSpace(This,isPreserving)
#define IXMLDOMDocument2_put_preserveWhiteSpace(This,isPreserving) (This)->lpVtbl->put_preserveWhiteSpace(This,isPreserving)
#define IXMLDOMDocument2_put_onreadystatechange(This,readystatechangeSink) (This)->lpVtbl->put_onreadystatechange(This,readystatechangeSink)
#define IXMLDOMDocument2_put_ondataavailable(This,ondataavailableSink) (This)->lpVtbl->put_ondataavailable(This,ondataavailableSink)
#define IXMLDOMDocument2_put_ontransformnode(This,ontransformnodeSink) (This)->lpVtbl->put_ontransformnode(This,ontransformnodeSink)
#define IXMLDOMDocument2_get_namespaces(This,namespaceCollection) (This)->lpVtbl->get_namespaces(This,namespaceCollection)
#define IXMLDOMDocument2_get_schemas(This,otherCollection) (This)->lpVtbl->get_schemas(This,otherCollection)
#define IXMLDOMDocument2_putref_schemas(This,otherCollection) (This)->lpVtbl->putref_schemas(This,otherCollection)
#define IXMLDOMDocument2_validate(This,errorObj) (This)->lpVtbl->validate(This,errorObj)
#define IXMLDOMDocument2_setProperty(This,name,value) (This)->lpVtbl->setProperty(This,name,value)
#define IXMLDOMDocument2_getProperty(This,name,value) (This)->lpVtbl->getProperty(This,name,value)
#endif
#endif
    HRESULT WINAPI IXMLDOMDocument2_get_namespaces_Proxy(IXMLDOMDocument2 *This,IXMLDOMSchemaCollection **namespaceCollection);
    void __RPC_STUB IXMLDOMDocument2_get_namespaces_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument2_get_schemas_Proxy(IXMLDOMDocument2 *This,VARIANT *otherCollection);
    void __RPC_STUB IXMLDOMDocument2_get_schemas_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument2_putref_schemas_Proxy(IXMLDOMDocument2 *This,VARIANT otherCollection);
    void __RPC_STUB IXMLDOMDocument2_putref_schemas_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument2_validate_Proxy(IXMLDOMDocument2 *This,IXMLDOMParseError **errorObj);
    void __RPC_STUB IXMLDOMDocument2_validate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument2_setProperty_Proxy(IXMLDOMDocument2 *This,BSTR name,VARIANT value);
    void __RPC_STUB IXMLDOMDocument2_setProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocument2_getProperty_Proxy(IXMLDOMDocument2 *This,BSTR name,VARIANT *value);
    void __RPC_STUB IXMLDOMDocument2_getProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMNodeList_INTERFACE_DEFINED__
#define __IXMLDOMNodeList_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMNodeList;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMNodeList : public IDispatch {
    public:
      virtual HRESULT WINAPI get_item(long index,IXMLDOMNode **listItem) = 0;
      virtual HRESULT WINAPI get_length(long *listLength) = 0;
      virtual HRESULT WINAPI nextNode(IXMLDOMNode **nextItem) = 0;
      virtual HRESULT WINAPI reset(void) = 0;
      virtual HRESULT WINAPI get__newEnum(IUnknown **ppUnk) = 0;
    };
#else
    typedef struct IXMLDOMNodeListVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMNodeList *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMNodeList *This);
	ULONG (WINAPI *Release)(IXMLDOMNodeList *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMNodeList *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMNodeList *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMNodeList *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMNodeList *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_item)(IXMLDOMNodeList *This,long index,IXMLDOMNode **listItem);
	HRESULT (WINAPI *get_length)(IXMLDOMNodeList *This,long *listLength);
	HRESULT (WINAPI *nextNode)(IXMLDOMNodeList *This,IXMLDOMNode **nextItem);
	HRESULT (WINAPI *reset)(IXMLDOMNodeList *This);
	HRESULT (WINAPI *get__newEnum)(IXMLDOMNodeList *This,IUnknown **ppUnk);
      END_INTERFACE
    } IXMLDOMNodeListVtbl;
    struct IXMLDOMNodeList {
      CONST_VTBL struct IXMLDOMNodeListVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMNodeList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMNodeList_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMNodeList_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMNodeList_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMNodeList_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMNodeList_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMNodeList_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMNodeList_get_item(This,index,listItem) (This)->lpVtbl->get_item(This,index,listItem)
#define IXMLDOMNodeList_get_length(This,listLength) (This)->lpVtbl->get_length(This,listLength)
#define IXMLDOMNodeList_nextNode(This,nextItem) (This)->lpVtbl->nextNode(This,nextItem)
#define IXMLDOMNodeList_reset(This) (This)->lpVtbl->reset(This)
#define IXMLDOMNodeList_get__newEnum(This,ppUnk) (This)->lpVtbl->get__newEnum(This,ppUnk)
#endif
#endif
    HRESULT WINAPI IXMLDOMNodeList_get_item_Proxy(IXMLDOMNodeList *This,long index,IXMLDOMNode **listItem);
    void __RPC_STUB IXMLDOMNodeList_get_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNodeList_get_length_Proxy(IXMLDOMNodeList *This,long *listLength);
    void __RPC_STUB IXMLDOMNodeList_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNodeList_nextNode_Proxy(IXMLDOMNodeList *This,IXMLDOMNode **nextItem);
    void __RPC_STUB IXMLDOMNodeList_nextNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNodeList_reset_Proxy(IXMLDOMNodeList *This);
    void __RPC_STUB IXMLDOMNodeList_reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNodeList_get__newEnum_Proxy(IXMLDOMNodeList *This,IUnknown **ppUnk);
    void __RPC_STUB IXMLDOMNodeList_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMNamedNodeMap_INTERFACE_DEFINED__
#define __IXMLDOMNamedNodeMap_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMNamedNodeMap;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMNamedNodeMap : public IDispatch {
    public:
      virtual HRESULT WINAPI getNamedItem(BSTR name,IXMLDOMNode **namedItem) = 0;
      virtual HRESULT WINAPI setNamedItem(IXMLDOMNode *newItem,IXMLDOMNode **nameItem) = 0;
      virtual HRESULT WINAPI removeNamedItem(BSTR name,IXMLDOMNode **namedItem) = 0;
      virtual HRESULT WINAPI get_item(long index,IXMLDOMNode **listItem) = 0;
      virtual HRESULT WINAPI get_length(long *listLength) = 0;
      virtual HRESULT WINAPI getQualifiedItem(BSTR baseName,BSTR namespaceURI,IXMLDOMNode **qualifiedItem) = 0;
      virtual HRESULT WINAPI removeQualifiedItem(BSTR baseName,BSTR namespaceURI,IXMLDOMNode **qualifiedItem) = 0;
      virtual HRESULT WINAPI nextNode(IXMLDOMNode **nextItem) = 0;
      virtual HRESULT WINAPI reset(void) = 0;
      virtual HRESULT WINAPI get__newEnum(IUnknown **ppUnk) = 0;
    };
#else
    typedef struct IXMLDOMNamedNodeMapVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMNamedNodeMap *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMNamedNodeMap *This);
	ULONG (WINAPI *Release)(IXMLDOMNamedNodeMap *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMNamedNodeMap *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMNamedNodeMap *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMNamedNodeMap *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMNamedNodeMap *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *getNamedItem)(IXMLDOMNamedNodeMap *This,BSTR name,IXMLDOMNode **namedItem);
	HRESULT (WINAPI *setNamedItem)(IXMLDOMNamedNodeMap *This,IXMLDOMNode *newItem,IXMLDOMNode **nameItem);
	HRESULT (WINAPI *removeNamedItem)(IXMLDOMNamedNodeMap *This,BSTR name,IXMLDOMNode **namedItem);
	HRESULT (WINAPI *get_item)(IXMLDOMNamedNodeMap *This,long index,IXMLDOMNode **listItem);
	HRESULT (WINAPI *get_length)(IXMLDOMNamedNodeMap *This,long *listLength);
	HRESULT (WINAPI *getQualifiedItem)(IXMLDOMNamedNodeMap *This,BSTR baseName,BSTR namespaceURI,IXMLDOMNode **qualifiedItem);
	HRESULT (WINAPI *removeQualifiedItem)(IXMLDOMNamedNodeMap *This,BSTR baseName,BSTR namespaceURI,IXMLDOMNode **qualifiedItem);
	HRESULT (WINAPI *nextNode)(IXMLDOMNamedNodeMap *This,IXMLDOMNode **nextItem);
	HRESULT (WINAPI *reset)(IXMLDOMNamedNodeMap *This);
	HRESULT (WINAPI *get__newEnum)(IXMLDOMNamedNodeMap *This,IUnknown **ppUnk);
      END_INTERFACE
    } IXMLDOMNamedNodeMapVtbl;
    struct IXMLDOMNamedNodeMap {
      CONST_VTBL struct IXMLDOMNamedNodeMapVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMNamedNodeMap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMNamedNodeMap_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMNamedNodeMap_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMNamedNodeMap_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMNamedNodeMap_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMNamedNodeMap_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMNamedNodeMap_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMNamedNodeMap_getNamedItem(This,name,namedItem) (This)->lpVtbl->getNamedItem(This,name,namedItem)
#define IXMLDOMNamedNodeMap_setNamedItem(This,newItem,nameItem) (This)->lpVtbl->setNamedItem(This,newItem,nameItem)
#define IXMLDOMNamedNodeMap_removeNamedItem(This,name,namedItem) (This)->lpVtbl->removeNamedItem(This,name,namedItem)
#define IXMLDOMNamedNodeMap_get_item(This,index,listItem) (This)->lpVtbl->get_item(This,index,listItem)
#define IXMLDOMNamedNodeMap_get_length(This,listLength) (This)->lpVtbl->get_length(This,listLength)
#define IXMLDOMNamedNodeMap_getQualifiedItem(This,baseName,namespaceURI,qualifiedItem) (This)->lpVtbl->getQualifiedItem(This,baseName,namespaceURI,qualifiedItem)
#define IXMLDOMNamedNodeMap_removeQualifiedItem(This,baseName,namespaceURI,qualifiedItem) (This)->lpVtbl->removeQualifiedItem(This,baseName,namespaceURI,qualifiedItem)
#define IXMLDOMNamedNodeMap_nextNode(This,nextItem) (This)->lpVtbl->nextNode(This,nextItem)
#define IXMLDOMNamedNodeMap_reset(This) (This)->lpVtbl->reset(This)
#define IXMLDOMNamedNodeMap_get__newEnum(This,ppUnk) (This)->lpVtbl->get__newEnum(This,ppUnk)
#endif
#endif
    HRESULT WINAPI IXMLDOMNamedNodeMap_getNamedItem_Proxy(IXMLDOMNamedNodeMap *This,BSTR name,IXMLDOMNode **namedItem);
    void __RPC_STUB IXMLDOMNamedNodeMap_getNamedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNamedNodeMap_setNamedItem_Proxy(IXMLDOMNamedNodeMap *This,IXMLDOMNode *newItem,IXMLDOMNode **nameItem);
    void __RPC_STUB IXMLDOMNamedNodeMap_setNamedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNamedNodeMap_removeNamedItem_Proxy(IXMLDOMNamedNodeMap *This,BSTR name,IXMLDOMNode **namedItem);
    void __RPC_STUB IXMLDOMNamedNodeMap_removeNamedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNamedNodeMap_get_item_Proxy(IXMLDOMNamedNodeMap *This,long index,IXMLDOMNode **listItem);
    void __RPC_STUB IXMLDOMNamedNodeMap_get_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNamedNodeMap_get_length_Proxy(IXMLDOMNamedNodeMap *This,long *listLength);
    void __RPC_STUB IXMLDOMNamedNodeMap_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNamedNodeMap_getQualifiedItem_Proxy(IXMLDOMNamedNodeMap *This,BSTR baseName,BSTR namespaceURI,IXMLDOMNode **qualifiedItem);
    void __RPC_STUB IXMLDOMNamedNodeMap_getQualifiedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNamedNodeMap_removeQualifiedItem_Proxy(IXMLDOMNamedNodeMap *This,BSTR baseName,BSTR namespaceURI,IXMLDOMNode **qualifiedItem);
    void __RPC_STUB IXMLDOMNamedNodeMap_removeQualifiedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNamedNodeMap_nextNode_Proxy(IXMLDOMNamedNodeMap *This,IXMLDOMNode **nextItem);
    void __RPC_STUB IXMLDOMNamedNodeMap_nextNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNamedNodeMap_reset_Proxy(IXMLDOMNamedNodeMap *This);
    void __RPC_STUB IXMLDOMNamedNodeMap_reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNamedNodeMap_get__newEnum_Proxy(IXMLDOMNamedNodeMap *This,IUnknown **ppUnk);
    void __RPC_STUB IXMLDOMNamedNodeMap_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMCharacterData_INTERFACE_DEFINED__
#define __IXMLDOMCharacterData_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMCharacterData;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMCharacterData : public IXMLDOMNode {
    public:
      virtual HRESULT WINAPI get_data(BSTR *data) = 0;
      virtual HRESULT WINAPI put_data(BSTR data) = 0;
      virtual HRESULT WINAPI get_length(long *dataLength) = 0;
      virtual HRESULT WINAPI substringData(long offset,long count,BSTR *data) = 0;
      virtual HRESULT WINAPI appendData(BSTR data) = 0;
      virtual HRESULT WINAPI insertData(long offset,BSTR data) = 0;
      virtual HRESULT WINAPI deleteData(long offset,long count) = 0;
      virtual HRESULT WINAPI replaceData(long offset,long count,BSTR data) = 0;
    };
#else
    typedef struct IXMLDOMCharacterDataVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMCharacterData *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMCharacterData *This);
	ULONG (WINAPI *Release)(IXMLDOMCharacterData *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMCharacterData *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMCharacterData *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMCharacterData *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMCharacterData *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMCharacterData *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMCharacterData *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMCharacterData *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMCharacterData *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMCharacterData *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMCharacterData *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMCharacterData *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMCharacterData *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMCharacterData *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMCharacterData *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMCharacterData *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMCharacterData *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMCharacterData *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMCharacterData *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMCharacterData *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMCharacterData *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMCharacterData *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMCharacterData *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMCharacterData *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMCharacterData *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMCharacterData *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMCharacterData *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMCharacterData *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMCharacterData *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMCharacterData *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMCharacterData *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMCharacterData *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMCharacterData *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMCharacterData *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMCharacterData *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMCharacterData *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMCharacterData *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMCharacterData *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMCharacterData *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMCharacterData *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMCharacterData *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *get_data)(IXMLDOMCharacterData *This,BSTR *data);
	HRESULT (WINAPI *put_data)(IXMLDOMCharacterData *This,BSTR data);
	HRESULT (WINAPI *get_length)(IXMLDOMCharacterData *This,long *dataLength);
	HRESULT (WINAPI *substringData)(IXMLDOMCharacterData *This,long offset,long count,BSTR *data);
	HRESULT (WINAPI *appendData)(IXMLDOMCharacterData *This,BSTR data);
	HRESULT (WINAPI *insertData)(IXMLDOMCharacterData *This,long offset,BSTR data);
	HRESULT (WINAPI *deleteData)(IXMLDOMCharacterData *This,long offset,long count);
	HRESULT (WINAPI *replaceData)(IXMLDOMCharacterData *This,long offset,long count,BSTR data);
      END_INTERFACE
    } IXMLDOMCharacterDataVtbl;
    struct IXMLDOMCharacterData {
      CONST_VTBL struct IXMLDOMCharacterDataVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMCharacterData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMCharacterData_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMCharacterData_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMCharacterData_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMCharacterData_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMCharacterData_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMCharacterData_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMCharacterData_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMCharacterData_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMCharacterData_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMCharacterData_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMCharacterData_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMCharacterData_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMCharacterData_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMCharacterData_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMCharacterData_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMCharacterData_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMCharacterData_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMCharacterData_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMCharacterData_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMCharacterData_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMCharacterData_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMCharacterData_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMCharacterData_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMCharacterData_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMCharacterData_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMCharacterData_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMCharacterData_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMCharacterData_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMCharacterData_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMCharacterData_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMCharacterData_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMCharacterData_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMCharacterData_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMCharacterData_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMCharacterData_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMCharacterData_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMCharacterData_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMCharacterData_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMCharacterData_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMCharacterData_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMCharacterData_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMCharacterData_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXMLDOMCharacterData_get_data(This,data) (This)->lpVtbl->get_data(This,data)
#define IXMLDOMCharacterData_put_data(This,data) (This)->lpVtbl->put_data(This,data)
#define IXMLDOMCharacterData_get_length(This,dataLength) (This)->lpVtbl->get_length(This,dataLength)
#define IXMLDOMCharacterData_substringData(This,offset,count,data) (This)->lpVtbl->substringData(This,offset,count,data)
#define IXMLDOMCharacterData_appendData(This,data) (This)->lpVtbl->appendData(This,data)
#define IXMLDOMCharacterData_insertData(This,offset,data) (This)->lpVtbl->insertData(This,offset,data)
#define IXMLDOMCharacterData_deleteData(This,offset,count) (This)->lpVtbl->deleteData(This,offset,count)
#define IXMLDOMCharacterData_replaceData(This,offset,count,data) (This)->lpVtbl->replaceData(This,offset,count,data)
#endif
#endif
    HRESULT WINAPI IXMLDOMCharacterData_get_data_Proxy(IXMLDOMCharacterData *This,BSTR *data);
    void __RPC_STUB IXMLDOMCharacterData_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMCharacterData_put_data_Proxy(IXMLDOMCharacterData *This,BSTR data);
    void __RPC_STUB IXMLDOMCharacterData_put_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMCharacterData_get_length_Proxy(IXMLDOMCharacterData *This,long *dataLength);
    void __RPC_STUB IXMLDOMCharacterData_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMCharacterData_substringData_Proxy(IXMLDOMCharacterData *This,long offset,long count,BSTR *data);
    void __RPC_STUB IXMLDOMCharacterData_substringData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMCharacterData_appendData_Proxy(IXMLDOMCharacterData *This,BSTR data);
    void __RPC_STUB IXMLDOMCharacterData_appendData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMCharacterData_insertData_Proxy(IXMLDOMCharacterData *This,long offset,BSTR data);
    void __RPC_STUB IXMLDOMCharacterData_insertData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMCharacterData_deleteData_Proxy(IXMLDOMCharacterData *This,long offset,long count);
    void __RPC_STUB IXMLDOMCharacterData_deleteData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMCharacterData_replaceData_Proxy(IXMLDOMCharacterData *This,long offset,long count,BSTR data);
    void __RPC_STUB IXMLDOMCharacterData_replaceData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMAttribute_INTERFACE_DEFINED__
#define __IXMLDOMAttribute_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMAttribute;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMAttribute : public IXMLDOMNode {
    public:
      virtual HRESULT WINAPI get_name(BSTR *attributeName) = 0;
      virtual HRESULT WINAPI get_value(VARIANT *attributeValue) = 0;
      virtual HRESULT WINAPI put_value(VARIANT attributeValue) = 0;
    };
#else
    typedef struct IXMLDOMAttributeVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMAttribute *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMAttribute *This);
	ULONG (WINAPI *Release)(IXMLDOMAttribute *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMAttribute *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMAttribute *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMAttribute *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMAttribute *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMAttribute *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMAttribute *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMAttribute *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMAttribute *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMAttribute *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMAttribute *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMAttribute *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMAttribute *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMAttribute *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMAttribute *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMAttribute *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMAttribute *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMAttribute *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMAttribute *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMAttribute *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMAttribute *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMAttribute *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMAttribute *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMAttribute *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMAttribute *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMAttribute *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMAttribute *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMAttribute *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMAttribute *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMAttribute *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMAttribute *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMAttribute *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMAttribute *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMAttribute *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMAttribute *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMAttribute *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMAttribute *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMAttribute *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMAttribute *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMAttribute *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMAttribute *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *get_name)(IXMLDOMAttribute *This,BSTR *attributeName);
	HRESULT (WINAPI *get_value)(IXMLDOMAttribute *This,VARIANT *attributeValue);
	HRESULT (WINAPI *put_value)(IXMLDOMAttribute *This,VARIANT attributeValue);
      END_INTERFACE
    } IXMLDOMAttributeVtbl;
    struct IXMLDOMAttribute {
      CONST_VTBL struct IXMLDOMAttributeVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMAttribute_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMAttribute_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMAttribute_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMAttribute_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMAttribute_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMAttribute_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMAttribute_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMAttribute_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMAttribute_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMAttribute_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMAttribute_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMAttribute_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMAttribute_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMAttribute_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMAttribute_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMAttribute_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMAttribute_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMAttribute_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMAttribute_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMAttribute_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMAttribute_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMAttribute_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMAttribute_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMAttribute_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMAttribute_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMAttribute_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMAttribute_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMAttribute_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMAttribute_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMAttribute_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMAttribute_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMAttribute_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMAttribute_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMAttribute_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMAttribute_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMAttribute_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMAttribute_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMAttribute_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMAttribute_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMAttribute_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMAttribute_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMAttribute_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMAttribute_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXMLDOMAttribute_get_name(This,attributeName) (This)->lpVtbl->get_name(This,attributeName)
#define IXMLDOMAttribute_get_value(This,attributeValue) (This)->lpVtbl->get_value(This,attributeValue)
#define IXMLDOMAttribute_put_value(This,attributeValue) (This)->lpVtbl->put_value(This,attributeValue)
#endif
#endif
    HRESULT WINAPI IXMLDOMAttribute_get_name_Proxy(IXMLDOMAttribute *This,BSTR *attributeName);
    void __RPC_STUB IXMLDOMAttribute_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMAttribute_get_value_Proxy(IXMLDOMAttribute *This,VARIANT *attributeValue);
    void __RPC_STUB IXMLDOMAttribute_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMAttribute_put_value_Proxy(IXMLDOMAttribute *This,VARIANT attributeValue);
    void __RPC_STUB IXMLDOMAttribute_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMElement_INTERFACE_DEFINED__
#define __IXMLDOMElement_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMElement : public IXMLDOMNode {
    public:
      virtual HRESULT WINAPI get_tagName(BSTR *tagName) = 0;
      virtual HRESULT WINAPI getAttribute(BSTR name,VARIANT *value) = 0;
      virtual HRESULT WINAPI setAttribute(BSTR name,VARIANT value) = 0;
      virtual HRESULT WINAPI removeAttribute(BSTR name) = 0;
      virtual HRESULT WINAPI getAttributeNode(BSTR name,IXMLDOMAttribute **attributeNode) = 0;
      virtual HRESULT WINAPI setAttributeNode(IXMLDOMAttribute *DOMAttribute,IXMLDOMAttribute **attributeNode) = 0;
      virtual HRESULT WINAPI removeAttributeNode(IXMLDOMAttribute *DOMAttribute,IXMLDOMAttribute **attributeNode) = 0;
      virtual HRESULT WINAPI getElementsByTagName(BSTR tagName,IXMLDOMNodeList **resultList) = 0;
      virtual HRESULT WINAPI normalize(void) = 0;
    };
#else
    typedef struct IXMLDOMElementVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMElement *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMElement *This);
	ULONG (WINAPI *Release)(IXMLDOMElement *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMElement *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMElement *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMElement *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMElement *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMElement *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMElement *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMElement *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMElement *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMElement *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMElement *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMElement *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMElement *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMElement *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMElement *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMElement *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMElement *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMElement *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMElement *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMElement *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMElement *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMElement *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMElement *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMElement *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMElement *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMElement *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMElement *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMElement *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMElement *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMElement *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMElement *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMElement *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMElement *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMElement *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMElement *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMElement *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMElement *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMElement *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *get_tagName)(IXMLDOMElement *This,BSTR *tagName);
	HRESULT (WINAPI *getAttribute)(IXMLDOMElement *This,BSTR name,VARIANT *value);
	HRESULT (WINAPI *setAttribute)(IXMLDOMElement *This,BSTR name,VARIANT value);
	HRESULT (WINAPI *removeAttribute)(IXMLDOMElement *This,BSTR name);
	HRESULT (WINAPI *getAttributeNode)(IXMLDOMElement *This,BSTR name,IXMLDOMAttribute **attributeNode);
	HRESULT (WINAPI *setAttributeNode)(IXMLDOMElement *This,IXMLDOMAttribute *DOMAttribute,IXMLDOMAttribute **attributeNode);
	HRESULT (WINAPI *removeAttributeNode)(IXMLDOMElement *This,IXMLDOMAttribute *DOMAttribute,IXMLDOMAttribute **attributeNode);
	HRESULT (WINAPI *getElementsByTagName)(IXMLDOMElement *This,BSTR tagName,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *normalize)(IXMLDOMElement *This);
      END_INTERFACE
    } IXMLDOMElementVtbl;
    struct IXMLDOMElement {
      CONST_VTBL struct IXMLDOMElementVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMElement_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMElement_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMElement_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMElement_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMElement_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMElement_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMElement_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMElement_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMElement_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMElement_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMElement_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMElement_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMElement_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMElement_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMElement_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMElement_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMElement_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMElement_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMElement_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMElement_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMElement_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMElement_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMElement_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMElement_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMElement_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMElement_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMElement_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMElement_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMElement_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMElement_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMElement_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMElement_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMElement_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMElement_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMElement_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMElement_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMElement_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXMLDOMElement_get_tagName(This,tagName) (This)->lpVtbl->get_tagName(This,tagName)
#define IXMLDOMElement_getAttribute(This,name,value) (This)->lpVtbl->getAttribute(This,name,value)
#define IXMLDOMElement_setAttribute(This,name,value) (This)->lpVtbl->setAttribute(This,name,value)
#define IXMLDOMElement_removeAttribute(This,name) (This)->lpVtbl->removeAttribute(This,name)
#define IXMLDOMElement_getAttributeNode(This,name,attributeNode) (This)->lpVtbl->getAttributeNode(This,name,attributeNode)
#define IXMLDOMElement_setAttributeNode(This,DOMAttribute,attributeNode) (This)->lpVtbl->setAttributeNode(This,DOMAttribute,attributeNode)
#define IXMLDOMElement_removeAttributeNode(This,DOMAttribute,attributeNode) (This)->lpVtbl->removeAttributeNode(This,DOMAttribute,attributeNode)
#define IXMLDOMElement_getElementsByTagName(This,tagName,resultList) (This)->lpVtbl->getElementsByTagName(This,tagName,resultList)
#define IXMLDOMElement_normalize(This) (This)->lpVtbl->normalize(This)
#endif
#endif
    HRESULT WINAPI IXMLDOMElement_get_tagName_Proxy(IXMLDOMElement *This,BSTR *tagName);
    void __RPC_STUB IXMLDOMElement_get_tagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMElement_getAttribute_Proxy(IXMLDOMElement *This,BSTR name,VARIANT *value);
    void __RPC_STUB IXMLDOMElement_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMElement_setAttribute_Proxy(IXMLDOMElement *This,BSTR name,VARIANT value);
    void __RPC_STUB IXMLDOMElement_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMElement_removeAttribute_Proxy(IXMLDOMElement *This,BSTR name);
    void __RPC_STUB IXMLDOMElement_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMElement_getAttributeNode_Proxy(IXMLDOMElement *This,BSTR name,IXMLDOMAttribute **attributeNode);
    void __RPC_STUB IXMLDOMElement_getAttributeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMElement_setAttributeNode_Proxy(IXMLDOMElement *This,IXMLDOMAttribute *DOMAttribute,IXMLDOMAttribute **attributeNode);
    void __RPC_STUB IXMLDOMElement_setAttributeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMElement_removeAttributeNode_Proxy(IXMLDOMElement *This,IXMLDOMAttribute *DOMAttribute,IXMLDOMAttribute **attributeNode);
    void __RPC_STUB IXMLDOMElement_removeAttributeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMElement_getElementsByTagName_Proxy(IXMLDOMElement *This,BSTR tagName,IXMLDOMNodeList **resultList);
    void __RPC_STUB IXMLDOMElement_getElementsByTagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMElement_normalize_Proxy(IXMLDOMElement *This);
    void __RPC_STUB IXMLDOMElement_normalize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMText_INTERFACE_DEFINED__
#define __IXMLDOMText_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMText;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMText : public IXMLDOMCharacterData {
    public:
      virtual HRESULT WINAPI splitText(long offset,IXMLDOMText **rightHandTextNode) = 0;
    };
#else
    typedef struct IXMLDOMTextVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMText *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMText *This);
	ULONG (WINAPI *Release)(IXMLDOMText *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMText *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMText *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMText *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMText *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMText *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMText *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMText *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMText *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMText *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMText *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMText *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMText *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMText *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMText *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMText *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMText *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMText *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMText *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMText *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMText *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMText *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMText *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMText *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMText *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMText *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMText *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMText *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMText *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMText *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMText *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMText *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMText *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMText *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMText *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMText *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMText *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMText *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMText *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMText *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMText *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *get_data)(IXMLDOMText *This,BSTR *data);
	HRESULT (WINAPI *put_data)(IXMLDOMText *This,BSTR data);
	HRESULT (WINAPI *get_length)(IXMLDOMText *This,long *dataLength);
	HRESULT (WINAPI *substringData)(IXMLDOMText *This,long offset,long count,BSTR *data);
	HRESULT (WINAPI *appendData)(IXMLDOMText *This,BSTR data);
	HRESULT (WINAPI *insertData)(IXMLDOMText *This,long offset,BSTR data);
	HRESULT (WINAPI *deleteData)(IXMLDOMText *This,long offset,long count);
	HRESULT (WINAPI *replaceData)(IXMLDOMText *This,long offset,long count,BSTR data);
	HRESULT (WINAPI *splitText)(IXMLDOMText *This,long offset,IXMLDOMText **rightHandTextNode);
      END_INTERFACE
    } IXMLDOMTextVtbl;
    struct IXMLDOMText {
      CONST_VTBL struct IXMLDOMTextVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMText_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMText_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMText_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMText_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMText_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMText_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMText_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMText_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMText_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMText_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMText_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMText_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMText_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMText_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMText_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMText_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMText_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMText_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMText_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMText_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMText_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMText_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMText_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMText_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMText_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMText_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMText_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMText_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMText_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMText_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMText_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMText_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMText_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMText_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMText_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMText_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMText_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMText_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMText_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMText_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMText_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMText_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMText_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXMLDOMText_get_data(This,data) (This)->lpVtbl->get_data(This,data)
#define IXMLDOMText_put_data(This,data) (This)->lpVtbl->put_data(This,data)
#define IXMLDOMText_get_length(This,dataLength) (This)->lpVtbl->get_length(This,dataLength)
#define IXMLDOMText_substringData(This,offset,count,data) (This)->lpVtbl->substringData(This,offset,count,data)
#define IXMLDOMText_appendData(This,data) (This)->lpVtbl->appendData(This,data)
#define IXMLDOMText_insertData(This,offset,data) (This)->lpVtbl->insertData(This,offset,data)
#define IXMLDOMText_deleteData(This,offset,count) (This)->lpVtbl->deleteData(This,offset,count)
#define IXMLDOMText_replaceData(This,offset,count,data) (This)->lpVtbl->replaceData(This,offset,count,data)
#define IXMLDOMText_splitText(This,offset,rightHandTextNode) (This)->lpVtbl->splitText(This,offset,rightHandTextNode)
#endif
#endif
    HRESULT WINAPI IXMLDOMText_splitText_Proxy(IXMLDOMText *This,long offset,IXMLDOMText **rightHandTextNode);
    void __RPC_STUB IXMLDOMText_splitText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMComment_INTERFACE_DEFINED__
#define __IXMLDOMComment_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMComment;
#if defined(__cplusplus) && !defined(CINTERFACE)

    struct IXMLDOMComment : public IXMLDOMCharacterData {
    };
#else
    typedef struct IXMLDOMCommentVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMComment *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMComment *This);
	ULONG (WINAPI *Release)(IXMLDOMComment *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMComment *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMComment *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMComment *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMComment *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMComment *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMComment *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMComment *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMComment *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMComment *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMComment *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMComment *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMComment *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMComment *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMComment *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMComment *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMComment *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMComment *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMComment *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMComment *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMComment *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMComment *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMComment *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMComment *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMComment *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMComment *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMComment *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMComment *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMComment *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMComment *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMComment *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMComment *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMComment *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMComment *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMComment *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMComment *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMComment *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMComment *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMComment *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMComment *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMComment *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *get_data)(IXMLDOMComment *This,BSTR *data);
	HRESULT (WINAPI *put_data)(IXMLDOMComment *This,BSTR data);
	HRESULT (WINAPI *get_length)(IXMLDOMComment *This,long *dataLength);
	HRESULT (WINAPI *substringData)(IXMLDOMComment *This,long offset,long count,BSTR *data);
	HRESULT (WINAPI *appendData)(IXMLDOMComment *This,BSTR data);
	HRESULT (WINAPI *insertData)(IXMLDOMComment *This,long offset,BSTR data);
	HRESULT (WINAPI *deleteData)(IXMLDOMComment *This,long offset,long count);
	HRESULT (WINAPI *replaceData)(IXMLDOMComment *This,long offset,long count,BSTR data);
      END_INTERFACE
    } IXMLDOMCommentVtbl;
    struct IXMLDOMComment {
      CONST_VTBL struct IXMLDOMCommentVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMComment_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMComment_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMComment_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMComment_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMComment_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMComment_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMComment_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMComment_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMComment_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMComment_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMComment_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMComment_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMComment_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMComment_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMComment_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMComment_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMComment_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMComment_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMComment_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMComment_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMComment_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMComment_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMComment_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMComment_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMComment_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMComment_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMComment_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMComment_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMComment_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMComment_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMComment_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMComment_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMComment_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMComment_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMComment_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMComment_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMComment_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMComment_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMComment_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMComment_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMComment_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMComment_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMComment_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXMLDOMComment_get_data(This,data) (This)->lpVtbl->get_data(This,data)
#define IXMLDOMComment_put_data(This,data) (This)->lpVtbl->put_data(This,data)
#define IXMLDOMComment_get_length(This,dataLength) (This)->lpVtbl->get_length(This,dataLength)
#define IXMLDOMComment_substringData(This,offset,count,data) (This)->lpVtbl->substringData(This,offset,count,data)
#define IXMLDOMComment_appendData(This,data) (This)->lpVtbl->appendData(This,data)
#define IXMLDOMComment_insertData(This,offset,data) (This)->lpVtbl->insertData(This,offset,data)
#define IXMLDOMComment_deleteData(This,offset,count) (This)->lpVtbl->deleteData(This,offset,count)
#define IXMLDOMComment_replaceData(This,offset,count,data) (This)->lpVtbl->replaceData(This,offset,count,data)
#endif
#endif
#endif

#ifndef __IXMLDOMProcessingInstruction_INTERFACE_DEFINED__
#define __IXMLDOMProcessingInstruction_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMProcessingInstruction;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMProcessingInstruction : public IXMLDOMNode {
    public:
      virtual HRESULT WINAPI get_target(BSTR *name) = 0;
      virtual HRESULT WINAPI get_data(BSTR *value) = 0;
      virtual HRESULT WINAPI put_data(BSTR value) = 0;
    };
#else
    typedef struct IXMLDOMProcessingInstructionVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMProcessingInstruction *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMProcessingInstruction *This);
	ULONG (WINAPI *Release)(IXMLDOMProcessingInstruction *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMProcessingInstruction *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMProcessingInstruction *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMProcessingInstruction *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMProcessingInstruction *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMProcessingInstruction *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMProcessingInstruction *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMProcessingInstruction *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMProcessingInstruction *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMProcessingInstruction *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMProcessingInstruction *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMProcessingInstruction *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMProcessingInstruction *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMProcessingInstruction *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMProcessingInstruction *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMProcessingInstruction *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMProcessingInstruction *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMProcessingInstruction *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMProcessingInstruction *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMProcessingInstruction *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMProcessingInstruction *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMProcessingInstruction *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMProcessingInstruction *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMProcessingInstruction *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMProcessingInstruction *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMProcessingInstruction *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMProcessingInstruction *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMProcessingInstruction *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMProcessingInstruction *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMProcessingInstruction *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMProcessingInstruction *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMProcessingInstruction *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMProcessingInstruction *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMProcessingInstruction *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMProcessingInstruction *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMProcessingInstruction *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMProcessingInstruction *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMProcessingInstruction *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMProcessingInstruction *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMProcessingInstruction *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMProcessingInstruction *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *get_target)(IXMLDOMProcessingInstruction *This,BSTR *name);
	HRESULT (WINAPI *get_data)(IXMLDOMProcessingInstruction *This,BSTR *value);
	HRESULT (WINAPI *put_data)(IXMLDOMProcessingInstruction *This,BSTR value);
      END_INTERFACE
    } IXMLDOMProcessingInstructionVtbl;
    struct IXMLDOMProcessingInstruction {
      CONST_VTBL struct IXMLDOMProcessingInstructionVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMProcessingInstruction_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMProcessingInstruction_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMProcessingInstruction_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMProcessingInstruction_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMProcessingInstruction_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMProcessingInstruction_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMProcessingInstruction_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMProcessingInstruction_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMProcessingInstruction_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMProcessingInstruction_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMProcessingInstruction_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMProcessingInstruction_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMProcessingInstruction_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMProcessingInstruction_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMProcessingInstruction_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMProcessingInstruction_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMProcessingInstruction_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMProcessingInstruction_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMProcessingInstruction_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMProcessingInstruction_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMProcessingInstruction_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMProcessingInstruction_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMProcessingInstruction_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMProcessingInstruction_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMProcessingInstruction_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMProcessingInstruction_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMProcessingInstruction_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMProcessingInstruction_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMProcessingInstruction_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMProcessingInstruction_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMProcessingInstruction_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMProcessingInstruction_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMProcessingInstruction_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMProcessingInstruction_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMProcessingInstruction_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMProcessingInstruction_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMProcessingInstruction_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMProcessingInstruction_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMProcessingInstruction_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMProcessingInstruction_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMProcessingInstruction_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMProcessingInstruction_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMProcessingInstruction_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXMLDOMProcessingInstruction_get_target(This,name) (This)->lpVtbl->get_target(This,name)
#define IXMLDOMProcessingInstruction_get_data(This,value) (This)->lpVtbl->get_data(This,value)
#define IXMLDOMProcessingInstruction_put_data(This,value) (This)->lpVtbl->put_data(This,value)
#endif
#endif
    HRESULT WINAPI IXMLDOMProcessingInstruction_get_target_Proxy(IXMLDOMProcessingInstruction *This,BSTR *name);
    void __RPC_STUB IXMLDOMProcessingInstruction_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMProcessingInstruction_get_data_Proxy(IXMLDOMProcessingInstruction *This,BSTR *value);
    void __RPC_STUB IXMLDOMProcessingInstruction_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMProcessingInstruction_put_data_Proxy(IXMLDOMProcessingInstruction *This,BSTR value);
    void __RPC_STUB IXMLDOMProcessingInstruction_put_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMCDATASection_INTERFACE_DEFINED__
#define __IXMLDOMCDATASection_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMCDATASection;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMCDATASection : public IXMLDOMText {
    };
#else
    typedef struct IXMLDOMCDATASectionVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMCDATASection *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMCDATASection *This);
	ULONG (WINAPI *Release)(IXMLDOMCDATASection *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMCDATASection *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMCDATASection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMCDATASection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMCDATASection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMCDATASection *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMCDATASection *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMCDATASection *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMCDATASection *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMCDATASection *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMCDATASection *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMCDATASection *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMCDATASection *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMCDATASection *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMCDATASection *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMCDATASection *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMCDATASection *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMCDATASection *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMCDATASection *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMCDATASection *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMCDATASection *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMCDATASection *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMCDATASection *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMCDATASection *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMCDATASection *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMCDATASection *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMCDATASection *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMCDATASection *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMCDATASection *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMCDATASection *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMCDATASection *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMCDATASection *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMCDATASection *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMCDATASection *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMCDATASection *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMCDATASection *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMCDATASection *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMCDATASection *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMCDATASection *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMCDATASection *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMCDATASection *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *get_data)(IXMLDOMCDATASection *This,BSTR *data);
	HRESULT (WINAPI *put_data)(IXMLDOMCDATASection *This,BSTR data);
	HRESULT (WINAPI *get_length)(IXMLDOMCDATASection *This,long *dataLength);
	HRESULT (WINAPI *substringData)(IXMLDOMCDATASection *This,long offset,long count,BSTR *data);
	HRESULT (WINAPI *appendData)(IXMLDOMCDATASection *This,BSTR data);
	HRESULT (WINAPI *insertData)(IXMLDOMCDATASection *This,long offset,BSTR data);
	HRESULT (WINAPI *deleteData)(IXMLDOMCDATASection *This,long offset,long count);
	HRESULT (WINAPI *replaceData)(IXMLDOMCDATASection *This,long offset,long count,BSTR data);
	HRESULT (WINAPI *splitText)(IXMLDOMCDATASection *This,long offset,IXMLDOMText **rightHandTextNode);
      END_INTERFACE
    } IXMLDOMCDATASectionVtbl;
    struct IXMLDOMCDATASection {
      CONST_VTBL struct IXMLDOMCDATASectionVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMCDATASection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMCDATASection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMCDATASection_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMCDATASection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMCDATASection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMCDATASection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMCDATASection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMCDATASection_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMCDATASection_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMCDATASection_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMCDATASection_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMCDATASection_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMCDATASection_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMCDATASection_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMCDATASection_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMCDATASection_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMCDATASection_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMCDATASection_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMCDATASection_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMCDATASection_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMCDATASection_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMCDATASection_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMCDATASection_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMCDATASection_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMCDATASection_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMCDATASection_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMCDATASection_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMCDATASection_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMCDATASection_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMCDATASection_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMCDATASection_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMCDATASection_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMCDATASection_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMCDATASection_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMCDATASection_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMCDATASection_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMCDATASection_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMCDATASection_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMCDATASection_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMCDATASection_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMCDATASection_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMCDATASection_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMCDATASection_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXMLDOMCDATASection_get_data(This,data) (This)->lpVtbl->get_data(This,data)
#define IXMLDOMCDATASection_put_data(This,data) (This)->lpVtbl->put_data(This,data)
#define IXMLDOMCDATASection_get_length(This,dataLength) (This)->lpVtbl->get_length(This,dataLength)
#define IXMLDOMCDATASection_substringData(This,offset,count,data) (This)->lpVtbl->substringData(This,offset,count,data)
#define IXMLDOMCDATASection_appendData(This,data) (This)->lpVtbl->appendData(This,data)
#define IXMLDOMCDATASection_insertData(This,offset,data) (This)->lpVtbl->insertData(This,offset,data)
#define IXMLDOMCDATASection_deleteData(This,offset,count) (This)->lpVtbl->deleteData(This,offset,count)
#define IXMLDOMCDATASection_replaceData(This,offset,count,data) (This)->lpVtbl->replaceData(This,offset,count,data)
#define IXMLDOMCDATASection_splitText(This,offset,rightHandTextNode) (This)->lpVtbl->splitText(This,offset,rightHandTextNode)
#endif
#endif
#endif

#ifndef __IXMLDOMDocumentType_INTERFACE_DEFINED__
#define __IXMLDOMDocumentType_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMDocumentType;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMDocumentType : public IXMLDOMNode {
    public:
      virtual HRESULT WINAPI get_name(BSTR *rootName) = 0;
      virtual HRESULT WINAPI get_entities(IXMLDOMNamedNodeMap **entityMap) = 0;
      virtual HRESULT WINAPI get_notations(IXMLDOMNamedNodeMap **notationMap) = 0;
    };
#else
    typedef struct IXMLDOMDocumentTypeVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMDocumentType *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMDocumentType *This);
	ULONG (WINAPI *Release)(IXMLDOMDocumentType *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMDocumentType *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMDocumentType *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMDocumentType *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMDocumentType *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMDocumentType *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMDocumentType *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMDocumentType *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMDocumentType *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMDocumentType *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMDocumentType *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMDocumentType *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMDocumentType *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMDocumentType *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMDocumentType *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMDocumentType *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMDocumentType *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMDocumentType *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMDocumentType *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMDocumentType *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMDocumentType *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMDocumentType *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMDocumentType *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMDocumentType *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMDocumentType *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMDocumentType *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMDocumentType *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMDocumentType *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMDocumentType *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMDocumentType *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMDocumentType *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMDocumentType *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMDocumentType *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMDocumentType *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMDocumentType *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMDocumentType *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMDocumentType *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMDocumentType *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMDocumentType *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMDocumentType *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMDocumentType *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *get_name)(IXMLDOMDocumentType *This,BSTR *rootName);
	HRESULT (WINAPI *get_entities)(IXMLDOMDocumentType *This,IXMLDOMNamedNodeMap **entityMap);
	HRESULT (WINAPI *get_notations)(IXMLDOMDocumentType *This,IXMLDOMNamedNodeMap **notationMap);
      END_INTERFACE
    } IXMLDOMDocumentTypeVtbl;
    struct IXMLDOMDocumentType {
      CONST_VTBL struct IXMLDOMDocumentTypeVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMDocumentType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMDocumentType_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMDocumentType_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMDocumentType_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMDocumentType_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMDocumentType_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMDocumentType_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMDocumentType_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMDocumentType_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMDocumentType_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMDocumentType_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMDocumentType_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMDocumentType_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMDocumentType_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMDocumentType_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMDocumentType_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMDocumentType_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMDocumentType_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMDocumentType_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMDocumentType_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMDocumentType_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMDocumentType_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMDocumentType_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMDocumentType_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMDocumentType_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMDocumentType_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMDocumentType_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMDocumentType_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMDocumentType_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMDocumentType_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMDocumentType_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMDocumentType_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMDocumentType_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMDocumentType_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMDocumentType_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMDocumentType_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMDocumentType_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMDocumentType_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMDocumentType_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMDocumentType_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMDocumentType_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMDocumentType_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMDocumentType_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXMLDOMDocumentType_get_name(This,rootName) (This)->lpVtbl->get_name(This,rootName)
#define IXMLDOMDocumentType_get_entities(This,entityMap) (This)->lpVtbl->get_entities(This,entityMap)
#define IXMLDOMDocumentType_get_notations(This,notationMap) (This)->lpVtbl->get_notations(This,notationMap)
#endif
#endif
    HRESULT WINAPI IXMLDOMDocumentType_get_name_Proxy(IXMLDOMDocumentType *This,BSTR *rootName);
    void __RPC_STUB IXMLDOMDocumentType_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocumentType_get_entities_Proxy(IXMLDOMDocumentType *This,IXMLDOMNamedNodeMap **entityMap);
    void __RPC_STUB IXMLDOMDocumentType_get_entities_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMDocumentType_get_notations_Proxy(IXMLDOMDocumentType *This,IXMLDOMNamedNodeMap **notationMap);
    void __RPC_STUB IXMLDOMDocumentType_get_notations_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMNotation_INTERFACE_DEFINED__
#define __IXMLDOMNotation_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMNotation;
#if defined(__cplusplus) && !defined(CINTERFACE)

    struct IXMLDOMNotation : public IXMLDOMNode {
    public:
      virtual HRESULT WINAPI get_publicId(VARIANT *publicID) = 0;
      virtual HRESULT WINAPI get_systemId(VARIANT *systemID) = 0;
    };
#else
    typedef struct IXMLDOMNotationVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMNotation *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMNotation *This);
	ULONG (WINAPI *Release)(IXMLDOMNotation *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMNotation *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMNotation *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMNotation *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMNotation *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMNotation *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMNotation *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMNotation *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMNotation *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMNotation *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMNotation *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMNotation *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMNotation *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMNotation *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMNotation *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMNotation *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMNotation *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMNotation *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMNotation *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMNotation *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMNotation *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMNotation *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMNotation *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMNotation *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMNotation *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMNotation *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMNotation *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMNotation *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMNotation *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMNotation *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMNotation *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMNotation *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMNotation *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMNotation *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMNotation *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMNotation *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMNotation *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMNotation *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMNotation *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMNotation *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMNotation *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *get_publicId)(IXMLDOMNotation *This,VARIANT *publicID);
	HRESULT (WINAPI *get_systemId)(IXMLDOMNotation *This,VARIANT *systemID);
      END_INTERFACE
    } IXMLDOMNotationVtbl;
    struct IXMLDOMNotation {
      CONST_VTBL struct IXMLDOMNotationVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMNotation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMNotation_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMNotation_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMNotation_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMNotation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMNotation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMNotation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMNotation_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMNotation_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMNotation_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMNotation_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMNotation_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMNotation_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMNotation_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMNotation_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMNotation_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMNotation_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMNotation_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMNotation_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMNotation_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMNotation_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMNotation_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMNotation_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMNotation_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMNotation_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMNotation_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMNotation_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMNotation_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMNotation_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMNotation_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMNotation_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMNotation_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMNotation_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMNotation_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMNotation_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMNotation_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMNotation_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMNotation_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMNotation_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMNotation_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMNotation_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMNotation_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMNotation_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXMLDOMNotation_get_publicId(This,publicID) (This)->lpVtbl->get_publicId(This,publicID)
#define IXMLDOMNotation_get_systemId(This,systemID) (This)->lpVtbl->get_systemId(This,systemID)
#endif
#endif
    HRESULT WINAPI IXMLDOMNotation_get_publicId_Proxy(IXMLDOMNotation *This,VARIANT *publicID);
    void __RPC_STUB IXMLDOMNotation_get_publicId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMNotation_get_systemId_Proxy(IXMLDOMNotation *This,VARIANT *systemID);
    void __RPC_STUB IXMLDOMNotation_get_systemId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMEntity_INTERFACE_DEFINED__
#define __IXMLDOMEntity_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMEntity;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMEntity : public IXMLDOMNode {
    public:
      virtual HRESULT WINAPI get_publicId(VARIANT *publicID) = 0;
      virtual HRESULT WINAPI get_systemId(VARIANT *systemID) = 0;
      virtual HRESULT WINAPI get_notationName(BSTR *name) = 0;
    };
#else
    typedef struct IXMLDOMEntityVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMEntity *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMEntity *This);
	ULONG (WINAPI *Release)(IXMLDOMEntity *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMEntity *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMEntity *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMEntity *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMEntity *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMEntity *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMEntity *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMEntity *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMEntity *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMEntity *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMEntity *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMEntity *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMEntity *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMEntity *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMEntity *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMEntity *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMEntity *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMEntity *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMEntity *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMEntity *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMEntity *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMEntity *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMEntity *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMEntity *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMEntity *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMEntity *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMEntity *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMEntity *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMEntity *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMEntity *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMEntity *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMEntity *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMEntity *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMEntity *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMEntity *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMEntity *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMEntity *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMEntity *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMEntity *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMEntity *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMEntity *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *get_publicId)(IXMLDOMEntity *This,VARIANT *publicID);
	HRESULT (WINAPI *get_systemId)(IXMLDOMEntity *This,VARIANT *systemID);
	HRESULT (WINAPI *get_notationName)(IXMLDOMEntity *This,BSTR *name);
      END_INTERFACE
    } IXMLDOMEntityVtbl;
    struct IXMLDOMEntity {
      CONST_VTBL struct IXMLDOMEntityVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMEntity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMEntity_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMEntity_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMEntity_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMEntity_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMEntity_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMEntity_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMEntity_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMEntity_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMEntity_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMEntity_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMEntity_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMEntity_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMEntity_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMEntity_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMEntity_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMEntity_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMEntity_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMEntity_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMEntity_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMEntity_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMEntity_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMEntity_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMEntity_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMEntity_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMEntity_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMEntity_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMEntity_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMEntity_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMEntity_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMEntity_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMEntity_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMEntity_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMEntity_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMEntity_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMEntity_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMEntity_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMEntity_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMEntity_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMEntity_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMEntity_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMEntity_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMEntity_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXMLDOMEntity_get_publicId(This,publicID) (This)->lpVtbl->get_publicId(This,publicID)
#define IXMLDOMEntity_get_systemId(This,systemID) (This)->lpVtbl->get_systemId(This,systemID)
#define IXMLDOMEntity_get_notationName(This,name) (This)->lpVtbl->get_notationName(This,name)
#endif
#endif
    HRESULT WINAPI IXMLDOMEntity_get_publicId_Proxy(IXMLDOMEntity *This,VARIANT *publicID);
    void __RPC_STUB IXMLDOMEntity_get_publicId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMEntity_get_systemId_Proxy(IXMLDOMEntity *This,VARIANT *systemID);
    void __RPC_STUB IXMLDOMEntity_get_systemId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMEntity_get_notationName_Proxy(IXMLDOMEntity *This,BSTR *name);
    void __RPC_STUB IXMLDOMEntity_get_notationName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMEntityReference_INTERFACE_DEFINED__
#define __IXMLDOMEntityReference_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMEntityReference;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMEntityReference : public IXMLDOMNode {
    };
#else
    typedef struct IXMLDOMEntityReferenceVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMEntityReference *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMEntityReference *This);
	ULONG (WINAPI *Release)(IXMLDOMEntityReference *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMEntityReference *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMEntityReference *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMEntityReference *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMEntityReference *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXMLDOMEntityReference *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXMLDOMEntityReference *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXMLDOMEntityReference *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXMLDOMEntityReference *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXMLDOMEntityReference *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXMLDOMEntityReference *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXMLDOMEntityReference *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXMLDOMEntityReference *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXMLDOMEntityReference *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXMLDOMEntityReference *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXMLDOMEntityReference *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXMLDOMEntityReference *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXMLDOMEntityReference *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXMLDOMEntityReference *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXMLDOMEntityReference *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXMLDOMEntityReference *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXMLDOMEntityReference *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXMLDOMEntityReference *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXMLDOMEntityReference *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXMLDOMEntityReference *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXMLDOMEntityReference *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXMLDOMEntityReference *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXMLDOMEntityReference *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXMLDOMEntityReference *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXMLDOMEntityReference *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXMLDOMEntityReference *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXMLDOMEntityReference *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXMLDOMEntityReference *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXMLDOMEntityReference *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXMLDOMEntityReference *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXMLDOMEntityReference *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXMLDOMEntityReference *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMEntityReference *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXMLDOMEntityReference *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXMLDOMEntityReference *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXMLDOMEntityReference *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
      END_INTERFACE
    } IXMLDOMEntityReferenceVtbl;
    struct IXMLDOMEntityReference {
      CONST_VTBL struct IXMLDOMEntityReferenceVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMEntityReference_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMEntityReference_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMEntityReference_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMEntityReference_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMEntityReference_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMEntityReference_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMEntityReference_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMEntityReference_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXMLDOMEntityReference_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXMLDOMEntityReference_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXMLDOMEntityReference_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXMLDOMEntityReference_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXMLDOMEntityReference_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXMLDOMEntityReference_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXMLDOMEntityReference_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXMLDOMEntityReference_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXMLDOMEntityReference_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXMLDOMEntityReference_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXMLDOMEntityReference_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXMLDOMEntityReference_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXMLDOMEntityReference_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXMLDOMEntityReference_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXMLDOMEntityReference_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXMLDOMEntityReference_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXMLDOMEntityReference_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXMLDOMEntityReference_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXMLDOMEntityReference_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXMLDOMEntityReference_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXMLDOMEntityReference_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXMLDOMEntityReference_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXMLDOMEntityReference_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXMLDOMEntityReference_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXMLDOMEntityReference_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXMLDOMEntityReference_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXMLDOMEntityReference_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXMLDOMEntityReference_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXMLDOMEntityReference_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXMLDOMEntityReference_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXMLDOMEntityReference_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXMLDOMEntityReference_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXMLDOMEntityReference_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXMLDOMEntityReference_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXMLDOMEntityReference_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#endif
#endif
#endif

#ifndef __IXMLDOMParseError_INTERFACE_DEFINED__
#define __IXMLDOMParseError_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMParseError;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMParseError : public IDispatch {
    public:
      virtual HRESULT WINAPI get_errorCode(long *errorCode) = 0;
      virtual HRESULT WINAPI get_url(BSTR *urlString) = 0;
      virtual HRESULT WINAPI get_reason(BSTR *reasonString) = 0;
      virtual HRESULT WINAPI get_srcText(BSTR *sourceString) = 0;
      virtual HRESULT WINAPI get_line(long *lineNumber) = 0;
      virtual HRESULT WINAPI get_linepos(long *linePosition) = 0;
      virtual HRESULT WINAPI get_filepos(long *filePosition) = 0;
    };
#else
    typedef struct IXMLDOMParseErrorVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMParseError *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMParseError *This);
	ULONG (WINAPI *Release)(IXMLDOMParseError *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMParseError *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMParseError *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMParseError *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMParseError *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_errorCode)(IXMLDOMParseError *This,long *errorCode);
	HRESULT (WINAPI *get_url)(IXMLDOMParseError *This,BSTR *urlString);
	HRESULT (WINAPI *get_reason)(IXMLDOMParseError *This,BSTR *reasonString);
	HRESULT (WINAPI *get_srcText)(IXMLDOMParseError *This,BSTR *sourceString);
	HRESULT (WINAPI *get_line)(IXMLDOMParseError *This,long *lineNumber);
	HRESULT (WINAPI *get_linepos)(IXMLDOMParseError *This,long *linePosition);
	HRESULT (WINAPI *get_filepos)(IXMLDOMParseError *This,long *filePosition);
      END_INTERFACE
    } IXMLDOMParseErrorVtbl;
    struct IXMLDOMParseError {
      CONST_VTBL struct IXMLDOMParseErrorVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMParseError_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMParseError_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMParseError_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMParseError_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMParseError_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMParseError_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMParseError_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMParseError_get_errorCode(This,errorCode) (This)->lpVtbl->get_errorCode(This,errorCode)
#define IXMLDOMParseError_get_url(This,urlString) (This)->lpVtbl->get_url(This,urlString)
#define IXMLDOMParseError_get_reason(This,reasonString) (This)->lpVtbl->get_reason(This,reasonString)
#define IXMLDOMParseError_get_srcText(This,sourceString) (This)->lpVtbl->get_srcText(This,sourceString)
#define IXMLDOMParseError_get_line(This,lineNumber) (This)->lpVtbl->get_line(This,lineNumber)
#define IXMLDOMParseError_get_linepos(This,linePosition) (This)->lpVtbl->get_linepos(This,linePosition)
#define IXMLDOMParseError_get_filepos(This,filePosition) (This)->lpVtbl->get_filepos(This,filePosition)
#endif
#endif
    HRESULT WINAPI IXMLDOMParseError_get_errorCode_Proxy(IXMLDOMParseError *This,long *errorCode);
    void __RPC_STUB IXMLDOMParseError_get_errorCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMParseError_get_url_Proxy(IXMLDOMParseError *This,BSTR *urlString);
    void __RPC_STUB IXMLDOMParseError_get_url_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMParseError_get_reason_Proxy(IXMLDOMParseError *This,BSTR *reasonString);
    void __RPC_STUB IXMLDOMParseError_get_reason_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMParseError_get_srcText_Proxy(IXMLDOMParseError *This,BSTR *sourceString);
    void __RPC_STUB IXMLDOMParseError_get_srcText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMParseError_get_line_Proxy(IXMLDOMParseError *This,long *lineNumber);
    void __RPC_STUB IXMLDOMParseError_get_line_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMParseError_get_linepos_Proxy(IXMLDOMParseError *This,long *linePosition);
    void __RPC_STUB IXMLDOMParseError_get_linepos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMParseError_get_filepos_Proxy(IXMLDOMParseError *This,long *filePosition);
    void __RPC_STUB IXMLDOMParseError_get_filepos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMSchemaCollection_INTERFACE_DEFINED__
#define __IXMLDOMSchemaCollection_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMSchemaCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMSchemaCollection : public IDispatch {
    public:
      virtual HRESULT WINAPI add(BSTR namespaceURI,VARIANT var) = 0;
      virtual HRESULT WINAPI get(BSTR namespaceURI,IXMLDOMNode **schemaNode) = 0;
      virtual HRESULT WINAPI remove(BSTR namespaceURI) = 0;
      virtual HRESULT WINAPI get_length(long *length) = 0;
      virtual HRESULT WINAPI get_namespaceURI(long index,BSTR *length) = 0;
      virtual HRESULT WINAPI addCollection(IXMLDOMSchemaCollection *otherCollection) = 0;
      virtual HRESULT WINAPI get__newEnum(IUnknown **ppUnk) = 0;
    };
#else
    typedef struct IXMLDOMSchemaCollectionVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMSchemaCollection *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMSchemaCollection *This);
	ULONG (WINAPI *Release)(IXMLDOMSchemaCollection *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMSchemaCollection *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMSchemaCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMSchemaCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMSchemaCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *add)(IXMLDOMSchemaCollection *This,BSTR namespaceURI,VARIANT var);
	HRESULT (WINAPI *get)(IXMLDOMSchemaCollection *This,BSTR namespaceURI,IXMLDOMNode **schemaNode);
	HRESULT (WINAPI *remove)(IXMLDOMSchemaCollection *This,BSTR namespaceURI);
	HRESULT (WINAPI *get_length)(IXMLDOMSchemaCollection *This,long *length);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMSchemaCollection *This,long index,BSTR *length);
	HRESULT (WINAPI *addCollection)(IXMLDOMSchemaCollection *This,IXMLDOMSchemaCollection *otherCollection);
	HRESULT (WINAPI *get__newEnum)(IXMLDOMSchemaCollection *This,IUnknown **ppUnk);
      END_INTERFACE
    } IXMLDOMSchemaCollectionVtbl;
    struct IXMLDOMSchemaCollection {
      CONST_VTBL struct IXMLDOMSchemaCollectionVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMSchemaCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMSchemaCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMSchemaCollection_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMSchemaCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMSchemaCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMSchemaCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMSchemaCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMSchemaCollection_add(This,namespaceURI,var) (This)->lpVtbl->add(This,namespaceURI,var)
#define IXMLDOMSchemaCollection_get(This,namespaceURI,schemaNode) (This)->lpVtbl->get(This,namespaceURI,schemaNode)
#define IXMLDOMSchemaCollection_remove(This,namespaceURI) (This)->lpVtbl->remove(This,namespaceURI)
#define IXMLDOMSchemaCollection_get_length(This,length) (This)->lpVtbl->get_length(This,length)
#define IXMLDOMSchemaCollection_get_namespaceURI(This,index,length) (This)->lpVtbl->get_namespaceURI(This,index,length)
#define IXMLDOMSchemaCollection_addCollection(This,otherCollection) (This)->lpVtbl->addCollection(This,otherCollection)
#define IXMLDOMSchemaCollection_get__newEnum(This,ppUnk) (This)->lpVtbl->get__newEnum(This,ppUnk)
#endif
#endif
    HRESULT WINAPI IXMLDOMSchemaCollection_add_Proxy(IXMLDOMSchemaCollection *This,BSTR namespaceURI,VARIANT var);
    void __RPC_STUB IXMLDOMSchemaCollection_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSchemaCollection_get_Proxy(IXMLDOMSchemaCollection *This,BSTR namespaceURI,IXMLDOMNode **schemaNode);
    void __RPC_STUB IXMLDOMSchemaCollection_get_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSchemaCollection_remove_Proxy(IXMLDOMSchemaCollection *This,BSTR namespaceURI);
    void __RPC_STUB IXMLDOMSchemaCollection_remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSchemaCollection_get_length_Proxy(IXMLDOMSchemaCollection *This,long *length);
    void __RPC_STUB IXMLDOMSchemaCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSchemaCollection_get_namespaceURI_Proxy(IXMLDOMSchemaCollection *This,long index,BSTR *length);
    void __RPC_STUB IXMLDOMSchemaCollection_get_namespaceURI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSchemaCollection_addCollection_Proxy(IXMLDOMSchemaCollection *This,IXMLDOMSchemaCollection *otherCollection);
    void __RPC_STUB IXMLDOMSchemaCollection_addCollection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSchemaCollection_get__newEnum_Proxy(IXMLDOMSchemaCollection *This,IUnknown **ppUnk);
    void __RPC_STUB IXMLDOMSchemaCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXTLRuntime_INTERFACE_DEFINED__
#define __IXTLRuntime_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXTLRuntime;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXTLRuntime : public IXMLDOMNode {
    public:
      virtual HRESULT WINAPI uniqueID(IXMLDOMNode *pNode,long *pID) = 0;
      virtual HRESULT WINAPI depth(IXMLDOMNode *pNode,long *pDepth) = 0;
      virtual HRESULT WINAPI childNumber(IXMLDOMNode *pNode,long *pNumber) = 0;
      virtual HRESULT WINAPI ancestorChildNumber(BSTR bstrNodeName,IXMLDOMNode *pNode,long *pNumber) = 0;
      virtual HRESULT WINAPI absoluteChildNumber(IXMLDOMNode *pNode,long *pNumber) = 0;
      virtual HRESULT WINAPI formatIndex(long lIndex,BSTR bstrFormat,BSTR *pbstrFormattedString) = 0;
      virtual HRESULT WINAPI formatNumber(double dblNumber,BSTR bstrFormat,BSTR *pbstrFormattedString) = 0;
      virtual HRESULT WINAPI formatDate(VARIANT varDate,BSTR bstrFormat,VARIANT varDestLocale,BSTR *pbstrFormattedString) = 0;
      virtual HRESULT WINAPI formatTime(VARIANT varTime,BSTR bstrFormat,VARIANT varDestLocale,BSTR *pbstrFormattedString) = 0;
    };
#else
    typedef struct IXTLRuntimeVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXTLRuntime *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXTLRuntime *This);
	ULONG (WINAPI *Release)(IXTLRuntime *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXTLRuntime *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXTLRuntime *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXTLRuntime *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXTLRuntime *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_nodeName)(IXTLRuntime *This,BSTR *name);
	HRESULT (WINAPI *get_nodeValue)(IXTLRuntime *This,VARIANT *value);
	HRESULT (WINAPI *put_nodeValue)(IXTLRuntime *This,VARIANT value);
	HRESULT (WINAPI *get_nodeType)(IXTLRuntime *This,DOMNodeType *type);
	HRESULT (WINAPI *get_parentNode)(IXTLRuntime *This,IXMLDOMNode **parent);
	HRESULT (WINAPI *get_childNodes)(IXTLRuntime *This,IXMLDOMNodeList **childList);
	HRESULT (WINAPI *get_firstChild)(IXTLRuntime *This,IXMLDOMNode **firstChild);
	HRESULT (WINAPI *get_lastChild)(IXTLRuntime *This,IXMLDOMNode **lastChild);
	HRESULT (WINAPI *get_previousSibling)(IXTLRuntime *This,IXMLDOMNode **previousSibling);
	HRESULT (WINAPI *get_nextSibling)(IXTLRuntime *This,IXMLDOMNode **nextSibling);
	HRESULT (WINAPI *get_attributes)(IXTLRuntime *This,IXMLDOMNamedNodeMap **attributeMap);
	HRESULT (WINAPI *insertBefore)(IXTLRuntime *This,IXMLDOMNode *newChild,VARIANT refChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *replaceChild)(IXTLRuntime *This,IXMLDOMNode *newChild,IXMLDOMNode *oldChild,IXMLDOMNode **outOldChild);
	HRESULT (WINAPI *removeChild)(IXTLRuntime *This,IXMLDOMNode *childNode,IXMLDOMNode **oldChild);
	HRESULT (WINAPI *appendChild)(IXTLRuntime *This,IXMLDOMNode *newChild,IXMLDOMNode **outNewChild);
	HRESULT (WINAPI *hasChildNodes)(IXTLRuntime *This,VARIANT_BOOL *hasChild);
	HRESULT (WINAPI *get_ownerDocument)(IXTLRuntime *This,IXMLDOMDocument **DOMDocument);
	HRESULT (WINAPI *cloneNode)(IXTLRuntime *This,VARIANT_BOOL deep,IXMLDOMNode **cloneRoot);
	HRESULT (WINAPI *get_nodeTypeString)(IXTLRuntime *This,BSTR *nodeType);
	HRESULT (WINAPI *get_text)(IXTLRuntime *This,BSTR *text);
	HRESULT (WINAPI *put_text)(IXTLRuntime *This,BSTR text);
	HRESULT (WINAPI *get_specified)(IXTLRuntime *This,VARIANT_BOOL *isSpecified);
	HRESULT (WINAPI *get_definition)(IXTLRuntime *This,IXMLDOMNode **definitionNode);
	HRESULT (WINAPI *get_nodeTypedValue)(IXTLRuntime *This,VARIANT *typedValue);
	HRESULT (WINAPI *put_nodeTypedValue)(IXTLRuntime *This,VARIANT typedValue);
	HRESULT (WINAPI *get_dataType)(IXTLRuntime *This,VARIANT *dataTypeName);
	HRESULT (WINAPI *put_dataType)(IXTLRuntime *This,BSTR dataTypeName);
	HRESULT (WINAPI *get_xml)(IXTLRuntime *This,BSTR *xmlString);
	HRESULT (WINAPI *transformNode)(IXTLRuntime *This,IXMLDOMNode *stylesheet,BSTR *xmlString);
	HRESULT (WINAPI *selectNodes)(IXTLRuntime *This,BSTR queryString,IXMLDOMNodeList **resultList);
	HRESULT (WINAPI *selectSingleNode)(IXTLRuntime *This,BSTR queryString,IXMLDOMNode **resultNode);
	HRESULT (WINAPI *get_parsed)(IXTLRuntime *This,VARIANT_BOOL *isParsed);
	HRESULT (WINAPI *get_namespaceURI)(IXTLRuntime *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_prefix)(IXTLRuntime *This,BSTR *prefixString);
	HRESULT (WINAPI *get_baseName)(IXTLRuntime *This,BSTR *nameString);
	HRESULT (WINAPI *transformNodeToObject)(IXTLRuntime *This,IXMLDOMNode *stylesheet,VARIANT outputObject);
	HRESULT (WINAPI *uniqueID)(IXTLRuntime *This,IXMLDOMNode *pNode,long *pID);
	HRESULT (WINAPI *depth)(IXTLRuntime *This,IXMLDOMNode *pNode,long *pDepth);
	HRESULT (WINAPI *childNumber)(IXTLRuntime *This,IXMLDOMNode *pNode,long *pNumber);
	HRESULT (WINAPI *ancestorChildNumber)(IXTLRuntime *This,BSTR bstrNodeName,IXMLDOMNode *pNode,long *pNumber);
	HRESULT (WINAPI *absoluteChildNumber)(IXTLRuntime *This,IXMLDOMNode *pNode,long *pNumber);
	HRESULT (WINAPI *formatIndex)(IXTLRuntime *This,long lIndex,BSTR bstrFormat,BSTR *pbstrFormattedString);
	HRESULT (WINAPI *formatNumber)(IXTLRuntime *This,double dblNumber,BSTR bstrFormat,BSTR *pbstrFormattedString);
	HRESULT (WINAPI *formatDate)(IXTLRuntime *This,VARIANT varDate,BSTR bstrFormat,VARIANT varDestLocale,BSTR *pbstrFormattedString);
	HRESULT (WINAPI *formatTime)(IXTLRuntime *This,VARIANT varTime,BSTR bstrFormat,VARIANT varDestLocale,BSTR *pbstrFormattedString);
      END_INTERFACE
    } IXTLRuntimeVtbl;
    struct IXTLRuntime {
      CONST_VTBL struct IXTLRuntimeVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXTLRuntime_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXTLRuntime_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXTLRuntime_Release(This) (This)->lpVtbl->Release(This)
#define IXTLRuntime_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXTLRuntime_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXTLRuntime_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXTLRuntime_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXTLRuntime_get_nodeName(This,name) (This)->lpVtbl->get_nodeName(This,name)
#define IXTLRuntime_get_nodeValue(This,value) (This)->lpVtbl->get_nodeValue(This,value)
#define IXTLRuntime_put_nodeValue(This,value) (This)->lpVtbl->put_nodeValue(This,value)
#define IXTLRuntime_get_nodeType(This,type) (This)->lpVtbl->get_nodeType(This,type)
#define IXTLRuntime_get_parentNode(This,parent) (This)->lpVtbl->get_parentNode(This,parent)
#define IXTLRuntime_get_childNodes(This,childList) (This)->lpVtbl->get_childNodes(This,childList)
#define IXTLRuntime_get_firstChild(This,firstChild) (This)->lpVtbl->get_firstChild(This,firstChild)
#define IXTLRuntime_get_lastChild(This,lastChild) (This)->lpVtbl->get_lastChild(This,lastChild)
#define IXTLRuntime_get_previousSibling(This,previousSibling) (This)->lpVtbl->get_previousSibling(This,previousSibling)
#define IXTLRuntime_get_nextSibling(This,nextSibling) (This)->lpVtbl->get_nextSibling(This,nextSibling)
#define IXTLRuntime_get_attributes(This,attributeMap) (This)->lpVtbl->get_attributes(This,attributeMap)
#define IXTLRuntime_insertBefore(This,newChild,refChild,outNewChild) (This)->lpVtbl->insertBefore(This,newChild,refChild,outNewChild)
#define IXTLRuntime_replaceChild(This,newChild,oldChild,outOldChild) (This)->lpVtbl->replaceChild(This,newChild,oldChild,outOldChild)
#define IXTLRuntime_removeChild(This,childNode,oldChild) (This)->lpVtbl->removeChild(This,childNode,oldChild)
#define IXTLRuntime_appendChild(This,newChild,outNewChild) (This)->lpVtbl->appendChild(This,newChild,outNewChild)
#define IXTLRuntime_hasChildNodes(This,hasChild) (This)->lpVtbl->hasChildNodes(This,hasChild)
#define IXTLRuntime_get_ownerDocument(This,DOMDocument) (This)->lpVtbl->get_ownerDocument(This,DOMDocument)
#define IXTLRuntime_cloneNode(This,deep,cloneRoot) (This)->lpVtbl->cloneNode(This,deep,cloneRoot)
#define IXTLRuntime_get_nodeTypeString(This,nodeType) (This)->lpVtbl->get_nodeTypeString(This,nodeType)
#define IXTLRuntime_get_text(This,text) (This)->lpVtbl->get_text(This,text)
#define IXTLRuntime_put_text(This,text) (This)->lpVtbl->put_text(This,text)
#define IXTLRuntime_get_specified(This,isSpecified) (This)->lpVtbl->get_specified(This,isSpecified)
#define IXTLRuntime_get_definition(This,definitionNode) (This)->lpVtbl->get_definition(This,definitionNode)
#define IXTLRuntime_get_nodeTypedValue(This,typedValue) (This)->lpVtbl->get_nodeTypedValue(This,typedValue)
#define IXTLRuntime_put_nodeTypedValue(This,typedValue) (This)->lpVtbl->put_nodeTypedValue(This,typedValue)
#define IXTLRuntime_get_dataType(This,dataTypeName) (This)->lpVtbl->get_dataType(This,dataTypeName)
#define IXTLRuntime_put_dataType(This,dataTypeName) (This)->lpVtbl->put_dataType(This,dataTypeName)
#define IXTLRuntime_get_xml(This,xmlString) (This)->lpVtbl->get_xml(This,xmlString)
#define IXTLRuntime_transformNode(This,stylesheet,xmlString) (This)->lpVtbl->transformNode(This,stylesheet,xmlString)
#define IXTLRuntime_selectNodes(This,queryString,resultList) (This)->lpVtbl->selectNodes(This,queryString,resultList)
#define IXTLRuntime_selectSingleNode(This,queryString,resultNode) (This)->lpVtbl->selectSingleNode(This,queryString,resultNode)
#define IXTLRuntime_get_parsed(This,isParsed) (This)->lpVtbl->get_parsed(This,isParsed)
#define IXTLRuntime_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define IXTLRuntime_get_prefix(This,prefixString) (This)->lpVtbl->get_prefix(This,prefixString)
#define IXTLRuntime_get_baseName(This,nameString) (This)->lpVtbl->get_baseName(This,nameString)
#define IXTLRuntime_transformNodeToObject(This,stylesheet,outputObject) (This)->lpVtbl->transformNodeToObject(This,stylesheet,outputObject)
#define IXTLRuntime_uniqueID(This,pNode,pID) (This)->lpVtbl->uniqueID(This,pNode,pID)
#define IXTLRuntime_depth(This,pNode,pDepth) (This)->lpVtbl->depth(This,pNode,pDepth)
#define IXTLRuntime_childNumber(This,pNode,pNumber) (This)->lpVtbl->childNumber(This,pNode,pNumber)
#define IXTLRuntime_ancestorChildNumber(This,bstrNodeName,pNode,pNumber) (This)->lpVtbl->ancestorChildNumber(This,bstrNodeName,pNode,pNumber)
#define IXTLRuntime_absoluteChildNumber(This,pNode,pNumber) (This)->lpVtbl->absoluteChildNumber(This,pNode,pNumber)
#define IXTLRuntime_formatIndex(This,lIndex,bstrFormat,pbstrFormattedString) (This)->lpVtbl->formatIndex(This,lIndex,bstrFormat,pbstrFormattedString)
#define IXTLRuntime_formatNumber(This,dblNumber,bstrFormat,pbstrFormattedString) (This)->lpVtbl->formatNumber(This,dblNumber,bstrFormat,pbstrFormattedString)
#define IXTLRuntime_formatDate(This,varDate,bstrFormat,varDestLocale,pbstrFormattedString) (This)->lpVtbl->formatDate(This,varDate,bstrFormat,varDestLocale,pbstrFormattedString)
#define IXTLRuntime_formatTime(This,varTime,bstrFormat,varDestLocale,pbstrFormattedString) (This)->lpVtbl->formatTime(This,varTime,bstrFormat,varDestLocale,pbstrFormattedString)
#endif
#endif
    HRESULT WINAPI IXTLRuntime_uniqueID_Proxy(IXTLRuntime *This,IXMLDOMNode *pNode,long *pID);
    void __RPC_STUB IXTLRuntime_uniqueID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXTLRuntime_depth_Proxy(IXTLRuntime *This,IXMLDOMNode *pNode,long *pDepth);
    void __RPC_STUB IXTLRuntime_depth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXTLRuntime_childNumber_Proxy(IXTLRuntime *This,IXMLDOMNode *pNode,long *pNumber);
    void __RPC_STUB IXTLRuntime_childNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXTLRuntime_ancestorChildNumber_Proxy(IXTLRuntime *This,BSTR bstrNodeName,IXMLDOMNode *pNode,long *pNumber);
    void __RPC_STUB IXTLRuntime_ancestorChildNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXTLRuntime_absoluteChildNumber_Proxy(IXTLRuntime *This,IXMLDOMNode *pNode,long *pNumber);
    void __RPC_STUB IXTLRuntime_absoluteChildNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXTLRuntime_formatIndex_Proxy(IXTLRuntime *This,long lIndex,BSTR bstrFormat,BSTR *pbstrFormattedString);
    void __RPC_STUB IXTLRuntime_formatIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXTLRuntime_formatNumber_Proxy(IXTLRuntime *This,double dblNumber,BSTR bstrFormat,BSTR *pbstrFormattedString);
    void __RPC_STUB IXTLRuntime_formatNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXTLRuntime_formatDate_Proxy(IXTLRuntime *This,VARIANT varDate,BSTR bstrFormat,VARIANT varDestLocale,BSTR *pbstrFormattedString);
    void __RPC_STUB IXTLRuntime_formatDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXTLRuntime_formatTime_Proxy(IXTLRuntime *This,VARIANT varTime,BSTR bstrFormat,VARIANT varDestLocale,BSTR *pbstrFormattedString);
    void __RPC_STUB IXTLRuntime_formatTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXSLTemplate_INTERFACE_DEFINED__
#define __IXSLTemplate_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXSLTemplate;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXSLTemplate : public IDispatch {
    public:
      virtual HRESULT WINAPI putref_stylesheet(IXMLDOMNode *stylesheet) = 0;
      virtual HRESULT WINAPI get_stylesheet(IXMLDOMNode **stylesheet) = 0;
      virtual HRESULT WINAPI createProcessor(IXSLProcessor **ppProcessor) = 0;
    };
#else
    typedef struct IXSLTemplateVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXSLTemplate *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXSLTemplate *This);
	ULONG (WINAPI *Release)(IXSLTemplate *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXSLTemplate *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXSLTemplate *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXSLTemplate *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXSLTemplate *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *putref_stylesheet)(IXSLTemplate *This,IXMLDOMNode *stylesheet);
	HRESULT (WINAPI *get_stylesheet)(IXSLTemplate *This,IXMLDOMNode **stylesheet);
	HRESULT (WINAPI *createProcessor)(IXSLTemplate *This,IXSLProcessor **ppProcessor);
      END_INTERFACE
    } IXSLTemplateVtbl;
    struct IXSLTemplate {
      CONST_VTBL struct IXSLTemplateVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXSLTemplate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXSLTemplate_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXSLTemplate_Release(This) (This)->lpVtbl->Release(This)
#define IXSLTemplate_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXSLTemplate_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXSLTemplate_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXSLTemplate_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXSLTemplate_putref_stylesheet(This,stylesheet) (This)->lpVtbl->putref_stylesheet(This,stylesheet)
#define IXSLTemplate_get_stylesheet(This,stylesheet) (This)->lpVtbl->get_stylesheet(This,stylesheet)
#define IXSLTemplate_createProcessor(This,ppProcessor) (This)->lpVtbl->createProcessor(This,ppProcessor)
#endif
#endif
    HRESULT WINAPI IXSLTemplate_putref_stylesheet_Proxy(IXSLTemplate *This,IXMLDOMNode *stylesheet);
    void __RPC_STUB IXSLTemplate_putref_stylesheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLTemplate_get_stylesheet_Proxy(IXSLTemplate *This,IXMLDOMNode **stylesheet);
    void __RPC_STUB IXSLTemplate_get_stylesheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLTemplate_createProcessor_Proxy(IXSLTemplate *This,IXSLProcessor **ppProcessor);
    void __RPC_STUB IXSLTemplate_createProcessor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXSLProcessor_INTERFACE_DEFINED__
#define __IXSLProcessor_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXSLProcessor;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXSLProcessor : public IDispatch {
    public:
      virtual HRESULT WINAPI put_input(VARIANT var) = 0;
      virtual HRESULT WINAPI get_input(VARIANT *pVar) = 0;
      virtual HRESULT WINAPI get_ownerTemplate(IXSLTemplate **ppTemplate) = 0;
      virtual HRESULT WINAPI setStartMode(BSTR mode,BSTR namespaceURI = L"") = 0;
      virtual HRESULT WINAPI get_startMode(BSTR *mode) = 0;
      virtual HRESULT WINAPI get_startModeURI(BSTR *namespaceURI) = 0;
      virtual HRESULT WINAPI put_output(VARIANT output) = 0;
      virtual HRESULT WINAPI get_output(VARIANT *pOutput) = 0;
      virtual HRESULT WINAPI transform(VARIANT_BOOL *pDone) = 0;
      virtual HRESULT WINAPI reset(void) = 0;
      virtual HRESULT WINAPI get_readyState(long *pReadyState) = 0;
      virtual HRESULT WINAPI addParameter(BSTR baseName,VARIANT parameter,BSTR namespaceURI = L"") = 0;
      virtual HRESULT WINAPI addObject(IDispatch *obj,BSTR namespaceURI) = 0;
      virtual HRESULT WINAPI get_stylesheet(IXMLDOMNode **stylesheet) = 0;
    };
#else
    typedef struct IXSLProcessorVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXSLProcessor *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXSLProcessor *This);
	ULONG (WINAPI *Release)(IXSLProcessor *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXSLProcessor *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXSLProcessor *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXSLProcessor *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXSLProcessor *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *put_input)(IXSLProcessor *This,VARIANT var);
	HRESULT (WINAPI *get_input)(IXSLProcessor *This,VARIANT *pVar);
	HRESULT (WINAPI *get_ownerTemplate)(IXSLProcessor *This,IXSLTemplate **ppTemplate);
	HRESULT (WINAPI *setStartMode)(IXSLProcessor *This,BSTR mode,BSTR namespaceURI);
	HRESULT (WINAPI *get_startMode)(IXSLProcessor *This,BSTR *mode);
	HRESULT (WINAPI *get_startModeURI)(IXSLProcessor *This,BSTR *namespaceURI);
	HRESULT (WINAPI *put_output)(IXSLProcessor *This,VARIANT output);
	HRESULT (WINAPI *get_output)(IXSLProcessor *This,VARIANT *pOutput);
	HRESULT (WINAPI *transform)(IXSLProcessor *This,VARIANT_BOOL *pDone);
	HRESULT (WINAPI *reset)(IXSLProcessor *This);
	HRESULT (WINAPI *get_readyState)(IXSLProcessor *This,long *pReadyState);
	HRESULT (WINAPI *addParameter)(IXSLProcessor *This,BSTR baseName,VARIANT parameter,BSTR namespaceURI);
	HRESULT (WINAPI *addObject)(IXSLProcessor *This,IDispatch *obj,BSTR namespaceURI);
	HRESULT (WINAPI *get_stylesheet)(IXSLProcessor *This,IXMLDOMNode **stylesheet);
      END_INTERFACE
    } IXSLProcessorVtbl;
    struct IXSLProcessor {
      CONST_VTBL struct IXSLProcessorVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXSLProcessor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXSLProcessor_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXSLProcessor_Release(This) (This)->lpVtbl->Release(This)
#define IXSLProcessor_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXSLProcessor_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXSLProcessor_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXSLProcessor_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXSLProcessor_put_input(This,var) (This)->lpVtbl->put_input(This,var)
#define IXSLProcessor_get_input(This,pVar) (This)->lpVtbl->get_input(This,pVar)
#define IXSLProcessor_get_ownerTemplate(This,ppTemplate) (This)->lpVtbl->get_ownerTemplate(This,ppTemplate)
#define IXSLProcessor_setStartMode(This,mode,namespaceURI) (This)->lpVtbl->setStartMode(This,mode,namespaceURI)
#define IXSLProcessor_get_startMode(This,mode) (This)->lpVtbl->get_startMode(This,mode)
#define IXSLProcessor_get_startModeURI(This,namespaceURI) (This)->lpVtbl->get_startModeURI(This,namespaceURI)
#define IXSLProcessor_put_output(This,output) (This)->lpVtbl->put_output(This,output)
#define IXSLProcessor_get_output(This,pOutput) (This)->lpVtbl->get_output(This,pOutput)
#define IXSLProcessor_transform(This,pDone) (This)->lpVtbl->transform(This,pDone)
#define IXSLProcessor_reset(This) (This)->lpVtbl->reset(This)
#define IXSLProcessor_get_readyState(This,pReadyState) (This)->lpVtbl->get_readyState(This,pReadyState)
#define IXSLProcessor_addParameter(This,baseName,parameter,namespaceURI) (This)->lpVtbl->addParameter(This,baseName,parameter,namespaceURI)
#define IXSLProcessor_addObject(This,obj,namespaceURI) (This)->lpVtbl->addObject(This,obj,namespaceURI)
#define IXSLProcessor_get_stylesheet(This,stylesheet) (This)->lpVtbl->get_stylesheet(This,stylesheet)
#endif
#endif
    HRESULT WINAPI IXSLProcessor_put_input_Proxy(IXSLProcessor *This,VARIANT var);
    void __RPC_STUB IXSLProcessor_put_input_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_get_input_Proxy(IXSLProcessor *This,VARIANT *pVar);
    void __RPC_STUB IXSLProcessor_get_input_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_get_ownerTemplate_Proxy(IXSLProcessor *This,IXSLTemplate **ppTemplate);
    void __RPC_STUB IXSLProcessor_get_ownerTemplate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_setStartMode_Proxy(IXSLProcessor *This,BSTR mode,BSTR namespaceURI);
    void __RPC_STUB IXSLProcessor_setStartMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_get_startMode_Proxy(IXSLProcessor *This,BSTR *mode);
    void __RPC_STUB IXSLProcessor_get_startMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_get_startModeURI_Proxy(IXSLProcessor *This,BSTR *namespaceURI);
    void __RPC_STUB IXSLProcessor_get_startModeURI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_put_output_Proxy(IXSLProcessor *This,VARIANT output);
    void __RPC_STUB IXSLProcessor_put_output_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_get_output_Proxy(IXSLProcessor *This,VARIANT *pOutput);
    void __RPC_STUB IXSLProcessor_get_output_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_transform_Proxy(IXSLProcessor *This,VARIANT_BOOL *pDone);
    void __RPC_STUB IXSLProcessor_transform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_reset_Proxy(IXSLProcessor *This);
    void __RPC_STUB IXSLProcessor_reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_get_readyState_Proxy(IXSLProcessor *This,long *pReadyState);
    void __RPC_STUB IXSLProcessor_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_addParameter_Proxy(IXSLProcessor *This,BSTR baseName,VARIANT parameter,BSTR namespaceURI);
    void __RPC_STUB IXSLProcessor_addParameter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_addObject_Proxy(IXSLProcessor *This,IDispatch *obj,BSTR namespaceURI);
    void __RPC_STUB IXSLProcessor_addObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXSLProcessor_get_stylesheet_Proxy(IXSLProcessor *This,IXMLDOMNode **stylesheet);
    void __RPC_STUB IXSLProcessor_get_stylesheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISAXXMLReader_INTERFACE_DEFINED__
#define __ISAXXMLReader_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISAXXMLReader;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISAXXMLReader : public IUnknown {
    public:
      virtual HRESULT WINAPI getFeature(const wchar_t *pwchName,VARIANT_BOOL *pvfValue) = 0;
      virtual HRESULT WINAPI putFeature(const wchar_t *pwchName,VARIANT_BOOL vfValue) = 0;
      virtual HRESULT WINAPI getProperty(const wchar_t *pwchName,VARIANT *pvarValue) = 0;
      virtual HRESULT WINAPI putProperty(const wchar_t *pwchName,VARIANT varValue) = 0;
      virtual HRESULT WINAPI getEntityResolver(ISAXEntityResolver **ppResolver) = 0;
      virtual HRESULT WINAPI putEntityResolver(ISAXEntityResolver *pResolver) = 0;
      virtual HRESULT WINAPI getContentHandler(ISAXContentHandler **ppHandler) = 0;
      virtual HRESULT WINAPI putContentHandler(ISAXContentHandler *pHandler) = 0;
      virtual HRESULT WINAPI getDTDHandler(ISAXDTDHandler **ppHandler) = 0;
      virtual HRESULT WINAPI putDTDHandler(ISAXDTDHandler *pHandler) = 0;
      virtual HRESULT WINAPI getErrorHandler(ISAXErrorHandler **ppHandler) = 0;
      virtual HRESULT WINAPI putErrorHandler(ISAXErrorHandler *pHandler) = 0;
      virtual HRESULT WINAPI getBaseURL(const wchar_t **ppwchBaseUrl) = 0;
      virtual HRESULT WINAPI putBaseURL(const wchar_t *pwchBaseUrl) = 0;
      virtual HRESULT WINAPI getSecureBaseURL(const wchar_t **ppwchSecureBaseUrl) = 0;
      virtual HRESULT WINAPI putSecureBaseURL(const wchar_t *pwchSecureBaseUrl) = 0;
      virtual HRESULT WINAPI parse(VARIANT varInput) = 0;
      virtual HRESULT WINAPI parseURL(const wchar_t *pwchUrl) = 0;
    };
#else
    typedef struct ISAXXMLReaderVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISAXXMLReader *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISAXXMLReader *This);
	ULONG (WINAPI *Release)(ISAXXMLReader *This);
	HRESULT (WINAPI *getFeature)(ISAXXMLReader *This,const wchar_t *pwchName,VARIANT_BOOL *pvfValue);
	HRESULT (WINAPI *putFeature)(ISAXXMLReader *This,const wchar_t *pwchName,VARIANT_BOOL vfValue);
	HRESULT (WINAPI *getProperty)(ISAXXMLReader *This,const wchar_t *pwchName,VARIANT *pvarValue);
	HRESULT (WINAPI *putProperty)(ISAXXMLReader *This,const wchar_t *pwchName,VARIANT varValue);
	HRESULT (WINAPI *getEntityResolver)(ISAXXMLReader *This,ISAXEntityResolver **ppResolver);
	HRESULT (WINAPI *putEntityResolver)(ISAXXMLReader *This,ISAXEntityResolver *pResolver);
	HRESULT (WINAPI *getContentHandler)(ISAXXMLReader *This,ISAXContentHandler **ppHandler);
	HRESULT (WINAPI *putContentHandler)(ISAXXMLReader *This,ISAXContentHandler *pHandler);
	HRESULT (WINAPI *getDTDHandler)(ISAXXMLReader *This,ISAXDTDHandler **ppHandler);
	HRESULT (WINAPI *putDTDHandler)(ISAXXMLReader *This,ISAXDTDHandler *pHandler);
	HRESULT (WINAPI *getErrorHandler)(ISAXXMLReader *This,ISAXErrorHandler **ppHandler);
	HRESULT (WINAPI *putErrorHandler)(ISAXXMLReader *This,ISAXErrorHandler *pHandler);
	HRESULT (WINAPI *getBaseURL)(ISAXXMLReader *This,const wchar_t **ppwchBaseUrl);
	HRESULT (WINAPI *putBaseURL)(ISAXXMLReader *This,const wchar_t *pwchBaseUrl);
	HRESULT (WINAPI *getSecureBaseURL)(ISAXXMLReader *This,const wchar_t **ppwchSecureBaseUrl);
	HRESULT (WINAPI *putSecureBaseURL)(ISAXXMLReader *This,const wchar_t *pwchSecureBaseUrl);
	HRESULT (WINAPI *parse)(ISAXXMLReader *This,VARIANT varInput);
	HRESULT (WINAPI *parseURL)(ISAXXMLReader *This,const wchar_t *pwchUrl);
      END_INTERFACE
    } ISAXXMLReaderVtbl;
    struct ISAXXMLReader {
      CONST_VTBL struct ISAXXMLReaderVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISAXXMLReader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISAXXMLReader_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISAXXMLReader_Release(This) (This)->lpVtbl->Release(This)
#define ISAXXMLReader_getFeature(This,pwchName,pvfValue) (This)->lpVtbl->getFeature(This,pwchName,pvfValue)
#define ISAXXMLReader_putFeature(This,pwchName,vfValue) (This)->lpVtbl->putFeature(This,pwchName,vfValue)
#define ISAXXMLReader_getProperty(This,pwchName,pvarValue) (This)->lpVtbl->getProperty(This,pwchName,pvarValue)
#define ISAXXMLReader_putProperty(This,pwchName,varValue) (This)->lpVtbl->putProperty(This,pwchName,varValue)
#define ISAXXMLReader_getEntityResolver(This,ppResolver) (This)->lpVtbl->getEntityResolver(This,ppResolver)
#define ISAXXMLReader_putEntityResolver(This,pResolver) (This)->lpVtbl->putEntityResolver(This,pResolver)
#define ISAXXMLReader_getContentHandler(This,ppHandler) (This)->lpVtbl->getContentHandler(This,ppHandler)
#define ISAXXMLReader_putContentHandler(This,pHandler) (This)->lpVtbl->putContentHandler(This,pHandler)
#define ISAXXMLReader_getDTDHandler(This,ppHandler) (This)->lpVtbl->getDTDHandler(This,ppHandler)
#define ISAXXMLReader_putDTDHandler(This,pHandler) (This)->lpVtbl->putDTDHandler(This,pHandler)
#define ISAXXMLReader_getErrorHandler(This,ppHandler) (This)->lpVtbl->getErrorHandler(This,ppHandler)
#define ISAXXMLReader_putErrorHandler(This,pHandler) (This)->lpVtbl->putErrorHandler(This,pHandler)
#define ISAXXMLReader_getBaseURL(This,ppwchBaseUrl) (This)->lpVtbl->getBaseURL(This,ppwchBaseUrl)
#define ISAXXMLReader_putBaseURL(This,pwchBaseUrl) (This)->lpVtbl->putBaseURL(This,pwchBaseUrl)
#define ISAXXMLReader_getSecureBaseURL(This,ppwchSecureBaseUrl) (This)->lpVtbl->getSecureBaseURL(This,ppwchSecureBaseUrl)
#define ISAXXMLReader_putSecureBaseURL(This,pwchSecureBaseUrl) (This)->lpVtbl->putSecureBaseURL(This,pwchSecureBaseUrl)
#define ISAXXMLReader_parse(This,varInput) (This)->lpVtbl->parse(This,varInput)
#define ISAXXMLReader_parseURL(This,pwchUrl) (This)->lpVtbl->parseURL(This,pwchUrl)
#endif
#endif
    HRESULT WINAPI ISAXXMLReader_getFeature_Proxy(ISAXXMLReader *This,const wchar_t *pwchName,VARIANT_BOOL *pvfValue);
    void __RPC_STUB ISAXXMLReader_getFeature_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_putFeature_Proxy(ISAXXMLReader *This,const wchar_t *pwchName,VARIANT_BOOL vfValue);
    void __RPC_STUB ISAXXMLReader_putFeature_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_getProperty_Proxy(ISAXXMLReader *This,const wchar_t *pwchName,VARIANT *pvarValue);
    void __RPC_STUB ISAXXMLReader_getProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_putProperty_Proxy(ISAXXMLReader *This,const wchar_t *pwchName,VARIANT varValue);
    void __RPC_STUB ISAXXMLReader_putProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_getEntityResolver_Proxy(ISAXXMLReader *This,ISAXEntityResolver **ppResolver);
    void __RPC_STUB ISAXXMLReader_getEntityResolver_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_putEntityResolver_Proxy(ISAXXMLReader *This,ISAXEntityResolver *pResolver);
    void __RPC_STUB ISAXXMLReader_putEntityResolver_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_getContentHandler_Proxy(ISAXXMLReader *This,ISAXContentHandler **ppHandler);
    void __RPC_STUB ISAXXMLReader_getContentHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_putContentHandler_Proxy(ISAXXMLReader *This,ISAXContentHandler *pHandler);
    void __RPC_STUB ISAXXMLReader_putContentHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_getDTDHandler_Proxy(ISAXXMLReader *This,ISAXDTDHandler **ppHandler);
    void __RPC_STUB ISAXXMLReader_getDTDHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_putDTDHandler_Proxy(ISAXXMLReader *This,ISAXDTDHandler *pHandler);
    void __RPC_STUB ISAXXMLReader_putDTDHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_getErrorHandler_Proxy(ISAXXMLReader *This,ISAXErrorHandler **ppHandler);
    void __RPC_STUB ISAXXMLReader_getErrorHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_putErrorHandler_Proxy(ISAXXMLReader *This,ISAXErrorHandler *pHandler);
    void __RPC_STUB ISAXXMLReader_putErrorHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_getBaseURL_Proxy(ISAXXMLReader *This,const wchar_t **ppwchBaseUrl);
    void __RPC_STUB ISAXXMLReader_getBaseURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_putBaseURL_Proxy(ISAXXMLReader *This,const wchar_t *pwchBaseUrl);
    void __RPC_STUB ISAXXMLReader_putBaseURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_getSecureBaseURL_Proxy(ISAXXMLReader *This,const wchar_t **ppwchSecureBaseUrl);
    void __RPC_STUB ISAXXMLReader_getSecureBaseURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_putSecureBaseURL_Proxy(ISAXXMLReader *This,const wchar_t *pwchSecureBaseUrl);
    void __RPC_STUB ISAXXMLReader_putSecureBaseURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_parse_Proxy(ISAXXMLReader *This,VARIANT varInput);
    void __RPC_STUB ISAXXMLReader_parse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLReader_parseURL_Proxy(ISAXXMLReader *This,const wchar_t *pwchUrl);
    void __RPC_STUB ISAXXMLReader_parseURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISAXXMLFilter_INTERFACE_DEFINED__
#define __ISAXXMLFilter_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISAXXMLFilter;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISAXXMLFilter : public ISAXXMLReader {
    public:
      virtual HRESULT WINAPI getParent(ISAXXMLReader **ppReader) = 0;
      virtual HRESULT WINAPI putParent(ISAXXMLReader *pReader) = 0;
    };
#else
    typedef struct ISAXXMLFilterVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISAXXMLFilter *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISAXXMLFilter *This);
	ULONG (WINAPI *Release)(ISAXXMLFilter *This);
	HRESULT (WINAPI *getFeature)(ISAXXMLFilter *This,const wchar_t *pwchName,VARIANT_BOOL *pvfValue);
	HRESULT (WINAPI *putFeature)(ISAXXMLFilter *This,const wchar_t *pwchName,VARIANT_BOOL vfValue);
	HRESULT (WINAPI *getProperty)(ISAXXMLFilter *This,const wchar_t *pwchName,VARIANT *pvarValue);
	HRESULT (WINAPI *putProperty)(ISAXXMLFilter *This,const wchar_t *pwchName,VARIANT varValue);
	HRESULT (WINAPI *getEntityResolver)(ISAXXMLFilter *This,ISAXEntityResolver **ppResolver);
	HRESULT (WINAPI *putEntityResolver)(ISAXXMLFilter *This,ISAXEntityResolver *pResolver);
	HRESULT (WINAPI *getContentHandler)(ISAXXMLFilter *This,ISAXContentHandler **ppHandler);
	HRESULT (WINAPI *putContentHandler)(ISAXXMLFilter *This,ISAXContentHandler *pHandler);
	HRESULT (WINAPI *getDTDHandler)(ISAXXMLFilter *This,ISAXDTDHandler **ppHandler);
	HRESULT (WINAPI *putDTDHandler)(ISAXXMLFilter *This,ISAXDTDHandler *pHandler);
	HRESULT (WINAPI *getErrorHandler)(ISAXXMLFilter *This,ISAXErrorHandler **ppHandler);
	HRESULT (WINAPI *putErrorHandler)(ISAXXMLFilter *This,ISAXErrorHandler *pHandler);
	HRESULT (WINAPI *getBaseURL)(ISAXXMLFilter *This,const wchar_t **ppwchBaseUrl);
	HRESULT (WINAPI *putBaseURL)(ISAXXMLFilter *This,const wchar_t *pwchBaseUrl);
	HRESULT (WINAPI *getSecureBaseURL)(ISAXXMLFilter *This,const wchar_t **ppwchSecureBaseUrl);
	HRESULT (WINAPI *putSecureBaseURL)(ISAXXMLFilter *This,const wchar_t *pwchSecureBaseUrl);
	HRESULT (WINAPI *parse)(ISAXXMLFilter *This,VARIANT varInput);
	HRESULT (WINAPI *parseURL)(ISAXXMLFilter *This,const wchar_t *pwchUrl);
	HRESULT (WINAPI *getParent)(ISAXXMLFilter *This,ISAXXMLReader **ppReader);
	HRESULT (WINAPI *putParent)(ISAXXMLFilter *This,ISAXXMLReader *pReader);
      END_INTERFACE
    } ISAXXMLFilterVtbl;
    struct ISAXXMLFilter {
      CONST_VTBL struct ISAXXMLFilterVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISAXXMLFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISAXXMLFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISAXXMLFilter_Release(This) (This)->lpVtbl->Release(This)
#define ISAXXMLFilter_getFeature(This,pwchName,pvfValue) (This)->lpVtbl->getFeature(This,pwchName,pvfValue)
#define ISAXXMLFilter_putFeature(This,pwchName,vfValue) (This)->lpVtbl->putFeature(This,pwchName,vfValue)
#define ISAXXMLFilter_getProperty(This,pwchName,pvarValue) (This)->lpVtbl->getProperty(This,pwchName,pvarValue)
#define ISAXXMLFilter_putProperty(This,pwchName,varValue) (This)->lpVtbl->putProperty(This,pwchName,varValue)
#define ISAXXMLFilter_getEntityResolver(This,ppResolver) (This)->lpVtbl->getEntityResolver(This,ppResolver)
#define ISAXXMLFilter_putEntityResolver(This,pResolver) (This)->lpVtbl->putEntityResolver(This,pResolver)
#define ISAXXMLFilter_getContentHandler(This,ppHandler) (This)->lpVtbl->getContentHandler(This,ppHandler)
#define ISAXXMLFilter_putContentHandler(This,pHandler) (This)->lpVtbl->putContentHandler(This,pHandler)
#define ISAXXMLFilter_getDTDHandler(This,ppHandler) (This)->lpVtbl->getDTDHandler(This,ppHandler)
#define ISAXXMLFilter_putDTDHandler(This,pHandler) (This)->lpVtbl->putDTDHandler(This,pHandler)
#define ISAXXMLFilter_getErrorHandler(This,ppHandler) (This)->lpVtbl->getErrorHandler(This,ppHandler)
#define ISAXXMLFilter_putErrorHandler(This,pHandler) (This)->lpVtbl->putErrorHandler(This,pHandler)
#define ISAXXMLFilter_getBaseURL(This,ppwchBaseUrl) (This)->lpVtbl->getBaseURL(This,ppwchBaseUrl)
#define ISAXXMLFilter_putBaseURL(This,pwchBaseUrl) (This)->lpVtbl->putBaseURL(This,pwchBaseUrl)
#define ISAXXMLFilter_getSecureBaseURL(This,ppwchSecureBaseUrl) (This)->lpVtbl->getSecureBaseURL(This,ppwchSecureBaseUrl)
#define ISAXXMLFilter_putSecureBaseURL(This,pwchSecureBaseUrl) (This)->lpVtbl->putSecureBaseURL(This,pwchSecureBaseUrl)
#define ISAXXMLFilter_parse(This,varInput) (This)->lpVtbl->parse(This,varInput)
#define ISAXXMLFilter_parseURL(This,pwchUrl) (This)->lpVtbl->parseURL(This,pwchUrl)
#define ISAXXMLFilter_getParent(This,ppReader) (This)->lpVtbl->getParent(This,ppReader)
#define ISAXXMLFilter_putParent(This,pReader) (This)->lpVtbl->putParent(This,pReader)
#endif
#endif
    HRESULT WINAPI ISAXXMLFilter_getParent_Proxy(ISAXXMLFilter *This,ISAXXMLReader **ppReader);
    void __RPC_STUB ISAXXMLFilter_getParent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXXMLFilter_putParent_Proxy(ISAXXMLFilter *This,ISAXXMLReader *pReader);
    void __RPC_STUB ISAXXMLFilter_putParent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISAXLocator_INTERFACE_DEFINED__
#define __ISAXLocator_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISAXLocator;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISAXLocator : public IUnknown {
    public:
      virtual HRESULT WINAPI getColumnNumber(int *pnColumn) = 0;
      virtual HRESULT WINAPI getLineNumber(int *pnLine) = 0;
      virtual HRESULT WINAPI getPublicId(const wchar_t **ppwchPublicId) = 0;
      virtual HRESULT WINAPI getSystemId(const wchar_t **ppwchSystemId) = 0;
    };
#else
    typedef struct ISAXLocatorVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISAXLocator *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISAXLocator *This);
	ULONG (WINAPI *Release)(ISAXLocator *This);
	HRESULT (WINAPI *getColumnNumber)(ISAXLocator *This,int *pnColumn);
	HRESULT (WINAPI *getLineNumber)(ISAXLocator *This,int *pnLine);
	HRESULT (WINAPI *getPublicId)(ISAXLocator *This,const wchar_t **ppwchPublicId);
	HRESULT (WINAPI *getSystemId)(ISAXLocator *This,const wchar_t **ppwchSystemId);
      END_INTERFACE
    } ISAXLocatorVtbl;
    struct ISAXLocator {
      CONST_VTBL struct ISAXLocatorVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISAXLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISAXLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISAXLocator_Release(This) (This)->lpVtbl->Release(This)
#define ISAXLocator_getColumnNumber(This,pnColumn) (This)->lpVtbl->getColumnNumber(This,pnColumn)
#define ISAXLocator_getLineNumber(This,pnLine) (This)->lpVtbl->getLineNumber(This,pnLine)
#define ISAXLocator_getPublicId(This,ppwchPublicId) (This)->lpVtbl->getPublicId(This,ppwchPublicId)
#define ISAXLocator_getSystemId(This,ppwchSystemId) (This)->lpVtbl->getSystemId(This,ppwchSystemId)
#endif
#endif
    HRESULT WINAPI ISAXLocator_getColumnNumber_Proxy(ISAXLocator *This,int *pnColumn);
    void __RPC_STUB ISAXLocator_getColumnNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXLocator_getLineNumber_Proxy(ISAXLocator *This,int *pnLine);
    void __RPC_STUB ISAXLocator_getLineNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXLocator_getPublicId_Proxy(ISAXLocator *This,const wchar_t **ppwchPublicId);
    void __RPC_STUB ISAXLocator_getPublicId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXLocator_getSystemId_Proxy(ISAXLocator *This,const wchar_t **ppwchSystemId);
    void __RPC_STUB ISAXLocator_getSystemId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISAXEntityResolver_INTERFACE_DEFINED__
#define __ISAXEntityResolver_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISAXEntityResolver;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISAXEntityResolver : public IUnknown {
    public:
      virtual HRESULT WINAPI resolveEntity(const wchar_t *pwchPublicId,const wchar_t *pwchSystemId,VARIANT *pvarInput) = 0;
    };
#else
    typedef struct ISAXEntityResolverVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISAXEntityResolver *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISAXEntityResolver *This);
	ULONG (WINAPI *Release)(ISAXEntityResolver *This);
	HRESULT (WINAPI *resolveEntity)(ISAXEntityResolver *This,const wchar_t *pwchPublicId,const wchar_t *pwchSystemId,VARIANT *pvarInput);
      END_INTERFACE
    } ISAXEntityResolverVtbl;
    struct ISAXEntityResolver {
      CONST_VTBL struct ISAXEntityResolverVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISAXEntityResolver_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISAXEntityResolver_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISAXEntityResolver_Release(This) (This)->lpVtbl->Release(This)
#define ISAXEntityResolver_resolveEntity(This,pwchPublicId,pwchSystemId,pvarInput) (This)->lpVtbl->resolveEntity(This,pwchPublicId,pwchSystemId,pvarInput)
#endif
#endif
    HRESULT WINAPI ISAXEntityResolver_resolveEntity_Proxy(ISAXEntityResolver *This,const wchar_t *pwchPublicId,const wchar_t *pwchSystemId,VARIANT *pvarInput);
    void __RPC_STUB ISAXEntityResolver_resolveEntity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISAXContentHandler_INTERFACE_DEFINED__
#define __ISAXContentHandler_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISAXContentHandler;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISAXContentHandler : public IUnknown {
    public:
      virtual HRESULT WINAPI putDocumentLocator(ISAXLocator *pLocator) = 0;
      virtual HRESULT WINAPI startDocument(void) = 0;
      virtual HRESULT WINAPI endDocument(void) = 0;
      virtual HRESULT WINAPI startPrefixMapping(const wchar_t *pwchPrefix,int cchPrefix,const wchar_t *pwchUri,int cchUri) = 0;
      virtual HRESULT WINAPI endPrefixMapping(const wchar_t *pwchPrefix,int cchPrefix) = 0;
      virtual HRESULT WINAPI startElement(const wchar_t *pwchNamespaceUri,int cchNamespaceUri,const wchar_t *pwchLocalName,int cchLocalName,const wchar_t *pwchQName,int cchQName,ISAXAttributes *pAttributes) = 0;
      virtual HRESULT WINAPI endElement(const wchar_t *pwchNamespaceUri,int cchNamespaceUri,const wchar_t *pwchLocalName,int cchLocalName,const wchar_t *pwchQName,int cchQName) = 0;
      virtual HRESULT WINAPI characters(const wchar_t *pwchChars,int cchChars) = 0;
      virtual HRESULT WINAPI ignorableWhitespace(const wchar_t *pwchChars,int cchChars) = 0;
      virtual HRESULT WINAPI processingInstruction(const wchar_t *pwchTarget,int cchTarget,const wchar_t *pwchData,int cchData) = 0;
      virtual HRESULT WINAPI skippedEntity(const wchar_t *pwchName,int cchName) = 0;
    };
#else
    typedef struct ISAXContentHandlerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISAXContentHandler *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISAXContentHandler *This);
	ULONG (WINAPI *Release)(ISAXContentHandler *This);
	HRESULT (WINAPI *putDocumentLocator)(ISAXContentHandler *This,ISAXLocator *pLocator);
	HRESULT (WINAPI *startDocument)(ISAXContentHandler *This);
	HRESULT (WINAPI *endDocument)(ISAXContentHandler *This);
	HRESULT (WINAPI *startPrefixMapping)(ISAXContentHandler *This,const wchar_t *pwchPrefix,int cchPrefix,const wchar_t *pwchUri,int cchUri);
	HRESULT (WINAPI *endPrefixMapping)(ISAXContentHandler *This,const wchar_t *pwchPrefix,int cchPrefix);
	HRESULT (WINAPI *startElement)(ISAXContentHandler *This,const wchar_t *pwchNamespaceUri,int cchNamespaceUri,const wchar_t *pwchLocalName,int cchLocalName,const wchar_t *pwchQName,int cchQName,ISAXAttributes *pAttributes);
	HRESULT (WINAPI *endElement)(ISAXContentHandler *This,const wchar_t *pwchNamespaceUri,int cchNamespaceUri,const wchar_t *pwchLocalName,int cchLocalName,const wchar_t *pwchQName,int cchQName);
	HRESULT (WINAPI *characters)(ISAXContentHandler *This,const wchar_t *pwchChars,int cchChars);
	HRESULT (WINAPI *ignorableWhitespace)(ISAXContentHandler *This,const wchar_t *pwchChars,int cchChars);
	HRESULT (WINAPI *processingInstruction)(ISAXContentHandler *This,const wchar_t *pwchTarget,int cchTarget,const wchar_t *pwchData,int cchData);
	HRESULT (WINAPI *skippedEntity)(ISAXContentHandler *This,const wchar_t *pwchName,int cchName);
      END_INTERFACE
    } ISAXContentHandlerVtbl;
    struct ISAXContentHandler {
      CONST_VTBL struct ISAXContentHandlerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISAXContentHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISAXContentHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISAXContentHandler_Release(This) (This)->lpVtbl->Release(This)
#define ISAXContentHandler_putDocumentLocator(This,pLocator) (This)->lpVtbl->putDocumentLocator(This,pLocator)
#define ISAXContentHandler_startDocument(This) (This)->lpVtbl->startDocument(This)
#define ISAXContentHandler_endDocument(This) (This)->lpVtbl->endDocument(This)
#define ISAXContentHandler_startPrefixMapping(This,pwchPrefix,cchPrefix,pwchUri,cchUri) (This)->lpVtbl->startPrefixMapping(This,pwchPrefix,cchPrefix,pwchUri,cchUri)
#define ISAXContentHandler_endPrefixMapping(This,pwchPrefix,cchPrefix) (This)->lpVtbl->endPrefixMapping(This,pwchPrefix,cchPrefix)
#define ISAXContentHandler_startElement(This,pwchNamespaceUri,cchNamespaceUri,pwchLocalName,cchLocalName,pwchQName,cchQName,pAttributes) (This)->lpVtbl->startElement(This,pwchNamespaceUri,cchNamespaceUri,pwchLocalName,cchLocalName,pwchQName,cchQName,pAttributes)
#define ISAXContentHandler_endElement(This,pwchNamespaceUri,cchNamespaceUri,pwchLocalName,cchLocalName,pwchQName,cchQName) (This)->lpVtbl->endElement(This,pwchNamespaceUri,cchNamespaceUri,pwchLocalName,cchLocalName,pwchQName,cchQName)
#define ISAXContentHandler_characters(This,pwchChars,cchChars) (This)->lpVtbl->characters(This,pwchChars,cchChars)
#define ISAXContentHandler_ignorableWhitespace(This,pwchChars,cchChars) (This)->lpVtbl->ignorableWhitespace(This,pwchChars,cchChars)
#define ISAXContentHandler_processingInstruction(This,pwchTarget,cchTarget,pwchData,cchData) (This)->lpVtbl->processingInstruction(This,pwchTarget,cchTarget,pwchData,cchData)
#define ISAXContentHandler_skippedEntity(This,pwchName,cchName) (This)->lpVtbl->skippedEntity(This,pwchName,cchName)
#endif
#endif
    HRESULT WINAPI ISAXContentHandler_putDocumentLocator_Proxy(ISAXContentHandler *This,ISAXLocator *pLocator);
    void __RPC_STUB ISAXContentHandler_putDocumentLocator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXContentHandler_startDocument_Proxy(ISAXContentHandler *This);
    void __RPC_STUB ISAXContentHandler_startDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXContentHandler_endDocument_Proxy(ISAXContentHandler *This);
    void __RPC_STUB ISAXContentHandler_endDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXContentHandler_startPrefixMapping_Proxy(ISAXContentHandler *This,const wchar_t *pwchPrefix,int cchPrefix,const wchar_t *pwchUri,int cchUri);
    void __RPC_STUB ISAXContentHandler_startPrefixMapping_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXContentHandler_endPrefixMapping_Proxy(ISAXContentHandler *This,const wchar_t *pwchPrefix,int cchPrefix);
    void __RPC_STUB ISAXContentHandler_endPrefixMapping_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXContentHandler_startElement_Proxy(ISAXContentHandler *This,const wchar_t *pwchNamespaceUri,int cchNamespaceUri,const wchar_t *pwchLocalName,int cchLocalName,const wchar_t *pwchQName,int cchQName,ISAXAttributes *pAttributes);
    void __RPC_STUB ISAXContentHandler_startElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXContentHandler_endElement_Proxy(ISAXContentHandler *This,const wchar_t *pwchNamespaceUri,int cchNamespaceUri,const wchar_t *pwchLocalName,int cchLocalName,const wchar_t *pwchQName,int cchQName);
    void __RPC_STUB ISAXContentHandler_endElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXContentHandler_characters_Proxy(ISAXContentHandler *This,const wchar_t *pwchChars,int cchChars);
    void __RPC_STUB ISAXContentHandler_characters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXContentHandler_ignorableWhitespace_Proxy(ISAXContentHandler *This,const wchar_t *pwchChars,int cchChars);
    void __RPC_STUB ISAXContentHandler_ignorableWhitespace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXContentHandler_processingInstruction_Proxy(ISAXContentHandler *This,const wchar_t *pwchTarget,int cchTarget,const wchar_t *pwchData,int cchData);
    void __RPC_STUB ISAXContentHandler_processingInstruction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXContentHandler_skippedEntity_Proxy(ISAXContentHandler *This,const wchar_t *pwchName,int cchName);
    void __RPC_STUB ISAXContentHandler_skippedEntity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISAXDTDHandler_INTERFACE_DEFINED__
#define __ISAXDTDHandler_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISAXDTDHandler;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISAXDTDHandler : public IUnknown {
    public:
      virtual HRESULT WINAPI notationDecl(const wchar_t *pwchName,int cchName,const wchar_t *pwchPublicId,int cchPublicId,const wchar_t *pwchSystemId,int cchSystemId) = 0;
      virtual HRESULT WINAPI unparsedEntityDecl(const wchar_t *pwchName,int cchName,const wchar_t *pwchPublicId,int cchPublicId,const wchar_t *pwchSystemId,int cchSystemId,const wchar_t *pwchNotationName,int cchNotationName) = 0;
    };
#else
    typedef struct ISAXDTDHandlerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISAXDTDHandler *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISAXDTDHandler *This);
	ULONG (WINAPI *Release)(ISAXDTDHandler *This);
	HRESULT (WINAPI *notationDecl)(ISAXDTDHandler *This,const wchar_t *pwchName,int cchName,const wchar_t *pwchPublicId,int cchPublicId,const wchar_t *pwchSystemId,int cchSystemId);
	HRESULT (WINAPI *unparsedEntityDecl)(ISAXDTDHandler *This,const wchar_t *pwchName,int cchName,const wchar_t *pwchPublicId,int cchPublicId,const wchar_t *pwchSystemId,int cchSystemId,const wchar_t *pwchNotationName,int cchNotationName);
      END_INTERFACE
    } ISAXDTDHandlerVtbl;
    struct ISAXDTDHandler {
      CONST_VTBL struct ISAXDTDHandlerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISAXDTDHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISAXDTDHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISAXDTDHandler_Release(This) (This)->lpVtbl->Release(This)
#define ISAXDTDHandler_notationDecl(This,pwchName,cchName,pwchPublicId,cchPublicId,pwchSystemId,cchSystemId) (This)->lpVtbl->notationDecl(This,pwchName,cchName,pwchPublicId,cchPublicId,pwchSystemId,cchSystemId)
#define ISAXDTDHandler_unparsedEntityDecl(This,pwchName,cchName,pwchPublicId,cchPublicId,pwchSystemId,cchSystemId,pwchNotationName,cchNotationName) (This)->lpVtbl->unparsedEntityDecl(This,pwchName,cchName,pwchPublicId,cchPublicId,pwchSystemId,cchSystemId,pwchNotationName,cchNotationName)
#endif
#endif
    HRESULT WINAPI ISAXDTDHandler_notationDecl_Proxy(ISAXDTDHandler *This,const wchar_t *pwchName,int cchName,const wchar_t *pwchPublicId,int cchPublicId,const wchar_t *pwchSystemId,int cchSystemId);
    void __RPC_STUB ISAXDTDHandler_notationDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXDTDHandler_unparsedEntityDecl_Proxy(ISAXDTDHandler *This,const wchar_t *pwchName,int cchName,const wchar_t *pwchPublicId,int cchPublicId,const wchar_t *pwchSystemId,int cchSystemId,const wchar_t *pwchNotationName,int cchNotationName);
    void __RPC_STUB ISAXDTDHandler_unparsedEntityDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISAXErrorHandler_INTERFACE_DEFINED__
#define __ISAXErrorHandler_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISAXErrorHandler;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISAXErrorHandler : public IUnknown {
    public:
      virtual HRESULT WINAPI error(ISAXLocator *pLocator,const wchar_t *pwchErrorMessage,HRESULT hrErrorCode) = 0;
      virtual HRESULT WINAPI fatalError(ISAXLocator *pLocator,const wchar_t *pwchErrorMessage,HRESULT hrErrorCode) = 0;
      virtual HRESULT WINAPI ignorableWarning(ISAXLocator *pLocator,const wchar_t *pwchErrorMessage,HRESULT hrErrorCode) = 0;
    };
#else
    typedef struct ISAXErrorHandlerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISAXErrorHandler *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISAXErrorHandler *This);
	ULONG (WINAPI *Release)(ISAXErrorHandler *This);
	HRESULT (WINAPI *error)(ISAXErrorHandler *This,ISAXLocator *pLocator,const wchar_t *pwchErrorMessage,HRESULT hrErrorCode);
	HRESULT (WINAPI *fatalError)(ISAXErrorHandler *This,ISAXLocator *pLocator,const wchar_t *pwchErrorMessage,HRESULT hrErrorCode);
	HRESULT (WINAPI *ignorableWarning)(ISAXErrorHandler *This,ISAXLocator *pLocator,const wchar_t *pwchErrorMessage,HRESULT hrErrorCode);
      END_INTERFACE
    } ISAXErrorHandlerVtbl;
    struct ISAXErrorHandler {
      CONST_VTBL struct ISAXErrorHandlerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISAXErrorHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISAXErrorHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISAXErrorHandler_Release(This) (This)->lpVtbl->Release(This)
#define ISAXErrorHandler_error(This,pLocator,pwchErrorMessage,hrErrorCode) (This)->lpVtbl->error(This,pLocator,pwchErrorMessage,hrErrorCode)
#define ISAXErrorHandler_fatalError(This,pLocator,pwchErrorMessage,hrErrorCode) (This)->lpVtbl->fatalError(This,pLocator,pwchErrorMessage,hrErrorCode)
#define ISAXErrorHandler_ignorableWarning(This,pLocator,pwchErrorMessage,hrErrorCode) (This)->lpVtbl->ignorableWarning(This,pLocator,pwchErrorMessage,hrErrorCode)
#endif
#endif
    HRESULT WINAPI ISAXErrorHandler_error_Proxy(ISAXErrorHandler *This,ISAXLocator *pLocator,const wchar_t *pwchErrorMessage,HRESULT hrErrorCode);
    void __RPC_STUB ISAXErrorHandler_error_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXErrorHandler_fatalError_Proxy(ISAXErrorHandler *This,ISAXLocator *pLocator,const wchar_t *pwchErrorMessage,HRESULT hrErrorCode);
    void __RPC_STUB ISAXErrorHandler_fatalError_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXErrorHandler_ignorableWarning_Proxy(ISAXErrorHandler *This,ISAXLocator *pLocator,const wchar_t *pwchErrorMessage,HRESULT hrErrorCode);
    void __RPC_STUB ISAXErrorHandler_ignorableWarning_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISAXLexicalHandler_INTERFACE_DEFINED__
#define __ISAXLexicalHandler_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISAXLexicalHandler;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISAXLexicalHandler : public IUnknown {
    public:
      virtual HRESULT WINAPI startDTD(const wchar_t *pwchName,int cchName,const wchar_t *pwchPublicId,int cchPublicId,const wchar_t *pwchSystemId,int cchSystemId) = 0;
      virtual HRESULT WINAPI endDTD(void) = 0;
      virtual HRESULT WINAPI startEntity(const wchar_t *pwchName,int cchName) = 0;
      virtual HRESULT WINAPI endEntity(const wchar_t *pwchName,int cchName) = 0;
      virtual HRESULT WINAPI startCDATA(void) = 0;
      virtual HRESULT WINAPI endCDATA(void) = 0;
      virtual HRESULT WINAPI comment(const wchar_t *pwchChars,int cchChars) = 0;
    };
#else
    typedef struct ISAXLexicalHandlerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISAXLexicalHandler *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISAXLexicalHandler *This);
	ULONG (WINAPI *Release)(ISAXLexicalHandler *This);
	HRESULT (WINAPI *startDTD)(ISAXLexicalHandler *This,const wchar_t *pwchName,int cchName,const wchar_t *pwchPublicId,int cchPublicId,const wchar_t *pwchSystemId,int cchSystemId);
	HRESULT (WINAPI *endDTD)(ISAXLexicalHandler *This);
	HRESULT (WINAPI *startEntity)(ISAXLexicalHandler *This,const wchar_t *pwchName,int cchName);
	HRESULT (WINAPI *endEntity)(ISAXLexicalHandler *This,const wchar_t *pwchName,int cchName);
	HRESULT (WINAPI *startCDATA)(ISAXLexicalHandler *This);
	HRESULT (WINAPI *endCDATA)(ISAXLexicalHandler *This);
	HRESULT (WINAPI *comment)(ISAXLexicalHandler *This,const wchar_t *pwchChars,int cchChars);
      END_INTERFACE
    } ISAXLexicalHandlerVtbl;
    struct ISAXLexicalHandler {
      CONST_VTBL struct ISAXLexicalHandlerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISAXLexicalHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISAXLexicalHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISAXLexicalHandler_Release(This) (This)->lpVtbl->Release(This)
#define ISAXLexicalHandler_startDTD(This,pwchName,cchName,pwchPublicId,cchPublicId,pwchSystemId,cchSystemId) (This)->lpVtbl->startDTD(This,pwchName,cchName,pwchPublicId,cchPublicId,pwchSystemId,cchSystemId)
#define ISAXLexicalHandler_endDTD(This) (This)->lpVtbl->endDTD(This)
#define ISAXLexicalHandler_startEntity(This,pwchName,cchName) (This)->lpVtbl->startEntity(This,pwchName,cchName)
#define ISAXLexicalHandler_endEntity(This,pwchName,cchName) (This)->lpVtbl->endEntity(This,pwchName,cchName)
#define ISAXLexicalHandler_startCDATA(This) (This)->lpVtbl->startCDATA(This)
#define ISAXLexicalHandler_endCDATA(This) (This)->lpVtbl->endCDATA(This)
#define ISAXLexicalHandler_comment(This,pwchChars,cchChars) (This)->lpVtbl->comment(This,pwchChars,cchChars)
#endif
#endif
    HRESULT WINAPI ISAXLexicalHandler_startDTD_Proxy(ISAXLexicalHandler *This,const wchar_t *pwchName,int cchName,const wchar_t *pwchPublicId,int cchPublicId,const wchar_t *pwchSystemId,int cchSystemId);
    void __RPC_STUB ISAXLexicalHandler_startDTD_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXLexicalHandler_endDTD_Proxy(ISAXLexicalHandler *This);
    void __RPC_STUB ISAXLexicalHandler_endDTD_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXLexicalHandler_startEntity_Proxy(ISAXLexicalHandler *This,const wchar_t *pwchName,int cchName);
    void __RPC_STUB ISAXLexicalHandler_startEntity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXLexicalHandler_endEntity_Proxy(ISAXLexicalHandler *This,const wchar_t *pwchName,int cchName);
    void __RPC_STUB ISAXLexicalHandler_endEntity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXLexicalHandler_startCDATA_Proxy(ISAXLexicalHandler *This);
    void __RPC_STUB ISAXLexicalHandler_startCDATA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXLexicalHandler_endCDATA_Proxy(ISAXLexicalHandler *This);
    void __RPC_STUB ISAXLexicalHandler_endCDATA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXLexicalHandler_comment_Proxy(ISAXLexicalHandler *This,const wchar_t *pwchChars,int cchChars);
    void __RPC_STUB ISAXLexicalHandler_comment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISAXDeclHandler_INTERFACE_DEFINED__
#define __ISAXDeclHandler_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISAXDeclHandler;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISAXDeclHandler : public IUnknown {
    public:
      virtual HRESULT WINAPI elementDecl(const wchar_t *pwchName,int cchName,const wchar_t *pwchModel,int cchModel) = 0;
      virtual HRESULT WINAPI attributeDecl(const wchar_t *pwchElementName,int cchElementName,const wchar_t *pwchAttributeName,int cchAttributeName,const wchar_t *pwchType,int cchType,const wchar_t *pwchValueDefault,int cchValueDefault,const wchar_t *pwchValue,int cchValue) = 0;
      virtual HRESULT WINAPI internalEntityDecl(const wchar_t *pwchName,int cchName,const wchar_t *pwchValue,int cchValue) = 0;
      virtual HRESULT WINAPI externalEntityDecl(const wchar_t *pwchName,int cchName,const wchar_t *pwchPublicId,int cchPublicId,const wchar_t *pwchSystemId,int cchSystemId) = 0;
    };
#else
    typedef struct ISAXDeclHandlerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISAXDeclHandler *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISAXDeclHandler *This);
	ULONG (WINAPI *Release)(ISAXDeclHandler *This);
	HRESULT (WINAPI *elementDecl)(ISAXDeclHandler *This,const wchar_t *pwchName,int cchName,const wchar_t *pwchModel,int cchModel);
	HRESULT (WINAPI *attributeDecl)(ISAXDeclHandler *This,const wchar_t *pwchElementName,int cchElementName,const wchar_t *pwchAttributeName,int cchAttributeName,const wchar_t *pwchType,int cchType,const wchar_t *pwchValueDefault,int cchValueDefault,const wchar_t *pwchValue,int cchValue);
	HRESULT (WINAPI *internalEntityDecl)(ISAXDeclHandler *This,const wchar_t *pwchName,int cchName,const wchar_t *pwchValue,int cchValue);
	HRESULT (WINAPI *externalEntityDecl)(ISAXDeclHandler *This,const wchar_t *pwchName,int cchName,const wchar_t *pwchPublicId,int cchPublicId,const wchar_t *pwchSystemId,int cchSystemId);
      END_INTERFACE
    } ISAXDeclHandlerVtbl;
    struct ISAXDeclHandler {
      CONST_VTBL struct ISAXDeclHandlerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISAXDeclHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISAXDeclHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISAXDeclHandler_Release(This) (This)->lpVtbl->Release(This)
#define ISAXDeclHandler_elementDecl(This,pwchName,cchName,pwchModel,cchModel) (This)->lpVtbl->elementDecl(This,pwchName,cchName,pwchModel,cchModel)
#define ISAXDeclHandler_attributeDecl(This,pwchElementName,cchElementName,pwchAttributeName,cchAttributeName,pwchType,cchType,pwchValueDefault,cchValueDefault,pwchValue,cchValue) (This)->lpVtbl->attributeDecl(This,pwchElementName,cchElementName,pwchAttributeName,cchAttributeName,pwchType,cchType,pwchValueDefault,cchValueDefault,pwchValue,cchValue)
#define ISAXDeclHandler_internalEntityDecl(This,pwchName,cchName,pwchValue,cchValue) (This)->lpVtbl->internalEntityDecl(This,pwchName,cchName,pwchValue,cchValue)
#define ISAXDeclHandler_externalEntityDecl(This,pwchName,cchName,pwchPublicId,cchPublicId,pwchSystemId,cchSystemId) (This)->lpVtbl->externalEntityDecl(This,pwchName,cchName,pwchPublicId,cchPublicId,pwchSystemId,cchSystemId)
#endif
#endif
    HRESULT WINAPI ISAXDeclHandler_elementDecl_Proxy(ISAXDeclHandler *This,const wchar_t *pwchName,int cchName,const wchar_t *pwchModel,int cchModel);
    void __RPC_STUB ISAXDeclHandler_elementDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXDeclHandler_attributeDecl_Proxy(ISAXDeclHandler *This,const wchar_t *pwchElementName,int cchElementName,const wchar_t *pwchAttributeName,int cchAttributeName,const wchar_t *pwchType,int cchType,const wchar_t *pwchValueDefault,int cchValueDefault,const wchar_t *pwchValue,int cchValue);
    void __RPC_STUB ISAXDeclHandler_attributeDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXDeclHandler_internalEntityDecl_Proxy(ISAXDeclHandler *This,const wchar_t *pwchName,int cchName,const wchar_t *pwchValue,int cchValue);
    void __RPC_STUB ISAXDeclHandler_internalEntityDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXDeclHandler_externalEntityDecl_Proxy(ISAXDeclHandler *This,const wchar_t *pwchName,int cchName,const wchar_t *pwchPublicId,int cchPublicId,const wchar_t *pwchSystemId,int cchSystemId);
    void __RPC_STUB ISAXDeclHandler_externalEntityDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISAXAttributes_INTERFACE_DEFINED__
#define __ISAXAttributes_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISAXAttributes;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISAXAttributes : public IUnknown {
    public:
      virtual HRESULT WINAPI getLength(int *pnLength) = 0;
      virtual HRESULT WINAPI getURI(int nIndex,const wchar_t **ppwchUri,int *pcchUri) = 0;
      virtual HRESULT WINAPI getLocalName(int nIndex,const wchar_t **ppwchLocalName,int *pcchLocalName) = 0;
      virtual HRESULT WINAPI getQName(int nIndex,const wchar_t **ppwchQName,int *pcchQName) = 0;
      virtual HRESULT WINAPI getName(int nIndex,const wchar_t **ppwchUri,int *pcchUri,const wchar_t **ppwchLocalName,int *pcchLocalName,const wchar_t **ppwchQName,int *pcchQName) = 0;
      virtual HRESULT WINAPI getIndexFromName(const wchar_t *pwchUri,int cchUri,const wchar_t *pwchLocalName,int cchLocalName,int *pnIndex) = 0;
      virtual HRESULT WINAPI getIndexFromQName(const wchar_t *pwchQName,int cchQName,int *pnIndex) = 0;
      virtual HRESULT WINAPI getType(int nIndex,const wchar_t **ppwchType,int *pcchType) = 0;
      virtual HRESULT WINAPI getTypeFromName(const wchar_t *pwchUri,int cchUri,const wchar_t *pwchLocalName,int cchLocalName,const wchar_t **ppwchType,int *pcchType) = 0;
      virtual HRESULT WINAPI getTypeFromQName(const wchar_t *pwchQName,int cchQName,const wchar_t **ppwchType,int *pcchType) = 0;
      virtual HRESULT WINAPI getValue(int nIndex,const wchar_t **ppwchValue,int *pcchValue) = 0;
      virtual HRESULT WINAPI getValueFromName(const wchar_t *pwchUri,int cchUri,const wchar_t *pwchLocalName,int cchLocalName,const wchar_t **ppwchValue,int *pcchValue) = 0;
      virtual HRESULT WINAPI getValueFromQName(const wchar_t *pwchQName,int cchQName,const wchar_t **ppwchValue,int *pcchValue) = 0;
    };
#else
    typedef struct ISAXAttributesVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISAXAttributes *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISAXAttributes *This);
	ULONG (WINAPI *Release)(ISAXAttributes *This);
	HRESULT (WINAPI *getLength)(ISAXAttributes *This,int *pnLength);
	HRESULT (WINAPI *getURI)(ISAXAttributes *This,int nIndex,const wchar_t **ppwchUri,int *pcchUri);
	HRESULT (WINAPI *getLocalName)(ISAXAttributes *This,int nIndex,const wchar_t **ppwchLocalName,int *pcchLocalName);
	HRESULT (WINAPI *getQName)(ISAXAttributes *This,int nIndex,const wchar_t **ppwchQName,int *pcchQName);
	HRESULT (WINAPI *getName)(ISAXAttributes *This,int nIndex,const wchar_t **ppwchUri,int *pcchUri,const wchar_t **ppwchLocalName,int *pcchLocalName,const wchar_t **ppwchQName,int *pcchQName);
	HRESULT (WINAPI *getIndexFromName)(ISAXAttributes *This,const wchar_t *pwchUri,int cchUri,const wchar_t *pwchLocalName,int cchLocalName,int *pnIndex);
	HRESULT (WINAPI *getIndexFromQName)(ISAXAttributes *This,const wchar_t *pwchQName,int cchQName,int *pnIndex);
	HRESULT (WINAPI *getType)(ISAXAttributes *This,int nIndex,const wchar_t **ppwchType,int *pcchType);
	HRESULT (WINAPI *getTypeFromName)(ISAXAttributes *This,const wchar_t *pwchUri,int cchUri,const wchar_t *pwchLocalName,int cchLocalName,const wchar_t **ppwchType,int *pcchType);
	HRESULT (WINAPI *getTypeFromQName)(ISAXAttributes *This,const wchar_t *pwchQName,int cchQName,const wchar_t **ppwchType,int *pcchType);
	HRESULT (WINAPI *getValue)(ISAXAttributes *This,int nIndex,const wchar_t **ppwchValue,int *pcchValue);
	HRESULT (WINAPI *getValueFromName)(ISAXAttributes *This,const wchar_t *pwchUri,int cchUri,const wchar_t *pwchLocalName,int cchLocalName,const wchar_t **ppwchValue,int *pcchValue);
	HRESULT (WINAPI *getValueFromQName)(ISAXAttributes *This,const wchar_t *pwchQName,int cchQName,const wchar_t **ppwchValue,int *pcchValue);
      END_INTERFACE
    } ISAXAttributesVtbl;
    struct ISAXAttributes {
      CONST_VTBL struct ISAXAttributesVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISAXAttributes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISAXAttributes_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISAXAttributes_Release(This) (This)->lpVtbl->Release(This)
#define ISAXAttributes_getLength(This,pnLength) (This)->lpVtbl->getLength(This,pnLength)
#define ISAXAttributes_getURI(This,nIndex,ppwchUri,pcchUri) (This)->lpVtbl->getURI(This,nIndex,ppwchUri,pcchUri)
#define ISAXAttributes_getLocalName(This,nIndex,ppwchLocalName,pcchLocalName) (This)->lpVtbl->getLocalName(This,nIndex,ppwchLocalName,pcchLocalName)
#define ISAXAttributes_getQName(This,nIndex,ppwchQName,pcchQName) (This)->lpVtbl->getQName(This,nIndex,ppwchQName,pcchQName)
#define ISAXAttributes_getName(This,nIndex,ppwchUri,pcchUri,ppwchLocalName,pcchLocalName,ppwchQName,pcchQName) (This)->lpVtbl->getName(This,nIndex,ppwchUri,pcchUri,ppwchLocalName,pcchLocalName,ppwchQName,pcchQName)
#define ISAXAttributes_getIndexFromName(This,pwchUri,cchUri,pwchLocalName,cchLocalName,pnIndex) (This)->lpVtbl->getIndexFromName(This,pwchUri,cchUri,pwchLocalName,cchLocalName,pnIndex)
#define ISAXAttributes_getIndexFromQName(This,pwchQName,cchQName,pnIndex) (This)->lpVtbl->getIndexFromQName(This,pwchQName,cchQName,pnIndex)
#define ISAXAttributes_getType(This,nIndex,ppwchType,pcchType) (This)->lpVtbl->getType(This,nIndex,ppwchType,pcchType)
#define ISAXAttributes_getTypeFromName(This,pwchUri,cchUri,pwchLocalName,cchLocalName,ppwchType,pcchType) (This)->lpVtbl->getTypeFromName(This,pwchUri,cchUri,pwchLocalName,cchLocalName,ppwchType,pcchType)
#define ISAXAttributes_getTypeFromQName(This,pwchQName,cchQName,ppwchType,pcchType) (This)->lpVtbl->getTypeFromQName(This,pwchQName,cchQName,ppwchType,pcchType)
#define ISAXAttributes_getValue(This,nIndex,ppwchValue,pcchValue) (This)->lpVtbl->getValue(This,nIndex,ppwchValue,pcchValue)
#define ISAXAttributes_getValueFromName(This,pwchUri,cchUri,pwchLocalName,cchLocalName,ppwchValue,pcchValue) (This)->lpVtbl->getValueFromName(This,pwchUri,cchUri,pwchLocalName,cchLocalName,ppwchValue,pcchValue)
#define ISAXAttributes_getValueFromQName(This,pwchQName,cchQName,ppwchValue,pcchValue) (This)->lpVtbl->getValueFromQName(This,pwchQName,cchQName,ppwchValue,pcchValue)
#endif
#endif
    HRESULT WINAPI ISAXAttributes_getLength_Proxy(ISAXAttributes *This,int *pnLength);
    void __RPC_STUB ISAXAttributes_getLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXAttributes_getURI_Proxy(ISAXAttributes *This,int nIndex,const wchar_t **ppwchUri,int *pcchUri);
    void __RPC_STUB ISAXAttributes_getURI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXAttributes_getLocalName_Proxy(ISAXAttributes *This,int nIndex,const wchar_t **ppwchLocalName,int *pcchLocalName);
    void __RPC_STUB ISAXAttributes_getLocalName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXAttributes_getQName_Proxy(ISAXAttributes *This,int nIndex,const wchar_t **ppwchQName,int *pcchQName);
    void __RPC_STUB ISAXAttributes_getQName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXAttributes_getName_Proxy(ISAXAttributes *This,int nIndex,const wchar_t **ppwchUri,int *pcchUri,const wchar_t **ppwchLocalName,int *pcchLocalName,const wchar_t **ppwchQName,int *pcchQName);
    void __RPC_STUB ISAXAttributes_getName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXAttributes_getIndexFromName_Proxy(ISAXAttributes *This,const wchar_t *pwchUri,int cchUri,const wchar_t *pwchLocalName,int cchLocalName,int *pnIndex);
    void __RPC_STUB ISAXAttributes_getIndexFromName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXAttributes_getIndexFromQName_Proxy(ISAXAttributes *This,const wchar_t *pwchQName,int cchQName,int *pnIndex);
    void __RPC_STUB ISAXAttributes_getIndexFromQName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXAttributes_getType_Proxy(ISAXAttributes *This,int nIndex,const wchar_t **ppwchType,int *pcchType);
    void __RPC_STUB ISAXAttributes_getType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXAttributes_getTypeFromName_Proxy(ISAXAttributes *This,const wchar_t *pwchUri,int cchUri,const wchar_t *pwchLocalName,int cchLocalName,const wchar_t **ppwchType,int *pcchType);
    void __RPC_STUB ISAXAttributes_getTypeFromName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXAttributes_getTypeFromQName_Proxy(ISAXAttributes *This,const wchar_t *pwchQName,int cchQName,const wchar_t **ppwchType,int *pcchType);
    void __RPC_STUB ISAXAttributes_getTypeFromQName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXAttributes_getValue_Proxy(ISAXAttributes *This,int nIndex,const wchar_t **ppwchValue,int *pcchValue);
    void __RPC_STUB ISAXAttributes_getValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXAttributes_getValueFromName_Proxy(ISAXAttributes *This,const wchar_t *pwchUri,int cchUri,const wchar_t *pwchLocalName,int cchLocalName,const wchar_t **ppwchValue,int *pcchValue);
    void __RPC_STUB ISAXAttributes_getValueFromName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISAXAttributes_getValueFromQName_Proxy(ISAXAttributes *This,const wchar_t *pwchQName,int cchQName,const wchar_t **ppwchValue,int *pcchValue);
    void __RPC_STUB ISAXAttributes_getValueFromQName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IVBSAXXMLReader_INTERFACE_DEFINED__
#define __IVBSAXXMLReader_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IVBSAXXMLReader;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IVBSAXXMLReader : public IDispatch {
    public:
      virtual HRESULT WINAPI getFeature(BSTR strName,VARIANT_BOOL *fValue) = 0;
      virtual HRESULT WINAPI putFeature(BSTR strName,VARIANT_BOOL fValue) = 0;
      virtual HRESULT WINAPI getProperty(BSTR strName,VARIANT *varValue) = 0;
      virtual HRESULT WINAPI putProperty(BSTR strName,VARIANT varValue) = 0;
      virtual HRESULT WINAPI get_entityResolver(IVBSAXEntityResolver **oResolver) = 0;
      virtual HRESULT WINAPI putref_entityResolver(IVBSAXEntityResolver *oResolver) = 0;
      virtual HRESULT WINAPI get_contentHandler(IVBSAXContentHandler **oHandler) = 0;
      virtual HRESULT WINAPI putref_contentHandler(IVBSAXContentHandler *oHandler) = 0;
      virtual HRESULT WINAPI get_dtdHandler(IVBSAXDTDHandler **oHandler) = 0;
      virtual HRESULT WINAPI putref_dtdHandler(IVBSAXDTDHandler *oHandler) = 0;
      virtual HRESULT WINAPI get_errorHandler(IVBSAXErrorHandler **oHandler) = 0;
      virtual HRESULT WINAPI putref_errorHandler(IVBSAXErrorHandler *oHandler) = 0;
      virtual HRESULT WINAPI get_baseURL(BSTR *strBaseURL) = 0;
      virtual HRESULT WINAPI put_baseURL(BSTR strBaseURL) = 0;
      virtual HRESULT WINAPI get_secureBaseURL(BSTR *strSecureBaseURL) = 0;
      virtual HRESULT WINAPI put_secureBaseURL(BSTR strSecureBaseURL) = 0;
      virtual HRESULT WINAPI parse(VARIANT varInput) = 0;
      virtual HRESULT WINAPI parseURL(BSTR strURL) = 0;
    };
#else
    typedef struct IVBSAXXMLReaderVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IVBSAXXMLReader *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IVBSAXXMLReader *This);
	ULONG (WINAPI *Release)(IVBSAXXMLReader *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IVBSAXXMLReader *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IVBSAXXMLReader *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IVBSAXXMLReader *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IVBSAXXMLReader *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *getFeature)(IVBSAXXMLReader *This,BSTR strName,VARIANT_BOOL *fValue);
	HRESULT (WINAPI *putFeature)(IVBSAXXMLReader *This,BSTR strName,VARIANT_BOOL fValue);
	HRESULT (WINAPI *getProperty)(IVBSAXXMLReader *This,BSTR strName,VARIANT *varValue);
	HRESULT (WINAPI *putProperty)(IVBSAXXMLReader *This,BSTR strName,VARIANT varValue);
	HRESULT (WINAPI *get_entityResolver)(IVBSAXXMLReader *This,IVBSAXEntityResolver **oResolver);
	HRESULT (WINAPI *putref_entityResolver)(IVBSAXXMLReader *This,IVBSAXEntityResolver *oResolver);
	HRESULT (WINAPI *get_contentHandler)(IVBSAXXMLReader *This,IVBSAXContentHandler **oHandler);
	HRESULT (WINAPI *putref_contentHandler)(IVBSAXXMLReader *This,IVBSAXContentHandler *oHandler);
	HRESULT (WINAPI *get_dtdHandler)(IVBSAXXMLReader *This,IVBSAXDTDHandler **oHandler);
	HRESULT (WINAPI *putref_dtdHandler)(IVBSAXXMLReader *This,IVBSAXDTDHandler *oHandler);
	HRESULT (WINAPI *get_errorHandler)(IVBSAXXMLReader *This,IVBSAXErrorHandler **oHandler);
	HRESULT (WINAPI *putref_errorHandler)(IVBSAXXMLReader *This,IVBSAXErrorHandler *oHandler);
	HRESULT (WINAPI *get_baseURL)(IVBSAXXMLReader *This,BSTR *strBaseURL);
	HRESULT (WINAPI *put_baseURL)(IVBSAXXMLReader *This,BSTR strBaseURL);
	HRESULT (WINAPI *get_secureBaseURL)(IVBSAXXMLReader *This,BSTR *strSecureBaseURL);
	HRESULT (WINAPI *put_secureBaseURL)(IVBSAXXMLReader *This,BSTR strSecureBaseURL);
	HRESULT (WINAPI *parse)(IVBSAXXMLReader *This,VARIANT varInput);
	HRESULT (WINAPI *parseURL)(IVBSAXXMLReader *This,BSTR strURL);
      END_INTERFACE
    } IVBSAXXMLReaderVtbl;
    struct IVBSAXXMLReader {
      CONST_VTBL struct IVBSAXXMLReaderVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IVBSAXXMLReader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVBSAXXMLReader_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVBSAXXMLReader_Release(This) (This)->lpVtbl->Release(This)
#define IVBSAXXMLReader_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IVBSAXXMLReader_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IVBSAXXMLReader_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IVBSAXXMLReader_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IVBSAXXMLReader_getFeature(This,strName,fValue) (This)->lpVtbl->getFeature(This,strName,fValue)
#define IVBSAXXMLReader_putFeature(This,strName,fValue) (This)->lpVtbl->putFeature(This,strName,fValue)
#define IVBSAXXMLReader_getProperty(This,strName,varValue) (This)->lpVtbl->getProperty(This,strName,varValue)
#define IVBSAXXMLReader_putProperty(This,strName,varValue) (This)->lpVtbl->putProperty(This,strName,varValue)
#define IVBSAXXMLReader_get_entityResolver(This,oResolver) (This)->lpVtbl->get_entityResolver(This,oResolver)
#define IVBSAXXMLReader_putref_entityResolver(This,oResolver) (This)->lpVtbl->putref_entityResolver(This,oResolver)
#define IVBSAXXMLReader_get_contentHandler(This,oHandler) (This)->lpVtbl->get_contentHandler(This,oHandler)
#define IVBSAXXMLReader_putref_contentHandler(This,oHandler) (This)->lpVtbl->putref_contentHandler(This,oHandler)
#define IVBSAXXMLReader_get_dtdHandler(This,oHandler) (This)->lpVtbl->get_dtdHandler(This,oHandler)
#define IVBSAXXMLReader_putref_dtdHandler(This,oHandler) (This)->lpVtbl->putref_dtdHandler(This,oHandler)
#define IVBSAXXMLReader_get_errorHandler(This,oHandler) (This)->lpVtbl->get_errorHandler(This,oHandler)
#define IVBSAXXMLReader_putref_errorHandler(This,oHandler) (This)->lpVtbl->putref_errorHandler(This,oHandler)
#define IVBSAXXMLReader_get_baseURL(This,strBaseURL) (This)->lpVtbl->get_baseURL(This,strBaseURL)
#define IVBSAXXMLReader_put_baseURL(This,strBaseURL) (This)->lpVtbl->put_baseURL(This,strBaseURL)
#define IVBSAXXMLReader_get_secureBaseURL(This,strSecureBaseURL) (This)->lpVtbl->get_secureBaseURL(This,strSecureBaseURL)
#define IVBSAXXMLReader_put_secureBaseURL(This,strSecureBaseURL) (This)->lpVtbl->put_secureBaseURL(This,strSecureBaseURL)
#define IVBSAXXMLReader_parse(This,varInput) (This)->lpVtbl->parse(This,varInput)
#define IVBSAXXMLReader_parseURL(This,strURL) (This)->lpVtbl->parseURL(This,strURL)
#endif
#endif
    HRESULT WINAPI IVBSAXXMLReader_getFeature_Proxy(IVBSAXXMLReader *This,BSTR strName,VARIANT_BOOL *fValue);
    void __RPC_STUB IVBSAXXMLReader_getFeature_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_putFeature_Proxy(IVBSAXXMLReader *This,BSTR strName,VARIANT_BOOL fValue);
    void __RPC_STUB IVBSAXXMLReader_putFeature_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_getProperty_Proxy(IVBSAXXMLReader *This,BSTR strName,VARIANT *varValue);
    void __RPC_STUB IVBSAXXMLReader_getProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_putProperty_Proxy(IVBSAXXMLReader *This,BSTR strName,VARIANT varValue);
    void __RPC_STUB IVBSAXXMLReader_putProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_get_entityResolver_Proxy(IVBSAXXMLReader *This,IVBSAXEntityResolver **oResolver);
    void __RPC_STUB IVBSAXXMLReader_get_entityResolver_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_putref_entityResolver_Proxy(IVBSAXXMLReader *This,IVBSAXEntityResolver *oResolver);
    void __RPC_STUB IVBSAXXMLReader_putref_entityResolver_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_get_contentHandler_Proxy(IVBSAXXMLReader *This,IVBSAXContentHandler **oHandler);
    void __RPC_STUB IVBSAXXMLReader_get_contentHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_putref_contentHandler_Proxy(IVBSAXXMLReader *This,IVBSAXContentHandler *oHandler);
    void __RPC_STUB IVBSAXXMLReader_putref_contentHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_get_dtdHandler_Proxy(IVBSAXXMLReader *This,IVBSAXDTDHandler **oHandler);
    void __RPC_STUB IVBSAXXMLReader_get_dtdHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_putref_dtdHandler_Proxy(IVBSAXXMLReader *This,IVBSAXDTDHandler *oHandler);
    void __RPC_STUB IVBSAXXMLReader_putref_dtdHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_get_errorHandler_Proxy(IVBSAXXMLReader *This,IVBSAXErrorHandler **oHandler);
    void __RPC_STUB IVBSAXXMLReader_get_errorHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_putref_errorHandler_Proxy(IVBSAXXMLReader *This,IVBSAXErrorHandler *oHandler);
    void __RPC_STUB IVBSAXXMLReader_putref_errorHandler_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_get_baseURL_Proxy(IVBSAXXMLReader *This,BSTR *strBaseURL);
    void __RPC_STUB IVBSAXXMLReader_get_baseURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_put_baseURL_Proxy(IVBSAXXMLReader *This,BSTR strBaseURL);
    void __RPC_STUB IVBSAXXMLReader_put_baseURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_get_secureBaseURL_Proxy(IVBSAXXMLReader *This,BSTR *strSecureBaseURL);
    void __RPC_STUB IVBSAXXMLReader_get_secureBaseURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_put_secureBaseURL_Proxy(IVBSAXXMLReader *This,BSTR strSecureBaseURL);
    void __RPC_STUB IVBSAXXMLReader_put_secureBaseURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_parse_Proxy(IVBSAXXMLReader *This,VARIANT varInput);
    void __RPC_STUB IVBSAXXMLReader_parse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLReader_parseURL_Proxy(IVBSAXXMLReader *This,BSTR strURL);
    void __RPC_STUB IVBSAXXMLReader_parseURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IVBSAXXMLFilter_INTERFACE_DEFINED__
#define __IVBSAXXMLFilter_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IVBSAXXMLFilter;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IVBSAXXMLFilter : public IDispatch {
    public:
      virtual HRESULT WINAPI get_parent(IVBSAXXMLReader **oReader) = 0;
      virtual HRESULT WINAPI putref_parent(IVBSAXXMLReader *oReader) = 0;
    };
#else
    typedef struct IVBSAXXMLFilterVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IVBSAXXMLFilter *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IVBSAXXMLFilter *This);
	ULONG (WINAPI *Release)(IVBSAXXMLFilter *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IVBSAXXMLFilter *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IVBSAXXMLFilter *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IVBSAXXMLFilter *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IVBSAXXMLFilter *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_parent)(IVBSAXXMLFilter *This,IVBSAXXMLReader **oReader);
	HRESULT (WINAPI *putref_parent)(IVBSAXXMLFilter *This,IVBSAXXMLReader *oReader);
      END_INTERFACE
    } IVBSAXXMLFilterVtbl;
    struct IVBSAXXMLFilter {
      CONST_VTBL struct IVBSAXXMLFilterVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IVBSAXXMLFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVBSAXXMLFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVBSAXXMLFilter_Release(This) (This)->lpVtbl->Release(This)
#define IVBSAXXMLFilter_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IVBSAXXMLFilter_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IVBSAXXMLFilter_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IVBSAXXMLFilter_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IVBSAXXMLFilter_get_parent(This,oReader) (This)->lpVtbl->get_parent(This,oReader)
#define IVBSAXXMLFilter_putref_parent(This,oReader) (This)->lpVtbl->putref_parent(This,oReader)
#endif
#endif
    HRESULT WINAPI IVBSAXXMLFilter_get_parent_Proxy(IVBSAXXMLFilter *This,IVBSAXXMLReader **oReader);
    void __RPC_STUB IVBSAXXMLFilter_get_parent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXXMLFilter_putref_parent_Proxy(IVBSAXXMLFilter *This,IVBSAXXMLReader *oReader);
    void __RPC_STUB IVBSAXXMLFilter_putref_parent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IVBSAXLocator_INTERFACE_DEFINED__
#define __IVBSAXLocator_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IVBSAXLocator;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IVBSAXLocator : public IDispatch {
    public:
      virtual HRESULT WINAPI get_columnNumber(int *nColumn) = 0;
      virtual HRESULT WINAPI get_lineNumber(int *nLine) = 0;
      virtual HRESULT WINAPI get_publicId(BSTR *strPublicId) = 0;
      virtual HRESULT WINAPI get_systemId(BSTR *strSystemId) = 0;
    };
#else
    typedef struct IVBSAXLocatorVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IVBSAXLocator *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IVBSAXLocator *This);
	ULONG (WINAPI *Release)(IVBSAXLocator *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IVBSAXLocator *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IVBSAXLocator *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IVBSAXLocator *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IVBSAXLocator *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_columnNumber)(IVBSAXLocator *This,int *nColumn);
	HRESULT (WINAPI *get_lineNumber)(IVBSAXLocator *This,int *nLine);
	HRESULT (WINAPI *get_publicId)(IVBSAXLocator *This,BSTR *strPublicId);
	HRESULT (WINAPI *get_systemId)(IVBSAXLocator *This,BSTR *strSystemId);
      END_INTERFACE
    } IVBSAXLocatorVtbl;
    struct IVBSAXLocator {
      CONST_VTBL struct IVBSAXLocatorVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IVBSAXLocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVBSAXLocator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVBSAXLocator_Release(This) (This)->lpVtbl->Release(This)
#define IVBSAXLocator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IVBSAXLocator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IVBSAXLocator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IVBSAXLocator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IVBSAXLocator_get_columnNumber(This,nColumn) (This)->lpVtbl->get_columnNumber(This,nColumn)
#define IVBSAXLocator_get_lineNumber(This,nLine) (This)->lpVtbl->get_lineNumber(This,nLine)
#define IVBSAXLocator_get_publicId(This,strPublicId) (This)->lpVtbl->get_publicId(This,strPublicId)
#define IVBSAXLocator_get_systemId(This,strSystemId) (This)->lpVtbl->get_systemId(This,strSystemId)
#endif
#endif
    HRESULT WINAPI IVBSAXLocator_get_columnNumber_Proxy(IVBSAXLocator *This,int *nColumn);
    void __RPC_STUB IVBSAXLocator_get_columnNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXLocator_get_lineNumber_Proxy(IVBSAXLocator *This,int *nLine);
    void __RPC_STUB IVBSAXLocator_get_lineNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXLocator_get_publicId_Proxy(IVBSAXLocator *This,BSTR *strPublicId);
    void __RPC_STUB IVBSAXLocator_get_publicId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXLocator_get_systemId_Proxy(IVBSAXLocator *This,BSTR *strSystemId);
    void __RPC_STUB IVBSAXLocator_get_systemId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IVBSAXEntityResolver_INTERFACE_DEFINED__
#define __IVBSAXEntityResolver_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IVBSAXEntityResolver;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IVBSAXEntityResolver : public IDispatch {
    public:
      virtual HRESULT WINAPI resolveEntity(BSTR *strPublicId,BSTR *strSystemId,VARIANT *varInput) = 0;
    };
#else
    typedef struct IVBSAXEntityResolverVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IVBSAXEntityResolver *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IVBSAXEntityResolver *This);
	ULONG (WINAPI *Release)(IVBSAXEntityResolver *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IVBSAXEntityResolver *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IVBSAXEntityResolver *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IVBSAXEntityResolver *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IVBSAXEntityResolver *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *resolveEntity)(IVBSAXEntityResolver *This,BSTR *strPublicId,BSTR *strSystemId,VARIANT *varInput);
      END_INTERFACE
    } IVBSAXEntityResolverVtbl;
    struct IVBSAXEntityResolver {
      CONST_VTBL struct IVBSAXEntityResolverVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IVBSAXEntityResolver_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVBSAXEntityResolver_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVBSAXEntityResolver_Release(This) (This)->lpVtbl->Release(This)
#define IVBSAXEntityResolver_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IVBSAXEntityResolver_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IVBSAXEntityResolver_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IVBSAXEntityResolver_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IVBSAXEntityResolver_resolveEntity(This,strPublicId,strSystemId,varInput) (This)->lpVtbl->resolveEntity(This,strPublicId,strSystemId,varInput)
#endif
#endif
    HRESULT WINAPI IVBSAXEntityResolver_resolveEntity_Proxy(IVBSAXEntityResolver *This,BSTR *strPublicId,BSTR *strSystemId,VARIANT *varInput);
    void __RPC_STUB IVBSAXEntityResolver_resolveEntity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IVBSAXContentHandler_INTERFACE_DEFINED__
#define __IVBSAXContentHandler_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IVBSAXContentHandler;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IVBSAXContentHandler : public IDispatch {
    public:
      virtual HRESULT WINAPI putref_documentLocator(IVBSAXLocator *oLocator) = 0;
      virtual HRESULT WINAPI startDocument(void) = 0;
      virtual HRESULT WINAPI endDocument(void) = 0;
      virtual HRESULT WINAPI startPrefixMapping(BSTR *strPrefix,BSTR *strURI) = 0;
      virtual HRESULT WINAPI endPrefixMapping(BSTR *strPrefix) = 0;
      virtual HRESULT WINAPI startElement(BSTR *strNamespaceURI,BSTR *strLocalName,BSTR *strQName,IVBSAXAttributes *oAttributes) = 0;
      virtual HRESULT WINAPI endElement(BSTR *strNamespaceURI,BSTR *strLocalName,BSTR *strQName) = 0;
      virtual HRESULT WINAPI characters(BSTR *strChars) = 0;
      virtual HRESULT WINAPI ignorableWhitespace(BSTR *strChars) = 0;
      virtual HRESULT WINAPI processingInstruction(BSTR *strTarget,BSTR *strData) = 0;
      virtual HRESULT WINAPI skippedEntity(BSTR *strName) = 0;
    };
#else
    typedef struct IVBSAXContentHandlerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IVBSAXContentHandler *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IVBSAXContentHandler *This);
	ULONG (WINAPI *Release)(IVBSAXContentHandler *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IVBSAXContentHandler *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IVBSAXContentHandler *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IVBSAXContentHandler *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IVBSAXContentHandler *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *putref_documentLocator)(IVBSAXContentHandler *This,IVBSAXLocator *oLocator);
	HRESULT (WINAPI *startDocument)(IVBSAXContentHandler *This);
	HRESULT (WINAPI *endDocument)(IVBSAXContentHandler *This);
	HRESULT (WINAPI *startPrefixMapping)(IVBSAXContentHandler *This,BSTR *strPrefix,BSTR *strURI);
	HRESULT (WINAPI *endPrefixMapping)(IVBSAXContentHandler *This,BSTR *strPrefix);
	HRESULT (WINAPI *startElement)(IVBSAXContentHandler *This,BSTR *strNamespaceURI,BSTR *strLocalName,BSTR *strQName,IVBSAXAttributes *oAttributes);
	HRESULT (WINAPI *endElement)(IVBSAXContentHandler *This,BSTR *strNamespaceURI,BSTR *strLocalName,BSTR *strQName);
	HRESULT (WINAPI *characters)(IVBSAXContentHandler *This,BSTR *strChars);
	HRESULT (WINAPI *ignorableWhitespace)(IVBSAXContentHandler *This,BSTR *strChars);
	HRESULT (WINAPI *processingInstruction)(IVBSAXContentHandler *This,BSTR *strTarget,BSTR *strData);
	HRESULT (WINAPI *skippedEntity)(IVBSAXContentHandler *This,BSTR *strName);
      END_INTERFACE
    } IVBSAXContentHandlerVtbl;
    struct IVBSAXContentHandler {
      CONST_VTBL struct IVBSAXContentHandlerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IVBSAXContentHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVBSAXContentHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVBSAXContentHandler_Release(This) (This)->lpVtbl->Release(This)
#define IVBSAXContentHandler_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IVBSAXContentHandler_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IVBSAXContentHandler_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IVBSAXContentHandler_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IVBSAXContentHandler_putref_documentLocator(This,oLocator) (This)->lpVtbl->putref_documentLocator(This,oLocator)
#define IVBSAXContentHandler_startDocument(This) (This)->lpVtbl->startDocument(This)
#define IVBSAXContentHandler_endDocument(This) (This)->lpVtbl->endDocument(This)
#define IVBSAXContentHandler_startPrefixMapping(This,strPrefix,strURI) (This)->lpVtbl->startPrefixMapping(This,strPrefix,strURI)
#define IVBSAXContentHandler_endPrefixMapping(This,strPrefix) (This)->lpVtbl->endPrefixMapping(This,strPrefix)
#define IVBSAXContentHandler_startElement(This,strNamespaceURI,strLocalName,strQName,oAttributes) (This)->lpVtbl->startElement(This,strNamespaceURI,strLocalName,strQName,oAttributes)
#define IVBSAXContentHandler_endElement(This,strNamespaceURI,strLocalName,strQName) (This)->lpVtbl->endElement(This,strNamespaceURI,strLocalName,strQName)
#define IVBSAXContentHandler_characters(This,strChars) (This)->lpVtbl->characters(This,strChars)
#define IVBSAXContentHandler_ignorableWhitespace(This,strChars) (This)->lpVtbl->ignorableWhitespace(This,strChars)
#define IVBSAXContentHandler_processingInstruction(This,strTarget,strData) (This)->lpVtbl->processingInstruction(This,strTarget,strData)
#define IVBSAXContentHandler_skippedEntity(This,strName) (This)->lpVtbl->skippedEntity(This,strName)
#endif
#endif
    HRESULT WINAPI IVBSAXContentHandler_putref_documentLocator_Proxy(IVBSAXContentHandler *This,IVBSAXLocator *oLocator);
    void __RPC_STUB IVBSAXContentHandler_putref_documentLocator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXContentHandler_startDocument_Proxy(IVBSAXContentHandler *This);
    void __RPC_STUB IVBSAXContentHandler_startDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXContentHandler_endDocument_Proxy(IVBSAXContentHandler *This);
    void __RPC_STUB IVBSAXContentHandler_endDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXContentHandler_startPrefixMapping_Proxy(IVBSAXContentHandler *This,BSTR *strPrefix,BSTR *strURI);
    void __RPC_STUB IVBSAXContentHandler_startPrefixMapping_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXContentHandler_endPrefixMapping_Proxy(IVBSAXContentHandler *This,BSTR *strPrefix);
    void __RPC_STUB IVBSAXContentHandler_endPrefixMapping_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXContentHandler_startElement_Proxy(IVBSAXContentHandler *This,BSTR *strNamespaceURI,BSTR *strLocalName,BSTR *strQName,IVBSAXAttributes *oAttributes);
    void __RPC_STUB IVBSAXContentHandler_startElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXContentHandler_endElement_Proxy(IVBSAXContentHandler *This,BSTR *strNamespaceURI,BSTR *strLocalName,BSTR *strQName);
    void __RPC_STUB IVBSAXContentHandler_endElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXContentHandler_characters_Proxy(IVBSAXContentHandler *This,BSTR *strChars);
    void __RPC_STUB IVBSAXContentHandler_characters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXContentHandler_ignorableWhitespace_Proxy(IVBSAXContentHandler *This,BSTR *strChars);
    void __RPC_STUB IVBSAXContentHandler_ignorableWhitespace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXContentHandler_processingInstruction_Proxy(IVBSAXContentHandler *This,BSTR *strTarget,BSTR *strData);
    void __RPC_STUB IVBSAXContentHandler_processingInstruction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXContentHandler_skippedEntity_Proxy(IVBSAXContentHandler *This,BSTR *strName);
    void __RPC_STUB IVBSAXContentHandler_skippedEntity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IVBSAXDTDHandler_INTERFACE_DEFINED__
#define __IVBSAXDTDHandler_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IVBSAXDTDHandler;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IVBSAXDTDHandler : public IDispatch {
    public:
      virtual HRESULT WINAPI notationDecl(BSTR *strName,BSTR *strPublicId,BSTR *strSystemId) = 0;
      virtual HRESULT WINAPI unparsedEntityDecl(BSTR *strName,BSTR *strPublicId,BSTR *strSystemId,BSTR *strNotationName) = 0;
    };
#else
    typedef struct IVBSAXDTDHandlerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IVBSAXDTDHandler *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IVBSAXDTDHandler *This);
	ULONG (WINAPI *Release)(IVBSAXDTDHandler *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IVBSAXDTDHandler *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IVBSAXDTDHandler *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IVBSAXDTDHandler *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IVBSAXDTDHandler *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *notationDecl)(IVBSAXDTDHandler *This,BSTR *strName,BSTR *strPublicId,BSTR *strSystemId);
	HRESULT (WINAPI *unparsedEntityDecl)(IVBSAXDTDHandler *This,BSTR *strName,BSTR *strPublicId,BSTR *strSystemId,BSTR *strNotationName);
      END_INTERFACE
    } IVBSAXDTDHandlerVtbl;
    struct IVBSAXDTDHandler {
      CONST_VTBL struct IVBSAXDTDHandlerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IVBSAXDTDHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVBSAXDTDHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVBSAXDTDHandler_Release(This) (This)->lpVtbl->Release(This)
#define IVBSAXDTDHandler_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IVBSAXDTDHandler_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IVBSAXDTDHandler_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IVBSAXDTDHandler_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IVBSAXDTDHandler_notationDecl(This,strName,strPublicId,strSystemId) (This)->lpVtbl->notationDecl(This,strName,strPublicId,strSystemId)
#define IVBSAXDTDHandler_unparsedEntityDecl(This,strName,strPublicId,strSystemId,strNotationName) (This)->lpVtbl->unparsedEntityDecl(This,strName,strPublicId,strSystemId,strNotationName)
#endif
#endif
    HRESULT WINAPI IVBSAXDTDHandler_notationDecl_Proxy(IVBSAXDTDHandler *This,BSTR *strName,BSTR *strPublicId,BSTR *strSystemId);
    void __RPC_STUB IVBSAXDTDHandler_notationDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXDTDHandler_unparsedEntityDecl_Proxy(IVBSAXDTDHandler *This,BSTR *strName,BSTR *strPublicId,BSTR *strSystemId,BSTR *strNotationName);
    void __RPC_STUB IVBSAXDTDHandler_unparsedEntityDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IVBSAXErrorHandler_INTERFACE_DEFINED__
#define __IVBSAXErrorHandler_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IVBSAXErrorHandler;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IVBSAXErrorHandler : public IDispatch {
    public:
      virtual HRESULT WINAPI error(IVBSAXLocator *oLocator,BSTR *strErrorMessage,long nErrorCode) = 0;
      virtual HRESULT WINAPI fatalError(IVBSAXLocator *oLocator,BSTR *strErrorMessage,long nErrorCode) = 0;
      virtual HRESULT WINAPI ignorableWarning(IVBSAXLocator *oLocator,BSTR *strErrorMessage,long nErrorCode) = 0;
    };
#else
    typedef struct IVBSAXErrorHandlerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IVBSAXErrorHandler *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IVBSAXErrorHandler *This);
	ULONG (WINAPI *Release)(IVBSAXErrorHandler *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IVBSAXErrorHandler *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IVBSAXErrorHandler *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IVBSAXErrorHandler *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IVBSAXErrorHandler *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *error)(IVBSAXErrorHandler *This,IVBSAXLocator *oLocator,BSTR *strErrorMessage,long nErrorCode);
	HRESULT (WINAPI *fatalError)(IVBSAXErrorHandler *This,IVBSAXLocator *oLocator,BSTR *strErrorMessage,long nErrorCode);
	HRESULT (WINAPI *ignorableWarning)(IVBSAXErrorHandler *This,IVBSAXLocator *oLocator,BSTR *strErrorMessage,long nErrorCode);
      END_INTERFACE
    } IVBSAXErrorHandlerVtbl;
    struct IVBSAXErrorHandler {
      CONST_VTBL struct IVBSAXErrorHandlerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IVBSAXErrorHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVBSAXErrorHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVBSAXErrorHandler_Release(This) (This)->lpVtbl->Release(This)
#define IVBSAXErrorHandler_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IVBSAXErrorHandler_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IVBSAXErrorHandler_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IVBSAXErrorHandler_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IVBSAXErrorHandler_error(This,oLocator,strErrorMessage,nErrorCode) (This)->lpVtbl->error(This,oLocator,strErrorMessage,nErrorCode)
#define IVBSAXErrorHandler_fatalError(This,oLocator,strErrorMessage,nErrorCode) (This)->lpVtbl->fatalError(This,oLocator,strErrorMessage,nErrorCode)
#define IVBSAXErrorHandler_ignorableWarning(This,oLocator,strErrorMessage,nErrorCode) (This)->lpVtbl->ignorableWarning(This,oLocator,strErrorMessage,nErrorCode)
#endif
#endif
    HRESULT WINAPI IVBSAXErrorHandler_error_Proxy(IVBSAXErrorHandler *This,IVBSAXLocator *oLocator,BSTR *strErrorMessage,long nErrorCode);
    void __RPC_STUB IVBSAXErrorHandler_error_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXErrorHandler_fatalError_Proxy(IVBSAXErrorHandler *This,IVBSAXLocator *oLocator,BSTR *strErrorMessage,long nErrorCode);
    void __RPC_STUB IVBSAXErrorHandler_fatalError_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXErrorHandler_ignorableWarning_Proxy(IVBSAXErrorHandler *This,IVBSAXLocator *oLocator,BSTR *strErrorMessage,long nErrorCode);
    void __RPC_STUB IVBSAXErrorHandler_ignorableWarning_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IVBSAXLexicalHandler_INTERFACE_DEFINED__
#define __IVBSAXLexicalHandler_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IVBSAXLexicalHandler;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IVBSAXLexicalHandler : public IDispatch {
    public:
      virtual HRESULT WINAPI startDTD(BSTR *strName,BSTR *strPublicId,BSTR *strSystemId) = 0;
      virtual HRESULT WINAPI endDTD(void) = 0;
      virtual HRESULT WINAPI startEntity(BSTR *strName) = 0;
      virtual HRESULT WINAPI endEntity(BSTR *strName) = 0;
      virtual HRESULT WINAPI startCDATA(void) = 0;
      virtual HRESULT WINAPI endCDATA(void) = 0;
      virtual HRESULT WINAPI comment(BSTR *strChars) = 0;
    };
#else
    typedef struct IVBSAXLexicalHandlerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IVBSAXLexicalHandler *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IVBSAXLexicalHandler *This);
	ULONG (WINAPI *Release)(IVBSAXLexicalHandler *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IVBSAXLexicalHandler *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IVBSAXLexicalHandler *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IVBSAXLexicalHandler *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IVBSAXLexicalHandler *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *startDTD)(IVBSAXLexicalHandler *This,BSTR *strName,BSTR *strPublicId,BSTR *strSystemId);
	HRESULT (WINAPI *endDTD)(IVBSAXLexicalHandler *This);
	HRESULT (WINAPI *startEntity)(IVBSAXLexicalHandler *This,BSTR *strName);
	HRESULT (WINAPI *endEntity)(IVBSAXLexicalHandler *This,BSTR *strName);
	HRESULT (WINAPI *startCDATA)(IVBSAXLexicalHandler *This);
	HRESULT (WINAPI *endCDATA)(IVBSAXLexicalHandler *This);
	HRESULT (WINAPI *comment)(IVBSAXLexicalHandler *This,BSTR *strChars);
      END_INTERFACE
    } IVBSAXLexicalHandlerVtbl;
    struct IVBSAXLexicalHandler {
      CONST_VTBL struct IVBSAXLexicalHandlerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IVBSAXLexicalHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVBSAXLexicalHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVBSAXLexicalHandler_Release(This) (This)->lpVtbl->Release(This)
#define IVBSAXLexicalHandler_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IVBSAXLexicalHandler_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IVBSAXLexicalHandler_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IVBSAXLexicalHandler_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IVBSAXLexicalHandler_startDTD(This,strName,strPublicId,strSystemId) (This)->lpVtbl->startDTD(This,strName,strPublicId,strSystemId)
#define IVBSAXLexicalHandler_endDTD(This) (This)->lpVtbl->endDTD(This)
#define IVBSAXLexicalHandler_startEntity(This,strName) (This)->lpVtbl->startEntity(This,strName)
#define IVBSAXLexicalHandler_endEntity(This,strName) (This)->lpVtbl->endEntity(This,strName)
#define IVBSAXLexicalHandler_startCDATA(This) (This)->lpVtbl->startCDATA(This)
#define IVBSAXLexicalHandler_endCDATA(This) (This)->lpVtbl->endCDATA(This)
#define IVBSAXLexicalHandler_comment(This,strChars) (This)->lpVtbl->comment(This,strChars)
#endif
#endif
    HRESULT WINAPI IVBSAXLexicalHandler_startDTD_Proxy(IVBSAXLexicalHandler *This,BSTR *strName,BSTR *strPublicId,BSTR *strSystemId);
    void __RPC_STUB IVBSAXLexicalHandler_startDTD_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXLexicalHandler_endDTD_Proxy(IVBSAXLexicalHandler *This);
    void __RPC_STUB IVBSAXLexicalHandler_endDTD_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXLexicalHandler_startEntity_Proxy(IVBSAXLexicalHandler *This,BSTR *strName);
    void __RPC_STUB IVBSAXLexicalHandler_startEntity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXLexicalHandler_endEntity_Proxy(IVBSAXLexicalHandler *This,BSTR *strName);
    void __RPC_STUB IVBSAXLexicalHandler_endEntity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXLexicalHandler_startCDATA_Proxy(IVBSAXLexicalHandler *This);
    void __RPC_STUB IVBSAXLexicalHandler_startCDATA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXLexicalHandler_endCDATA_Proxy(IVBSAXLexicalHandler *This);
    void __RPC_STUB IVBSAXLexicalHandler_endCDATA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXLexicalHandler_comment_Proxy(IVBSAXLexicalHandler *This,BSTR *strChars);
    void __RPC_STUB IVBSAXLexicalHandler_comment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IVBSAXDeclHandler_INTERFACE_DEFINED__
#define __IVBSAXDeclHandler_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IVBSAXDeclHandler;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IVBSAXDeclHandler : public IDispatch {
    public:
      virtual HRESULT WINAPI elementDecl(BSTR *strName,BSTR *strModel) = 0;
      virtual HRESULT WINAPI attributeDecl(BSTR *strElementName,BSTR *strAttributeName,BSTR *strType,BSTR *strValueDefault,BSTR *strValue) = 0;
      virtual HRESULT WINAPI internalEntityDecl(BSTR *strName,BSTR *strValue) = 0;
      virtual HRESULT WINAPI externalEntityDecl(BSTR *strName,BSTR *strPublicId,BSTR *strSystemId) = 0;
    };
#else
    typedef struct IVBSAXDeclHandlerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IVBSAXDeclHandler *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IVBSAXDeclHandler *This);
	ULONG (WINAPI *Release)(IVBSAXDeclHandler *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IVBSAXDeclHandler *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IVBSAXDeclHandler *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IVBSAXDeclHandler *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IVBSAXDeclHandler *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *elementDecl)(IVBSAXDeclHandler *This,BSTR *strName,BSTR *strModel);
	HRESULT (WINAPI *attributeDecl)(IVBSAXDeclHandler *This,BSTR *strElementName,BSTR *strAttributeName,BSTR *strType,BSTR *strValueDefault,BSTR *strValue);
	HRESULT (WINAPI *internalEntityDecl)(IVBSAXDeclHandler *This,BSTR *strName,BSTR *strValue);
	HRESULT (WINAPI *externalEntityDecl)(IVBSAXDeclHandler *This,BSTR *strName,BSTR *strPublicId,BSTR *strSystemId);
      END_INTERFACE
    } IVBSAXDeclHandlerVtbl;
    struct IVBSAXDeclHandler {
      CONST_VTBL struct IVBSAXDeclHandlerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IVBSAXDeclHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVBSAXDeclHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVBSAXDeclHandler_Release(This) (This)->lpVtbl->Release(This)
#define IVBSAXDeclHandler_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IVBSAXDeclHandler_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IVBSAXDeclHandler_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IVBSAXDeclHandler_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IVBSAXDeclHandler_elementDecl(This,strName,strModel) (This)->lpVtbl->elementDecl(This,strName,strModel)
#define IVBSAXDeclHandler_attributeDecl(This,strElementName,strAttributeName,strType,strValueDefault,strValue) (This)->lpVtbl->attributeDecl(This,strElementName,strAttributeName,strType,strValueDefault,strValue)
#define IVBSAXDeclHandler_internalEntityDecl(This,strName,strValue) (This)->lpVtbl->internalEntityDecl(This,strName,strValue)
#define IVBSAXDeclHandler_externalEntityDecl(This,strName,strPublicId,strSystemId) (This)->lpVtbl->externalEntityDecl(This,strName,strPublicId,strSystemId)
#endif
#endif
    HRESULT WINAPI IVBSAXDeclHandler_elementDecl_Proxy(IVBSAXDeclHandler *This,BSTR *strName,BSTR *strModel);
    void __RPC_STUB IVBSAXDeclHandler_elementDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXDeclHandler_attributeDecl_Proxy(IVBSAXDeclHandler *This,BSTR *strElementName,BSTR *strAttributeName,BSTR *strType,BSTR *strValueDefault,BSTR *strValue);
    void __RPC_STUB IVBSAXDeclHandler_attributeDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXDeclHandler_internalEntityDecl_Proxy(IVBSAXDeclHandler *This,BSTR *strName,BSTR *strValue);
    void __RPC_STUB IVBSAXDeclHandler_internalEntityDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXDeclHandler_externalEntityDecl_Proxy(IVBSAXDeclHandler *This,BSTR *strName,BSTR *strPublicId,BSTR *strSystemId);
    void __RPC_STUB IVBSAXDeclHandler_externalEntityDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IVBSAXAttributes_INTERFACE_DEFINED__
#define __IVBSAXAttributes_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IVBSAXAttributes;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IVBSAXAttributes : public IDispatch {
    public:
      virtual HRESULT WINAPI get_length(int *nLength) = 0;
      virtual HRESULT WINAPI getURI(int nIndex,BSTR *strURI) = 0;
      virtual HRESULT WINAPI getLocalName(int nIndex,BSTR *strLocalName) = 0;
      virtual HRESULT WINAPI getQName(int nIndex,BSTR *strQName) = 0;
      virtual HRESULT WINAPI getIndexFromName(BSTR strURI,BSTR strLocalName,int *nIndex) = 0;
      virtual HRESULT WINAPI getIndexFromQName(BSTR strQName,int *nIndex) = 0;
      virtual HRESULT WINAPI getType(int nIndex,BSTR *strType) = 0;
      virtual HRESULT WINAPI getTypeFromName(BSTR strURI,BSTR strLocalName,BSTR *strType) = 0;
      virtual HRESULT WINAPI getTypeFromQName(BSTR strQName,BSTR *strType) = 0;
      virtual HRESULT WINAPI getValue(int nIndex,BSTR *strValue) = 0;
      virtual HRESULT WINAPI getValueFromName(BSTR strURI,BSTR strLocalName,BSTR *strValue) = 0;
      virtual HRESULT WINAPI getValueFromQName(BSTR strQName,BSTR *strValue) = 0;
    };
#else
    typedef struct IVBSAXAttributesVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IVBSAXAttributes *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IVBSAXAttributes *This);
	ULONG (WINAPI *Release)(IVBSAXAttributes *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IVBSAXAttributes *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IVBSAXAttributes *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IVBSAXAttributes *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IVBSAXAttributes *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_length)(IVBSAXAttributes *This,int *nLength);
	HRESULT (WINAPI *getURI)(IVBSAXAttributes *This,int nIndex,BSTR *strURI);
	HRESULT (WINAPI *getLocalName)(IVBSAXAttributes *This,int nIndex,BSTR *strLocalName);
	HRESULT (WINAPI *getQName)(IVBSAXAttributes *This,int nIndex,BSTR *strQName);
	HRESULT (WINAPI *getIndexFromName)(IVBSAXAttributes *This,BSTR strURI,BSTR strLocalName,int *nIndex);
	HRESULT (WINAPI *getIndexFromQName)(IVBSAXAttributes *This,BSTR strQName,int *nIndex);
	HRESULT (WINAPI *getType)(IVBSAXAttributes *This,int nIndex,BSTR *strType);
	HRESULT (WINAPI *getTypeFromName)(IVBSAXAttributes *This,BSTR strURI,BSTR strLocalName,BSTR *strType);
	HRESULT (WINAPI *getTypeFromQName)(IVBSAXAttributes *This,BSTR strQName,BSTR *strType);
	HRESULT (WINAPI *getValue)(IVBSAXAttributes *This,int nIndex,BSTR *strValue);
	HRESULT (WINAPI *getValueFromName)(IVBSAXAttributes *This,BSTR strURI,BSTR strLocalName,BSTR *strValue);
	HRESULT (WINAPI *getValueFromQName)(IVBSAXAttributes *This,BSTR strQName,BSTR *strValue);
      END_INTERFACE
    } IVBSAXAttributesVtbl;
    struct IVBSAXAttributes {
      CONST_VTBL struct IVBSAXAttributesVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IVBSAXAttributes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVBSAXAttributes_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVBSAXAttributes_Release(This) (This)->lpVtbl->Release(This)
#define IVBSAXAttributes_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IVBSAXAttributes_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IVBSAXAttributes_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IVBSAXAttributes_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IVBSAXAttributes_get_length(This,nLength) (This)->lpVtbl->get_length(This,nLength)
#define IVBSAXAttributes_getURI(This,nIndex,strURI) (This)->lpVtbl->getURI(This,nIndex,strURI)
#define IVBSAXAttributes_getLocalName(This,nIndex,strLocalName) (This)->lpVtbl->getLocalName(This,nIndex,strLocalName)
#define IVBSAXAttributes_getQName(This,nIndex,strQName) (This)->lpVtbl->getQName(This,nIndex,strQName)
#define IVBSAXAttributes_getIndexFromName(This,strURI,strLocalName,nIndex) (This)->lpVtbl->getIndexFromName(This,strURI,strLocalName,nIndex)
#define IVBSAXAttributes_getIndexFromQName(This,strQName,nIndex) (This)->lpVtbl->getIndexFromQName(This,strQName,nIndex)
#define IVBSAXAttributes_getType(This,nIndex,strType) (This)->lpVtbl->getType(This,nIndex,strType)
#define IVBSAXAttributes_getTypeFromName(This,strURI,strLocalName,strType) (This)->lpVtbl->getTypeFromName(This,strURI,strLocalName,strType)
#define IVBSAXAttributes_getTypeFromQName(This,strQName,strType) (This)->lpVtbl->getTypeFromQName(This,strQName,strType)
#define IVBSAXAttributes_getValue(This,nIndex,strValue) (This)->lpVtbl->getValue(This,nIndex,strValue)
#define IVBSAXAttributes_getValueFromName(This,strURI,strLocalName,strValue) (This)->lpVtbl->getValueFromName(This,strURI,strLocalName,strValue)
#define IVBSAXAttributes_getValueFromQName(This,strQName,strValue) (This)->lpVtbl->getValueFromQName(This,strQName,strValue)
#endif
#endif
    HRESULT WINAPI IVBSAXAttributes_get_length_Proxy(IVBSAXAttributes *This,int *nLength);
    void __RPC_STUB IVBSAXAttributes_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXAttributes_getURI_Proxy(IVBSAXAttributes *This,int nIndex,BSTR *strURI);
    void __RPC_STUB IVBSAXAttributes_getURI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXAttributes_getLocalName_Proxy(IVBSAXAttributes *This,int nIndex,BSTR *strLocalName);
    void __RPC_STUB IVBSAXAttributes_getLocalName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXAttributes_getQName_Proxy(IVBSAXAttributes *This,int nIndex,BSTR *strQName);
    void __RPC_STUB IVBSAXAttributes_getQName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXAttributes_getIndexFromName_Proxy(IVBSAXAttributes *This,BSTR strURI,BSTR strLocalName,int *nIndex);
    void __RPC_STUB IVBSAXAttributes_getIndexFromName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXAttributes_getIndexFromQName_Proxy(IVBSAXAttributes *This,BSTR strQName,int *nIndex);
    void __RPC_STUB IVBSAXAttributes_getIndexFromQName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXAttributes_getType_Proxy(IVBSAXAttributes *This,int nIndex,BSTR *strType);
    void __RPC_STUB IVBSAXAttributes_getType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXAttributes_getTypeFromName_Proxy(IVBSAXAttributes *This,BSTR strURI,BSTR strLocalName,BSTR *strType);
    void __RPC_STUB IVBSAXAttributes_getTypeFromName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXAttributes_getTypeFromQName_Proxy(IVBSAXAttributes *This,BSTR strQName,BSTR *strType);
    void __RPC_STUB IVBSAXAttributes_getTypeFromQName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXAttributes_getValue_Proxy(IVBSAXAttributes *This,int nIndex,BSTR *strValue);
    void __RPC_STUB IVBSAXAttributes_getValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXAttributes_getValueFromName_Proxy(IVBSAXAttributes *This,BSTR strURI,BSTR strLocalName,BSTR *strValue);
    void __RPC_STUB IVBSAXAttributes_getValueFromName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBSAXAttributes_getValueFromQName_Proxy(IVBSAXAttributes *This,BSTR strQName,BSTR *strValue);
    void __RPC_STUB IVBSAXAttributes_getValueFromQName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMXWriter_INTERFACE_DEFINED__
#define __IMXWriter_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IMXWriter;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IMXWriter : public IDispatch {
    public:
      virtual HRESULT WINAPI put_output(VARIANT varDestination) = 0;
      virtual HRESULT WINAPI get_output(VARIANT *varDestination) = 0;
      virtual HRESULT WINAPI put_encoding(BSTR strEncoding) = 0;
      virtual HRESULT WINAPI get_encoding(BSTR *strEncoding) = 0;
      virtual HRESULT WINAPI put_byteOrderMark(VARIANT_BOOL fWriteByteOrderMark) = 0;
      virtual HRESULT WINAPI get_byteOrderMark(VARIANT_BOOL *fWriteByteOrderMark) = 0;
      virtual HRESULT WINAPI put_indent(VARIANT_BOOL fIndentMode) = 0;
      virtual HRESULT WINAPI get_indent(VARIANT_BOOL *fIndentMode) = 0;
      virtual HRESULT WINAPI put_standalone(VARIANT_BOOL fValue) = 0;
      virtual HRESULT WINAPI get_standalone(VARIANT_BOOL *fValue) = 0;
      virtual HRESULT WINAPI put_omitXMLDeclaration(VARIANT_BOOL fValue) = 0;
      virtual HRESULT WINAPI get_omitXMLDeclaration(VARIANT_BOOL *fValue) = 0;
      virtual HRESULT WINAPI put_version(BSTR strVersion) = 0;
      virtual HRESULT WINAPI get_version(BSTR *strVersion) = 0;
      virtual HRESULT WINAPI put_disableOutputEscaping(VARIANT_BOOL fValue) = 0;
      virtual HRESULT WINAPI get_disableOutputEscaping(VARIANT_BOOL *fValue) = 0;
      virtual HRESULT WINAPI flush(void) = 0;
    };
#else
    typedef struct IMXWriterVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IMXWriter *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IMXWriter *This);
	ULONG (WINAPI *Release)(IMXWriter *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IMXWriter *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IMXWriter *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IMXWriter *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IMXWriter *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *put_output)(IMXWriter *This,VARIANT varDestination);
	HRESULT (WINAPI *get_output)(IMXWriter *This,VARIANT *varDestination);
	HRESULT (WINAPI *put_encoding)(IMXWriter *This,BSTR strEncoding);
	HRESULT (WINAPI *get_encoding)(IMXWriter *This,BSTR *strEncoding);
	HRESULT (WINAPI *put_byteOrderMark)(IMXWriter *This,VARIANT_BOOL fWriteByteOrderMark);
	HRESULT (WINAPI *get_byteOrderMark)(IMXWriter *This,VARIANT_BOOL *fWriteByteOrderMark);
	HRESULT (WINAPI *put_indent)(IMXWriter *This,VARIANT_BOOL fIndentMode);
	HRESULT (WINAPI *get_indent)(IMXWriter *This,VARIANT_BOOL *fIndentMode);
	HRESULT (WINAPI *put_standalone)(IMXWriter *This,VARIANT_BOOL fValue);
	HRESULT (WINAPI *get_standalone)(IMXWriter *This,VARIANT_BOOL *fValue);
	HRESULT (WINAPI *put_omitXMLDeclaration)(IMXWriter *This,VARIANT_BOOL fValue);
	HRESULT (WINAPI *get_omitXMLDeclaration)(IMXWriter *This,VARIANT_BOOL *fValue);
	HRESULT (WINAPI *put_version)(IMXWriter *This,BSTR strVersion);
	HRESULT (WINAPI *get_version)(IMXWriter *This,BSTR *strVersion);
	HRESULT (WINAPI *put_disableOutputEscaping)(IMXWriter *This,VARIANT_BOOL fValue);
	HRESULT (WINAPI *get_disableOutputEscaping)(IMXWriter *This,VARIANT_BOOL *fValue);
	HRESULT (WINAPI *flush)(IMXWriter *This);
      END_INTERFACE
    } IMXWriterVtbl;
    struct IMXWriter {
      CONST_VTBL struct IMXWriterVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IMXWriter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMXWriter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMXWriter_Release(This) (This)->lpVtbl->Release(This)
#define IMXWriter_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMXWriter_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMXWriter_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMXWriter_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMXWriter_put_output(This,varDestination) (This)->lpVtbl->put_output(This,varDestination)
#define IMXWriter_get_output(This,varDestination) (This)->lpVtbl->get_output(This,varDestination)
#define IMXWriter_put_encoding(This,strEncoding) (This)->lpVtbl->put_encoding(This,strEncoding)
#define IMXWriter_get_encoding(This,strEncoding) (This)->lpVtbl->get_encoding(This,strEncoding)
#define IMXWriter_put_byteOrderMark(This,fWriteByteOrderMark) (This)->lpVtbl->put_byteOrderMark(This,fWriteByteOrderMark)
#define IMXWriter_get_byteOrderMark(This,fWriteByteOrderMark) (This)->lpVtbl->get_byteOrderMark(This,fWriteByteOrderMark)
#define IMXWriter_put_indent(This,fIndentMode) (This)->lpVtbl->put_indent(This,fIndentMode)
#define IMXWriter_get_indent(This,fIndentMode) (This)->lpVtbl->get_indent(This,fIndentMode)
#define IMXWriter_put_standalone(This,fValue) (This)->lpVtbl->put_standalone(This,fValue)
#define IMXWriter_get_standalone(This,fValue) (This)->lpVtbl->get_standalone(This,fValue)
#define IMXWriter_put_omitXMLDeclaration(This,fValue) (This)->lpVtbl->put_omitXMLDeclaration(This,fValue)
#define IMXWriter_get_omitXMLDeclaration(This,fValue) (This)->lpVtbl->get_omitXMLDeclaration(This,fValue)
#define IMXWriter_put_version(This,strVersion) (This)->lpVtbl->put_version(This,strVersion)
#define IMXWriter_get_version(This,strVersion) (This)->lpVtbl->get_version(This,strVersion)
#define IMXWriter_put_disableOutputEscaping(This,fValue) (This)->lpVtbl->put_disableOutputEscaping(This,fValue)
#define IMXWriter_get_disableOutputEscaping(This,fValue) (This)->lpVtbl->get_disableOutputEscaping(This,fValue)
#define IMXWriter_flush(This) (This)->lpVtbl->flush(This)
#endif
#endif
    HRESULT WINAPI IMXWriter_put_output_Proxy(IMXWriter *This,VARIANT varDestination);
    void __RPC_STUB IMXWriter_put_output_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_get_output_Proxy(IMXWriter *This,VARIANT *varDestination);
    void __RPC_STUB IMXWriter_get_output_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_put_encoding_Proxy(IMXWriter *This,BSTR strEncoding);
    void __RPC_STUB IMXWriter_put_encoding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_get_encoding_Proxy(IMXWriter *This,BSTR *strEncoding);
    void __RPC_STUB IMXWriter_get_encoding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_put_byteOrderMark_Proxy(IMXWriter *This,VARIANT_BOOL fWriteByteOrderMark);
    void __RPC_STUB IMXWriter_put_byteOrderMark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_get_byteOrderMark_Proxy(IMXWriter *This,VARIANT_BOOL *fWriteByteOrderMark);
    void __RPC_STUB IMXWriter_get_byteOrderMark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_put_indent_Proxy(IMXWriter *This,VARIANT_BOOL fIndentMode);
    void __RPC_STUB IMXWriter_put_indent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_get_indent_Proxy(IMXWriter *This,VARIANT_BOOL *fIndentMode);
    void __RPC_STUB IMXWriter_get_indent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_put_standalone_Proxy(IMXWriter *This,VARIANT_BOOL fValue);
    void __RPC_STUB IMXWriter_put_standalone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_get_standalone_Proxy(IMXWriter *This,VARIANT_BOOL *fValue);
    void __RPC_STUB IMXWriter_get_standalone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_put_omitXMLDeclaration_Proxy(IMXWriter *This,VARIANT_BOOL fValue);
    void __RPC_STUB IMXWriter_put_omitXMLDeclaration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_get_omitXMLDeclaration_Proxy(IMXWriter *This,VARIANT_BOOL *fValue);
    void __RPC_STUB IMXWriter_get_omitXMLDeclaration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_put_version_Proxy(IMXWriter *This,BSTR strVersion);
    void __RPC_STUB IMXWriter_put_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_get_version_Proxy(IMXWriter *This,BSTR *strVersion);
    void __RPC_STUB IMXWriter_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_put_disableOutputEscaping_Proxy(IMXWriter *This,VARIANT_BOOL fValue);
    void __RPC_STUB IMXWriter_put_disableOutputEscaping_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_get_disableOutputEscaping_Proxy(IMXWriter *This,VARIANT_BOOL *fValue);
    void __RPC_STUB IMXWriter_get_disableOutputEscaping_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXWriter_flush_Proxy(IMXWriter *This);
    void __RPC_STUB IMXWriter_flush_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMXAttributes_INTERFACE_DEFINED__
#define __IMXAttributes_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IMXAttributes;

#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IMXAttributes : public IDispatch {
    public:
      virtual HRESULT WINAPI addAttribute(BSTR strURI,BSTR strLocalName,BSTR strQName,BSTR strType,BSTR strValue) = 0;
      virtual HRESULT WINAPI addAttributeFromIndex(VARIANT varAtts,int nIndex) = 0;
      virtual HRESULT WINAPI clear(void) = 0;
      virtual HRESULT WINAPI removeAttribute(int nIndex) = 0;
      virtual HRESULT WINAPI setAttribute(int nIndex,BSTR strURI,BSTR strLocalName,BSTR strQName,BSTR strType,BSTR strValue) = 0;
      virtual HRESULT WINAPI setAttributes(VARIANT varAtts) = 0;
      virtual HRESULT WINAPI setLocalName(int nIndex,BSTR strLocalName) = 0;
      virtual HRESULT WINAPI setQName(int nIndex,BSTR strQName) = 0;
      virtual HRESULT WINAPI setType(int nIndex,BSTR strType) = 0;
      virtual HRESULT WINAPI setURI(int nIndex,BSTR strURI) = 0;
      virtual HRESULT WINAPI setValue(int nIndex,BSTR strValue) = 0;
    };
#else
    typedef struct IMXAttributesVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IMXAttributes *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IMXAttributes *This);
	ULONG (WINAPI *Release)(IMXAttributes *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IMXAttributes *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IMXAttributes *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IMXAttributes *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IMXAttributes *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *addAttribute)(IMXAttributes *This,BSTR strURI,BSTR strLocalName,BSTR strQName,BSTR strType,BSTR strValue);
	HRESULT (WINAPI *addAttributeFromIndex)(IMXAttributes *This,VARIANT varAtts,int nIndex);
	HRESULT (WINAPI *clear)(IMXAttributes *This);
	HRESULT (WINAPI *removeAttribute)(IMXAttributes *This,int nIndex);
	HRESULT (WINAPI *setAttribute)(IMXAttributes *This,int nIndex,BSTR strURI,BSTR strLocalName,BSTR strQName,BSTR strType,BSTR strValue);
	HRESULT (WINAPI *setAttributes)(IMXAttributes *This,VARIANT varAtts);
	HRESULT (WINAPI *setLocalName)(IMXAttributes *This,int nIndex,BSTR strLocalName);
	HRESULT (WINAPI *setQName)(IMXAttributes *This,int nIndex,BSTR strQName);
	HRESULT (WINAPI *setType)(IMXAttributes *This,int nIndex,BSTR strType);
	HRESULT (WINAPI *setURI)(IMXAttributes *This,int nIndex,BSTR strURI);
	HRESULT (WINAPI *setValue)(IMXAttributes *This,int nIndex,BSTR strValue);
      END_INTERFACE
    } IMXAttributesVtbl;
    struct IMXAttributes {
      CONST_VTBL struct IMXAttributesVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IMXAttributes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMXAttributes_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMXAttributes_Release(This) (This)->lpVtbl->Release(This)
#define IMXAttributes_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMXAttributes_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMXAttributes_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMXAttributes_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMXAttributes_addAttribute(This,strURI,strLocalName,strQName,strType,strValue) (This)->lpVtbl->addAttribute(This,strURI,strLocalName,strQName,strType,strValue)
#define IMXAttributes_addAttributeFromIndex(This,varAtts,nIndex) (This)->lpVtbl->addAttributeFromIndex(This,varAtts,nIndex)
#define IMXAttributes_clear(This) (This)->lpVtbl->clear(This)
#define IMXAttributes_removeAttribute(This,nIndex) (This)->lpVtbl->removeAttribute(This,nIndex)
#define IMXAttributes_setAttribute(This,nIndex,strURI,strLocalName,strQName,strType,strValue) (This)->lpVtbl->setAttribute(This,nIndex,strURI,strLocalName,strQName,strType,strValue)
#define IMXAttributes_setAttributes(This,varAtts) (This)->lpVtbl->setAttributes(This,varAtts)
#define IMXAttributes_setLocalName(This,nIndex,strLocalName) (This)->lpVtbl->setLocalName(This,nIndex,strLocalName)
#define IMXAttributes_setQName(This,nIndex,strQName) (This)->lpVtbl->setQName(This,nIndex,strQName)
#define IMXAttributes_setType(This,nIndex,strType) (This)->lpVtbl->setType(This,nIndex,strType)
#define IMXAttributes_setURI(This,nIndex,strURI) (This)->lpVtbl->setURI(This,nIndex,strURI)
#define IMXAttributes_setValue(This,nIndex,strValue) (This)->lpVtbl->setValue(This,nIndex,strValue)
#endif
#endif
    HRESULT WINAPI IMXAttributes_addAttribute_Proxy(IMXAttributes *This,BSTR strURI,BSTR strLocalName,BSTR strQName,BSTR strType,BSTR strValue);
    void __RPC_STUB IMXAttributes_addAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXAttributes_addAttributeFromIndex_Proxy(IMXAttributes *This,VARIANT varAtts,int nIndex);
    void __RPC_STUB IMXAttributes_addAttributeFromIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXAttributes_clear_Proxy(IMXAttributes *This);
    void __RPC_STUB IMXAttributes_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXAttributes_removeAttribute_Proxy(IMXAttributes *This,int nIndex);
    void __RPC_STUB IMXAttributes_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXAttributes_setAttribute_Proxy(IMXAttributes *This,int nIndex,BSTR strURI,BSTR strLocalName,BSTR strQName,BSTR strType,BSTR strValue);
    void __RPC_STUB IMXAttributes_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXAttributes_setAttributes_Proxy(IMXAttributes *This,VARIANT varAtts);
    void __RPC_STUB IMXAttributes_setAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXAttributes_setLocalName_Proxy(IMXAttributes *This,int nIndex,BSTR strLocalName);
    void __RPC_STUB IMXAttributes_setLocalName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXAttributes_setQName_Proxy(IMXAttributes *This,int nIndex,BSTR strQName);
    void __RPC_STUB IMXAttributes_setQName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXAttributes_setType_Proxy(IMXAttributes *This,int nIndex,BSTR strType);
    void __RPC_STUB IMXAttributes_setType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXAttributes_setURI_Proxy(IMXAttributes *This,int nIndex,BSTR strURI);
    void __RPC_STUB IMXAttributes_setURI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXAttributes_setValue_Proxy(IMXAttributes *This,int nIndex,BSTR strValue);
    void __RPC_STUB IMXAttributes_setValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMXReaderControl_INTERFACE_DEFINED__
#define __IMXReaderControl_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IMXReaderControl;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IMXReaderControl : public IDispatch {
    public:
      virtual HRESULT WINAPI abort(void) = 0;
      virtual HRESULT WINAPI resume(void) = 0;
      virtual HRESULT WINAPI suspend(void) = 0;
    };
#else
    typedef struct IMXReaderControlVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IMXReaderControl *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IMXReaderControl *This);
	ULONG (WINAPI *Release)(IMXReaderControl *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IMXReaderControl *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IMXReaderControl *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IMXReaderControl *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IMXReaderControl *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *abort)(IMXReaderControl *This);
	HRESULT (WINAPI *resume)(IMXReaderControl *This);
	HRESULT (WINAPI *suspend)(IMXReaderControl *This);
      END_INTERFACE
    } IMXReaderControlVtbl;
    struct IMXReaderControl {
      CONST_VTBL struct IMXReaderControlVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IMXReaderControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMXReaderControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMXReaderControl_Release(This) (This)->lpVtbl->Release(This)
#define IMXReaderControl_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMXReaderControl_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMXReaderControl_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMXReaderControl_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMXReaderControl_abort(This) (This)->lpVtbl->abort(This)
#define IMXReaderControl_resume(This) (This)->lpVtbl->resume(This)
#define IMXReaderControl_suspend(This) (This)->lpVtbl->suspend(This)
#endif
#endif
    HRESULT WINAPI IMXReaderControl_abort_Proxy(IMXReaderControl *This);
    void __RPC_STUB IMXReaderControl_abort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXReaderControl_resume_Proxy(IMXReaderControl *This);
    void __RPC_STUB IMXReaderControl_resume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXReaderControl_suspend_Proxy(IMXReaderControl *This);
    void __RPC_STUB IMXReaderControl_suspend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMXSchemaDeclHandler_INTERFACE_DEFINED__
#define __IMXSchemaDeclHandler_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IMXSchemaDeclHandler;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IMXSchemaDeclHandler : public IDispatch {
    public:
      virtual HRESULT WINAPI schemaElementDecl(ISchemaElement *oSchemaElement) = 0;
    };
#else
    typedef struct IMXSchemaDeclHandlerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IMXSchemaDeclHandler *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IMXSchemaDeclHandler *This);
	ULONG (WINAPI *Release)(IMXSchemaDeclHandler *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IMXSchemaDeclHandler *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IMXSchemaDeclHandler *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IMXSchemaDeclHandler *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IMXSchemaDeclHandler *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *schemaElementDecl)(IMXSchemaDeclHandler *This,ISchemaElement *oSchemaElement);
      END_INTERFACE
    } IMXSchemaDeclHandlerVtbl;
    struct IMXSchemaDeclHandler {
      CONST_VTBL struct IMXSchemaDeclHandlerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IMXSchemaDeclHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMXSchemaDeclHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMXSchemaDeclHandler_Release(This) (This)->lpVtbl->Release(This)
#define IMXSchemaDeclHandler_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMXSchemaDeclHandler_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMXSchemaDeclHandler_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMXSchemaDeclHandler_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMXSchemaDeclHandler_schemaElementDecl(This,oSchemaElement) (This)->lpVtbl->schemaElementDecl(This,oSchemaElement)
#endif
#endif
    HRESULT WINAPI IMXSchemaDeclHandler_schemaElementDecl_Proxy(IMXSchemaDeclHandler *This,ISchemaElement *oSchemaElement);
    void __RPC_STUB IMXSchemaDeclHandler_schemaElementDecl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMSchemaCollection2_INTERFACE_DEFINED__
#define __IXMLDOMSchemaCollection2_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMSchemaCollection2;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMSchemaCollection2 : public IXMLDOMSchemaCollection {
    public:
      virtual HRESULT WINAPI validate(void) = 0;
      virtual HRESULT WINAPI put_validateOnLoad(VARIANT_BOOL validateOnLoad) = 0;
      virtual HRESULT WINAPI get_validateOnLoad(VARIANT_BOOL *validateOnLoad) = 0;
      virtual HRESULT WINAPI getSchema(BSTR namespaceURI,ISchema **schema) = 0;
      virtual HRESULT WINAPI getDeclaration(IXMLDOMNode *node,ISchemaItem **item) = 0;
    };
#else
    typedef struct IXMLDOMSchemaCollection2Vtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMSchemaCollection2 *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMSchemaCollection2 *This);
	ULONG (WINAPI *Release)(IXMLDOMSchemaCollection2 *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMSchemaCollection2 *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMSchemaCollection2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMSchemaCollection2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMSchemaCollection2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *add)(IXMLDOMSchemaCollection2 *This,BSTR namespaceURI,VARIANT var);
	HRESULT (WINAPI *get)(IXMLDOMSchemaCollection2 *This,BSTR namespaceURI,IXMLDOMNode **schemaNode);
	HRESULT (WINAPI *remove)(IXMLDOMSchemaCollection2 *This,BSTR namespaceURI);
	HRESULT (WINAPI *get_length)(IXMLDOMSchemaCollection2 *This,long *length);
	HRESULT (WINAPI *get_namespaceURI)(IXMLDOMSchemaCollection2 *This,long index,BSTR *length);
	HRESULT (WINAPI *addCollection)(IXMLDOMSchemaCollection2 *This,IXMLDOMSchemaCollection *otherCollection);
	HRESULT (WINAPI *get__newEnum)(IXMLDOMSchemaCollection2 *This,IUnknown **ppUnk);
	HRESULT (WINAPI *validate)(IXMLDOMSchemaCollection2 *This);
	HRESULT (WINAPI *put_validateOnLoad)(IXMLDOMSchemaCollection2 *This,VARIANT_BOOL validateOnLoad);
	HRESULT (WINAPI *get_validateOnLoad)(IXMLDOMSchemaCollection2 *This,VARIANT_BOOL *validateOnLoad);
	HRESULT (WINAPI *getSchema)(IXMLDOMSchemaCollection2 *This,BSTR namespaceURI,ISchema **schema);
	HRESULT (WINAPI *getDeclaration)(IXMLDOMSchemaCollection2 *This,IXMLDOMNode *node,ISchemaItem **item);
      END_INTERFACE
    } IXMLDOMSchemaCollection2Vtbl;
    struct IXMLDOMSchemaCollection2 {
      CONST_VTBL struct IXMLDOMSchemaCollection2Vtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMSchemaCollection2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMSchemaCollection2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMSchemaCollection2_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMSchemaCollection2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMSchemaCollection2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMSchemaCollection2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMSchemaCollection2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMSchemaCollection2_add(This,namespaceURI,var) (This)->lpVtbl->add(This,namespaceURI,var)
#define IXMLDOMSchemaCollection2_get(This,namespaceURI,schemaNode) (This)->lpVtbl->get(This,namespaceURI,schemaNode)
#define IXMLDOMSchemaCollection2_remove(This,namespaceURI) (This)->lpVtbl->remove(This,namespaceURI)
#define IXMLDOMSchemaCollection2_get_length(This,length) (This)->lpVtbl->get_length(This,length)
#define IXMLDOMSchemaCollection2_get_namespaceURI(This,index,length) (This)->lpVtbl->get_namespaceURI(This,index,length)
#define IXMLDOMSchemaCollection2_addCollection(This,otherCollection) (This)->lpVtbl->addCollection(This,otherCollection)
#define IXMLDOMSchemaCollection2_get__newEnum(This,ppUnk) (This)->lpVtbl->get__newEnum(This,ppUnk)
#define IXMLDOMSchemaCollection2_validate(This) (This)->lpVtbl->validate(This)
#define IXMLDOMSchemaCollection2_put_validateOnLoad(This,validateOnLoad) (This)->lpVtbl->put_validateOnLoad(This,validateOnLoad)
#define IXMLDOMSchemaCollection2_get_validateOnLoad(This,validateOnLoad) (This)->lpVtbl->get_validateOnLoad(This,validateOnLoad)
#define IXMLDOMSchemaCollection2_getSchema(This,namespaceURI,schema) (This)->lpVtbl->getSchema(This,namespaceURI,schema)
#define IXMLDOMSchemaCollection2_getDeclaration(This,node,item) (This)->lpVtbl->getDeclaration(This,node,item)
#endif
#endif
    HRESULT WINAPI IXMLDOMSchemaCollection2_validate_Proxy(IXMLDOMSchemaCollection2 *This);
    void __RPC_STUB IXMLDOMSchemaCollection2_validate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSchemaCollection2_put_validateOnLoad_Proxy(IXMLDOMSchemaCollection2 *This,VARIANT_BOOL validateOnLoad);
    void __RPC_STUB IXMLDOMSchemaCollection2_put_validateOnLoad_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSchemaCollection2_get_validateOnLoad_Proxy(IXMLDOMSchemaCollection2 *This,VARIANT_BOOL *validateOnLoad);
    void __RPC_STUB IXMLDOMSchemaCollection2_get_validateOnLoad_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSchemaCollection2_getSchema_Proxy(IXMLDOMSchemaCollection2 *This,BSTR namespaceURI,ISchema **schema);
    void __RPC_STUB IXMLDOMSchemaCollection2_getSchema_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSchemaCollection2_getDeclaration_Proxy(IXMLDOMSchemaCollection2 *This,IXMLDOMNode *node,ISchemaItem **item);
    void __RPC_STUB IXMLDOMSchemaCollection2_getDeclaration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaStringCollection_INTERFACE_DEFINED__
#define __ISchemaStringCollection_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaStringCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaStringCollection : public IDispatch {
    public:
      virtual HRESULT WINAPI get_item(long index,BSTR *bstr) = 0;
      virtual HRESULT WINAPI get_length(long *length) = 0;
      virtual HRESULT WINAPI get__newEnum(IUnknown **ppunk) = 0;
    };
#else
    typedef struct ISchemaStringCollectionVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaStringCollection *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaStringCollection *This);
	ULONG (WINAPI *Release)(ISchemaStringCollection *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaStringCollection *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaStringCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaStringCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaStringCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_item)(ISchemaStringCollection *This,long index,BSTR *bstr);
	HRESULT (WINAPI *get_length)(ISchemaStringCollection *This,long *length);
	HRESULT (WINAPI *get__newEnum)(ISchemaStringCollection *This,IUnknown **ppunk);
      END_INTERFACE
    } ISchemaStringCollectionVtbl;
    struct ISchemaStringCollection {
      CONST_VTBL struct ISchemaStringCollectionVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaStringCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaStringCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaStringCollection_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaStringCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaStringCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaStringCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaStringCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaStringCollection_get_item(This,index,bstr) (This)->lpVtbl->get_item(This,index,bstr)
#define ISchemaStringCollection_get_length(This,length) (This)->lpVtbl->get_length(This,length)
#define ISchemaStringCollection_get__newEnum(This,ppunk) (This)->lpVtbl->get__newEnum(This,ppunk)
#endif
#endif
    HRESULT WINAPI ISchemaStringCollection_get_item_Proxy(ISchemaStringCollection *This,long index,BSTR *bstr);
    void __RPC_STUB ISchemaStringCollection_get_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaStringCollection_get_length_Proxy(ISchemaStringCollection *This,long *length);
    void __RPC_STUB ISchemaStringCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaStringCollection_get__newEnum_Proxy(ISchemaStringCollection *This,IUnknown **ppunk);
    void __RPC_STUB ISchemaStringCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaItemCollection_INTERFACE_DEFINED__
#define __ISchemaItemCollection_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaItemCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaItemCollection : public IDispatch {
    public:
      virtual HRESULT WINAPI get_item(long index,ISchemaItem **item) = 0;
      virtual HRESULT WINAPI itemByName(BSTR name,ISchemaItem **item) = 0;
      virtual HRESULT WINAPI itemByQName(BSTR name,BSTR namespaceURI,ISchemaItem **item) = 0;
      virtual HRESULT WINAPI get_length(long *length) = 0;
      virtual HRESULT WINAPI get__newEnum(IUnknown **ppunk) = 0;
    };
#else
    typedef struct ISchemaItemCollectionVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaItemCollection *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaItemCollection *This);
	ULONG (WINAPI *Release)(ISchemaItemCollection *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaItemCollection *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaItemCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaItemCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaItemCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_item)(ISchemaItemCollection *This,long index,ISchemaItem **item);
	HRESULT (WINAPI *itemByName)(ISchemaItemCollection *This,BSTR name,ISchemaItem **item);
	HRESULT (WINAPI *itemByQName)(ISchemaItemCollection *This,BSTR name,BSTR namespaceURI,ISchemaItem **item);
	HRESULT (WINAPI *get_length)(ISchemaItemCollection *This,long *length);
	HRESULT (WINAPI *get__newEnum)(ISchemaItemCollection *This,IUnknown **ppunk);
      END_INTERFACE
    } ISchemaItemCollectionVtbl;
    struct ISchemaItemCollection {
      CONST_VTBL struct ISchemaItemCollectionVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaItemCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaItemCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaItemCollection_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaItemCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaItemCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaItemCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaItemCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaItemCollection_get_item(This,index,item) (This)->lpVtbl->get_item(This,index,item)
#define ISchemaItemCollection_itemByName(This,name,item) (This)->lpVtbl->itemByName(This,name,item)
#define ISchemaItemCollection_itemByQName(This,name,namespaceURI,item) (This)->lpVtbl->itemByQName(This,name,namespaceURI,item)
#define ISchemaItemCollection_get_length(This,length) (This)->lpVtbl->get_length(This,length)
#define ISchemaItemCollection_get__newEnum(This,ppunk) (This)->lpVtbl->get__newEnum(This,ppunk)
#endif
#endif
    HRESULT WINAPI ISchemaItemCollection_get_item_Proxy(ISchemaItemCollection *This,long index,ISchemaItem **item);
    void __RPC_STUB ISchemaItemCollection_get_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaItemCollection_itemByName_Proxy(ISchemaItemCollection *This,BSTR name,ISchemaItem **item);
    void __RPC_STUB ISchemaItemCollection_itemByName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaItemCollection_itemByQName_Proxy(ISchemaItemCollection *This,BSTR name,BSTR namespaceURI,ISchemaItem **item);
    void __RPC_STUB ISchemaItemCollection_itemByQName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaItemCollection_get_length_Proxy(ISchemaItemCollection *This,long *length);
    void __RPC_STUB ISchemaItemCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaItemCollection_get__newEnum_Proxy(ISchemaItemCollection *This,IUnknown **ppunk);
    void __RPC_STUB ISchemaItemCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaItem_INTERFACE_DEFINED__
#define __ISchemaItem_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaItem;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaItem : public IDispatch {
    public:
      virtual HRESULT WINAPI get_name(BSTR *name) = 0;
      virtual HRESULT WINAPI get_namespaceURI(BSTR *namespaceURI) = 0;
      virtual HRESULT WINAPI get_schema(ISchema **schema) = 0;
      virtual HRESULT WINAPI get_id(BSTR *id) = 0;
      virtual HRESULT WINAPI get_itemType(SOMITEMTYPE *itemType) = 0;
      virtual HRESULT WINAPI get_unhandledAttributes(IVBSAXAttributes **attributes) = 0;
      virtual HRESULT WINAPI writeAnnotation(IUnknown *annotationSink,VARIANT_BOOL *isWritten) = 0;
    };
#else
    typedef struct ISchemaItemVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaItem *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaItem *This);
	ULONG (WINAPI *Release)(ISchemaItem *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaItem *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaItem *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaItem *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaItem *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(ISchemaItem *This,BSTR *name);
	HRESULT (WINAPI *get_namespaceURI)(ISchemaItem *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_schema)(ISchemaItem *This,ISchema **schema);
	HRESULT (WINAPI *get_id)(ISchemaItem *This,BSTR *id);
	HRESULT (WINAPI *get_itemType)(ISchemaItem *This,SOMITEMTYPE *itemType);
	HRESULT (WINAPI *get_unhandledAttributes)(ISchemaItem *This,IVBSAXAttributes **attributes);
	HRESULT (WINAPI *writeAnnotation)(ISchemaItem *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
      END_INTERFACE
    } ISchemaItemVtbl;
    struct ISchemaItem {
      CONST_VTBL struct ISchemaItemVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaItem_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaItem_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaItem_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaItem_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaItem_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaItem_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaItem_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaItem_get_name(This,name) (This)->lpVtbl->get_name(This,name)
#define ISchemaItem_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define ISchemaItem_get_schema(This,schema) (This)->lpVtbl->get_schema(This,schema)
#define ISchemaItem_get_id(This,id) (This)->lpVtbl->get_id(This,id)
#define ISchemaItem_get_itemType(This,itemType) (This)->lpVtbl->get_itemType(This,itemType)
#define ISchemaItem_get_unhandledAttributes(This,attributes) (This)->lpVtbl->get_unhandledAttributes(This,attributes)
#define ISchemaItem_writeAnnotation(This,annotationSink,isWritten) (This)->lpVtbl->writeAnnotation(This,annotationSink,isWritten)
#endif
#endif
    HRESULT WINAPI ISchemaItem_get_name_Proxy(ISchemaItem *This,BSTR *name);
    void __RPC_STUB ISchemaItem_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaItem_get_namespaceURI_Proxy(ISchemaItem *This,BSTR *namespaceURI);
    void __RPC_STUB ISchemaItem_get_namespaceURI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaItem_get_schema_Proxy(ISchemaItem *This,ISchema **schema);
    void __RPC_STUB ISchemaItem_get_schema_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaItem_get_id_Proxy(ISchemaItem *This,BSTR *id);
    void __RPC_STUB ISchemaItem_get_id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaItem_get_itemType_Proxy(ISchemaItem *This,SOMITEMTYPE *itemType);
    void __RPC_STUB ISchemaItem_get_itemType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaItem_get_unhandledAttributes_Proxy(ISchemaItem *This,IVBSAXAttributes **attributes);
    void __RPC_STUB ISchemaItem_get_unhandledAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaItem_writeAnnotation_Proxy(ISchemaItem *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
    void __RPC_STUB ISchemaItem_writeAnnotation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchema_INTERFACE_DEFINED__
#define __ISchema_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchema;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchema : public ISchemaItem {
    public:
      virtual HRESULT WINAPI get_targetNamespace(BSTR *targetNamespace) = 0;
      virtual HRESULT WINAPI get_version(BSTR *version) = 0;
      virtual HRESULT WINAPI get_types(ISchemaItemCollection **types) = 0;
      virtual HRESULT WINAPI get_elements(ISchemaItemCollection **elements) = 0;
      virtual HRESULT WINAPI get_attributes(ISchemaItemCollection **attributes) = 0;
      virtual HRESULT WINAPI get_attributeGroups(ISchemaItemCollection **attributeGroups) = 0;
      virtual HRESULT WINAPI get_modelGroups(ISchemaItemCollection **modelGroups) = 0;
      virtual HRESULT WINAPI get_notations(ISchemaItemCollection **notations) = 0;
      virtual HRESULT WINAPI get_schemaLocations(ISchemaStringCollection **schemaLocations) = 0;
    };
#else
    typedef struct ISchemaVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchema *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchema *This);
	ULONG (WINAPI *Release)(ISchema *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchema *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchema *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchema *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchema *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(ISchema *This,BSTR *name);
	HRESULT (WINAPI *get_namespaceURI)(ISchema *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_schema)(ISchema *This,ISchema **schema);
	HRESULT (WINAPI *get_id)(ISchema *This,BSTR *id);
	HRESULT (WINAPI *get_itemType)(ISchema *This,SOMITEMTYPE *itemType);
	HRESULT (WINAPI *get_unhandledAttributes)(ISchema *This,IVBSAXAttributes **attributes);
	HRESULT (WINAPI *writeAnnotation)(ISchema *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
	HRESULT (WINAPI *get_targetNamespace)(ISchema *This,BSTR *targetNamespace);
	HRESULT (WINAPI *get_version)(ISchema *This,BSTR *version);
	HRESULT (WINAPI *get_types)(ISchema *This,ISchemaItemCollection **types);
	HRESULT (WINAPI *get_elements)(ISchema *This,ISchemaItemCollection **elements);
	HRESULT (WINAPI *get_attributes)(ISchema *This,ISchemaItemCollection **attributes);
	HRESULT (WINAPI *get_attributeGroups)(ISchema *This,ISchemaItemCollection **attributeGroups);
	HRESULT (WINAPI *get_modelGroups)(ISchema *This,ISchemaItemCollection **modelGroups);
	HRESULT (WINAPI *get_notations)(ISchema *This,ISchemaItemCollection **notations);
	HRESULT (WINAPI *get_schemaLocations)(ISchema *This,ISchemaStringCollection **schemaLocations);
      END_INTERFACE
    } ISchemaVtbl;
    struct ISchema {
      CONST_VTBL struct ISchemaVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchema_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchema_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchema_Release(This) (This)->lpVtbl->Release(This)
#define ISchema_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchema_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchema_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchema_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchema_get_name(This,name) (This)->lpVtbl->get_name(This,name)
#define ISchema_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define ISchema_get_schema(This,schema) (This)->lpVtbl->get_schema(This,schema)
#define ISchema_get_id(This,id) (This)->lpVtbl->get_id(This,id)
#define ISchema_get_itemType(This,itemType) (This)->lpVtbl->get_itemType(This,itemType)
#define ISchema_get_unhandledAttributes(This,attributes) (This)->lpVtbl->get_unhandledAttributes(This,attributes)
#define ISchema_writeAnnotation(This,annotationSink,isWritten) (This)->lpVtbl->writeAnnotation(This,annotationSink,isWritten)
#define ISchema_get_targetNamespace(This,targetNamespace) (This)->lpVtbl->get_targetNamespace(This,targetNamespace)
#define ISchema_get_version(This,version) (This)->lpVtbl->get_version(This,version)
#define ISchema_get_types(This,types) (This)->lpVtbl->get_types(This,types)
#define ISchema_get_elements(This,elements) (This)->lpVtbl->get_elements(This,elements)
#define ISchema_get_attributes(This,attributes) (This)->lpVtbl->get_attributes(This,attributes)
#define ISchema_get_attributeGroups(This,attributeGroups) (This)->lpVtbl->get_attributeGroups(This,attributeGroups)
#define ISchema_get_modelGroups(This,modelGroups) (This)->lpVtbl->get_modelGroups(This,modelGroups)
#define ISchema_get_notations(This,notations) (This)->lpVtbl->get_notations(This,notations)
#define ISchema_get_schemaLocations(This,schemaLocations) (This)->lpVtbl->get_schemaLocations(This,schemaLocations)
#endif
#endif
    HRESULT WINAPI ISchema_get_targetNamespace_Proxy(ISchema *This,BSTR *targetNamespace);
    void __RPC_STUB ISchema_get_targetNamespace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchema_get_version_Proxy(ISchema *This,BSTR *version);
    void __RPC_STUB ISchema_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchema_get_types_Proxy(ISchema *This,ISchemaItemCollection **types);
    void __RPC_STUB ISchema_get_types_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchema_get_elements_Proxy(ISchema *This,ISchemaItemCollection **elements);
    void __RPC_STUB ISchema_get_elements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchema_get_attributes_Proxy(ISchema *This,ISchemaItemCollection **attributes);
    void __RPC_STUB ISchema_get_attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchema_get_attributeGroups_Proxy(ISchema *This,ISchemaItemCollection **attributeGroups);
    void __RPC_STUB ISchema_get_attributeGroups_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchema_get_modelGroups_Proxy(ISchema *This,ISchemaItemCollection **modelGroups);
    void __RPC_STUB ISchema_get_modelGroups_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchema_get_notations_Proxy(ISchema *This,ISchemaItemCollection **notations);
    void __RPC_STUB ISchema_get_notations_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchema_get_schemaLocations_Proxy(ISchema *This,ISchemaStringCollection **schemaLocations);
    void __RPC_STUB ISchema_get_schemaLocations_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaParticle_INTERFACE_DEFINED__
#define __ISchemaParticle_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaParticle;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaParticle : public ISchemaItem {
    public:
      virtual HRESULT WINAPI get_minOccurs(VARIANT *minOccurs) = 0;
      virtual HRESULT WINAPI get_maxOccurs(VARIANT *maxOccurs) = 0;
    };
#else
    typedef struct ISchemaParticleVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaParticle *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaParticle *This);
	ULONG (WINAPI *Release)(ISchemaParticle *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaParticle *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaParticle *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaParticle *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaParticle *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(ISchemaParticle *This,BSTR *name);
	HRESULT (WINAPI *get_namespaceURI)(ISchemaParticle *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_schema)(ISchemaParticle *This,ISchema **schema);
	HRESULT (WINAPI *get_id)(ISchemaParticle *This,BSTR *id);
	HRESULT (WINAPI *get_itemType)(ISchemaParticle *This,SOMITEMTYPE *itemType);
	HRESULT (WINAPI *get_unhandledAttributes)(ISchemaParticle *This,IVBSAXAttributes **attributes);
	HRESULT (WINAPI *writeAnnotation)(ISchemaParticle *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
	HRESULT (WINAPI *get_minOccurs)(ISchemaParticle *This,VARIANT *minOccurs);
	HRESULT (WINAPI *get_maxOccurs)(ISchemaParticle *This,VARIANT *maxOccurs);
      END_INTERFACE
    } ISchemaParticleVtbl;
    struct ISchemaParticle {
      CONST_VTBL struct ISchemaParticleVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaParticle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaParticle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaParticle_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaParticle_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaParticle_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaParticle_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaParticle_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaParticle_get_name(This,name) (This)->lpVtbl->get_name(This,name)
#define ISchemaParticle_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define ISchemaParticle_get_schema(This,schema) (This)->lpVtbl->get_schema(This,schema)
#define ISchemaParticle_get_id(This,id) (This)->lpVtbl->get_id(This,id)
#define ISchemaParticle_get_itemType(This,itemType) (This)->lpVtbl->get_itemType(This,itemType)
#define ISchemaParticle_get_unhandledAttributes(This,attributes) (This)->lpVtbl->get_unhandledAttributes(This,attributes)
#define ISchemaParticle_writeAnnotation(This,annotationSink,isWritten) (This)->lpVtbl->writeAnnotation(This,annotationSink,isWritten)
#define ISchemaParticle_get_minOccurs(This,minOccurs) (This)->lpVtbl->get_minOccurs(This,minOccurs)
#define ISchemaParticle_get_maxOccurs(This,maxOccurs) (This)->lpVtbl->get_maxOccurs(This,maxOccurs)
#endif
#endif
    HRESULT WINAPI ISchemaParticle_get_minOccurs_Proxy(ISchemaParticle *This,VARIANT *minOccurs);
    void __RPC_STUB ISchemaParticle_get_minOccurs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaParticle_get_maxOccurs_Proxy(ISchemaParticle *This,VARIANT *maxOccurs);
    void __RPC_STUB ISchemaParticle_get_maxOccurs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaAttribute_INTERFACE_DEFINED__
#define __ISchemaAttribute_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaAttribute;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaAttribute : public ISchemaItem {
    public:
      virtual HRESULT WINAPI get_type(ISchemaType **type) = 0;
      virtual HRESULT WINAPI get_scope(ISchemaComplexType **scope) = 0;
      virtual HRESULT WINAPI get_defaultValue(BSTR *defaultValue) = 0;
      virtual HRESULT WINAPI get_fixedValue(BSTR *fixedValue) = 0;
      virtual HRESULT WINAPI get_use(SCHEMAUSE *use) = 0;
      virtual HRESULT WINAPI get_isReference(VARIANT_BOOL *reference) = 0;
    };
#else
    typedef struct ISchemaAttributeVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaAttribute *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaAttribute *This);
	ULONG (WINAPI *Release)(ISchemaAttribute *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaAttribute *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaAttribute *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaAttribute *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaAttribute *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(ISchemaAttribute *This,BSTR *name);
	HRESULT (WINAPI *get_namespaceURI)(ISchemaAttribute *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_schema)(ISchemaAttribute *This,ISchema **schema);
	HRESULT (WINAPI *get_id)(ISchemaAttribute *This,BSTR *id);
	HRESULT (WINAPI *get_itemType)(ISchemaAttribute *This,SOMITEMTYPE *itemType);
	HRESULT (WINAPI *get_unhandledAttributes)(ISchemaAttribute *This,IVBSAXAttributes **attributes);
	HRESULT (WINAPI *writeAnnotation)(ISchemaAttribute *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
	HRESULT (WINAPI *get_type)(ISchemaAttribute *This,ISchemaType **type);
	HRESULT (WINAPI *get_scope)(ISchemaAttribute *This,ISchemaComplexType **scope);
	HRESULT (WINAPI *get_defaultValue)(ISchemaAttribute *This,BSTR *defaultValue);
	HRESULT (WINAPI *get_fixedValue)(ISchemaAttribute *This,BSTR *fixedValue);
	HRESULT (WINAPI *get_use)(ISchemaAttribute *This,SCHEMAUSE *use);
	HRESULT (WINAPI *get_isReference)(ISchemaAttribute *This,VARIANT_BOOL *reference);
      END_INTERFACE
    } ISchemaAttributeVtbl;
    struct ISchemaAttribute {
      CONST_VTBL struct ISchemaAttributeVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaAttribute_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaAttribute_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaAttribute_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaAttribute_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaAttribute_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaAttribute_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaAttribute_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaAttribute_get_name(This,name) (This)->lpVtbl->get_name(This,name)
#define ISchemaAttribute_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define ISchemaAttribute_get_schema(This,schema) (This)->lpVtbl->get_schema(This,schema)
#define ISchemaAttribute_get_id(This,id) (This)->lpVtbl->get_id(This,id)
#define ISchemaAttribute_get_itemType(This,itemType) (This)->lpVtbl->get_itemType(This,itemType)
#define ISchemaAttribute_get_unhandledAttributes(This,attributes) (This)->lpVtbl->get_unhandledAttributes(This,attributes)
#define ISchemaAttribute_writeAnnotation(This,annotationSink,isWritten) (This)->lpVtbl->writeAnnotation(This,annotationSink,isWritten)
#define ISchemaAttribute_get_type(This,type) (This)->lpVtbl->get_type(This,type)
#define ISchemaAttribute_get_scope(This,scope) (This)->lpVtbl->get_scope(This,scope)
#define ISchemaAttribute_get_defaultValue(This,defaultValue) (This)->lpVtbl->get_defaultValue(This,defaultValue)
#define ISchemaAttribute_get_fixedValue(This,fixedValue) (This)->lpVtbl->get_fixedValue(This,fixedValue)
#define ISchemaAttribute_get_use(This,use) (This)->lpVtbl->get_use(This,use)
#define ISchemaAttribute_get_isReference(This,reference) (This)->lpVtbl->get_isReference(This,reference)
#endif
#endif
    HRESULT WINAPI ISchemaAttribute_get_type_Proxy(ISchemaAttribute *This,ISchemaType **type);
    void __RPC_STUB ISchemaAttribute_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaAttribute_get_scope_Proxy(ISchemaAttribute *This,ISchemaComplexType **scope);
    void __RPC_STUB ISchemaAttribute_get_scope_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaAttribute_get_defaultValue_Proxy(ISchemaAttribute *This,BSTR *defaultValue);
    void __RPC_STUB ISchemaAttribute_get_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaAttribute_get_fixedValue_Proxy(ISchemaAttribute *This,BSTR *fixedValue);
    void __RPC_STUB ISchemaAttribute_get_fixedValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaAttribute_get_use_Proxy(ISchemaAttribute *This,SCHEMAUSE *use);
    void __RPC_STUB ISchemaAttribute_get_use_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaAttribute_get_isReference_Proxy(ISchemaAttribute *This,VARIANT_BOOL *reference);
    void __RPC_STUB ISchemaAttribute_get_isReference_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaElement_INTERFACE_DEFINED__
#define __ISchemaElement_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaElement : public ISchemaParticle {
    public:
      virtual HRESULT WINAPI get_type(ISchemaType **type) = 0;
      virtual HRESULT WINAPI get_scope(ISchemaComplexType **scope) = 0;
      virtual HRESULT WINAPI get_defaultValue(BSTR *defaultValue) = 0;
      virtual HRESULT WINAPI get_fixedValue(BSTR *fixedValue) = 0;
      virtual HRESULT WINAPI get_isNillable(VARIANT_BOOL *nillable) = 0;
      virtual HRESULT WINAPI get_identityConstraints(ISchemaItemCollection **constraints) = 0;
      virtual HRESULT WINAPI get_substitutionGroup(ISchemaElement **element) = 0;
      virtual HRESULT WINAPI get_substitutionGroupExclusions(SCHEMADERIVATIONMETHOD *exclusions) = 0;
      virtual HRESULT WINAPI get_disallowedSubstitutions(SCHEMADERIVATIONMETHOD *disallowed) = 0;
      virtual HRESULT WINAPI get_isAbstract(VARIANT_BOOL *abstract) = 0;
      virtual HRESULT WINAPI get_isReference(VARIANT_BOOL *reference) = 0;
    };
#else
    typedef struct ISchemaElementVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaElement *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaElement *This);
	ULONG (WINAPI *Release)(ISchemaElement *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaElement *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(ISchemaElement *This,BSTR *name);
	HRESULT (WINAPI *get_namespaceURI)(ISchemaElement *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_schema)(ISchemaElement *This,ISchema **schema);
	HRESULT (WINAPI *get_id)(ISchemaElement *This,BSTR *id);
	HRESULT (WINAPI *get_itemType)(ISchemaElement *This,SOMITEMTYPE *itemType);
	HRESULT (WINAPI *get_unhandledAttributes)(ISchemaElement *This,IVBSAXAttributes **attributes);
	HRESULT (WINAPI *writeAnnotation)(ISchemaElement *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
	HRESULT (WINAPI *get_minOccurs)(ISchemaElement *This,VARIANT *minOccurs);
	HRESULT (WINAPI *get_maxOccurs)(ISchemaElement *This,VARIANT *maxOccurs);
	HRESULT (WINAPI *get_type)(ISchemaElement *This,ISchemaType **type);
	HRESULT (WINAPI *get_scope)(ISchemaElement *This,ISchemaComplexType **scope);
	HRESULT (WINAPI *get_defaultValue)(ISchemaElement *This,BSTR *defaultValue);
	HRESULT (WINAPI *get_fixedValue)(ISchemaElement *This,BSTR *fixedValue);
	HRESULT (WINAPI *get_isNillable)(ISchemaElement *This,VARIANT_BOOL *nillable);
	HRESULT (WINAPI *get_identityConstraints)(ISchemaElement *This,ISchemaItemCollection **constraints);
	HRESULT (WINAPI *get_substitutionGroup)(ISchemaElement *This,ISchemaElement **element);
	HRESULT (WINAPI *get_substitutionGroupExclusions)(ISchemaElement *This,SCHEMADERIVATIONMETHOD *exclusions);
	HRESULT (WINAPI *get_disallowedSubstitutions)(ISchemaElement *This,SCHEMADERIVATIONMETHOD *disallowed);
	HRESULT (WINAPI *get_isAbstract)(ISchemaElement *This,VARIANT_BOOL *abstract);
	HRESULT (WINAPI *get_isReference)(ISchemaElement *This,VARIANT_BOOL *reference);
      END_INTERFACE
    } ISchemaElementVtbl;
    struct ISchemaElement {
      CONST_VTBL struct ISchemaElementVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaElement_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaElement_get_name(This,name) (This)->lpVtbl->get_name(This,name)
#define ISchemaElement_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define ISchemaElement_get_schema(This,schema) (This)->lpVtbl->get_schema(This,schema)
#define ISchemaElement_get_id(This,id) (This)->lpVtbl->get_id(This,id)
#define ISchemaElement_get_itemType(This,itemType) (This)->lpVtbl->get_itemType(This,itemType)
#define ISchemaElement_get_unhandledAttributes(This,attributes) (This)->lpVtbl->get_unhandledAttributes(This,attributes)
#define ISchemaElement_writeAnnotation(This,annotationSink,isWritten) (This)->lpVtbl->writeAnnotation(This,annotationSink,isWritten)
#define ISchemaElement_get_minOccurs(This,minOccurs) (This)->lpVtbl->get_minOccurs(This,minOccurs)
#define ISchemaElement_get_maxOccurs(This,maxOccurs) (This)->lpVtbl->get_maxOccurs(This,maxOccurs)
#define ISchemaElement_get_type(This,type) (This)->lpVtbl->get_type(This,type)
#define ISchemaElement_get_scope(This,scope) (This)->lpVtbl->get_scope(This,scope)
#define ISchemaElement_get_defaultValue(This,defaultValue) (This)->lpVtbl->get_defaultValue(This,defaultValue)
#define ISchemaElement_get_fixedValue(This,fixedValue) (This)->lpVtbl->get_fixedValue(This,fixedValue)
#define ISchemaElement_get_isNillable(This,nillable) (This)->lpVtbl->get_isNillable(This,nillable)
#define ISchemaElement_get_identityConstraints(This,constraints) (This)->lpVtbl->get_identityConstraints(This,constraints)
#define ISchemaElement_get_substitutionGroup(This,element) (This)->lpVtbl->get_substitutionGroup(This,element)
#define ISchemaElement_get_substitutionGroupExclusions(This,exclusions) (This)->lpVtbl->get_substitutionGroupExclusions(This,exclusions)
#define ISchemaElement_get_disallowedSubstitutions(This,disallowed) (This)->lpVtbl->get_disallowedSubstitutions(This,disallowed)
#define ISchemaElement_get_isAbstract(This,abstract) (This)->lpVtbl->get_isAbstract(This,abstract)
#define ISchemaElement_get_isReference(This,reference) (This)->lpVtbl->get_isReference(This,reference)
#endif
#endif
    HRESULT WINAPI ISchemaElement_get_type_Proxy(ISchemaElement *This,ISchemaType **type);
    void __RPC_STUB ISchemaElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaElement_get_scope_Proxy(ISchemaElement *This,ISchemaComplexType **scope);
    void __RPC_STUB ISchemaElement_get_scope_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaElement_get_defaultValue_Proxy(ISchemaElement *This,BSTR *defaultValue);
    void __RPC_STUB ISchemaElement_get_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaElement_get_fixedValue_Proxy(ISchemaElement *This,BSTR *fixedValue);
    void __RPC_STUB ISchemaElement_get_fixedValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaElement_get_isNillable_Proxy(ISchemaElement *This,VARIANT_BOOL *nillable);
    void __RPC_STUB ISchemaElement_get_isNillable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaElement_get_identityConstraints_Proxy(ISchemaElement *This,ISchemaItemCollection **constraints);
    void __RPC_STUB ISchemaElement_get_identityConstraints_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaElement_get_substitutionGroup_Proxy(ISchemaElement *This,ISchemaElement **element);
    void __RPC_STUB ISchemaElement_get_substitutionGroup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaElement_get_substitutionGroupExclusions_Proxy(ISchemaElement *This,SCHEMADERIVATIONMETHOD *exclusions);
    void __RPC_STUB ISchemaElement_get_substitutionGroupExclusions_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaElement_get_disallowedSubstitutions_Proxy(ISchemaElement *This,SCHEMADERIVATIONMETHOD *disallowed);
    void __RPC_STUB ISchemaElement_get_disallowedSubstitutions_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaElement_get_isAbstract_Proxy(ISchemaElement *This,VARIANT_BOOL *abstract);
    void __RPC_STUB ISchemaElement_get_isAbstract_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaElement_get_isReference_Proxy(ISchemaElement *This,VARIANT_BOOL *reference);
    void __RPC_STUB ISchemaElement_get_isReference_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaType_INTERFACE_DEFINED__
#define __ISchemaType_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaType;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaType : public ISchemaItem {
    public:
      virtual HRESULT WINAPI get_baseTypes(ISchemaItemCollection **baseTypes) = 0;
      virtual HRESULT WINAPI get_final(SCHEMADERIVATIONMETHOD *final) = 0;
      virtual HRESULT WINAPI get_variety(SCHEMATYPEVARIETY *variety) = 0;
      virtual HRESULT WINAPI get_derivedBy(SCHEMADERIVATIONMETHOD *derivedBy) = 0;
      virtual HRESULT WINAPI isValid(BSTR data,VARIANT_BOOL *valid) = 0;
      virtual HRESULT WINAPI get_minExclusive(BSTR *minExclusive) = 0;
      virtual HRESULT WINAPI get_minInclusive(BSTR *minInclusive) = 0;
      virtual HRESULT WINAPI get_maxExclusive(BSTR *maxExclusive) = 0;
      virtual HRESULT WINAPI get_maxInclusive(BSTR *maxInclusive) = 0;
      virtual HRESULT WINAPI get_totalDigits(VARIANT *totalDigits) = 0;
      virtual HRESULT WINAPI get_fractionDigits(VARIANT *fractionDigits) = 0;
      virtual HRESULT WINAPI get_length(VARIANT *length) = 0;
      virtual HRESULT WINAPI get_minLength(VARIANT *minLength) = 0;
      virtual HRESULT WINAPI get_maxLength(VARIANT *maxLength) = 0;
      virtual HRESULT WINAPI get_enumeration(ISchemaStringCollection **enumeration) = 0;
      virtual HRESULT WINAPI get_whitespace(SCHEMAWHITESPACE *whitespace) = 0;
      virtual HRESULT WINAPI get_patterns(ISchemaStringCollection **patterns) = 0;
    };
#else
    typedef struct ISchemaTypeVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaType *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaType *This);
	ULONG (WINAPI *Release)(ISchemaType *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaType *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaType *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaType *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaType *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(ISchemaType *This,BSTR *name);
	HRESULT (WINAPI *get_namespaceURI)(ISchemaType *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_schema)(ISchemaType *This,ISchema **schema);
	HRESULT (WINAPI *get_id)(ISchemaType *This,BSTR *id);
	HRESULT (WINAPI *get_itemType)(ISchemaType *This,SOMITEMTYPE *itemType);
	HRESULT (WINAPI *get_unhandledAttributes)(ISchemaType *This,IVBSAXAttributes **attributes);
	HRESULT (WINAPI *writeAnnotation)(ISchemaType *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
	HRESULT (WINAPI *get_baseTypes)(ISchemaType *This,ISchemaItemCollection **baseTypes);
	HRESULT (WINAPI *get_final)(ISchemaType *This,SCHEMADERIVATIONMETHOD *final);
	HRESULT (WINAPI *get_variety)(ISchemaType *This,SCHEMATYPEVARIETY *variety);
	HRESULT (WINAPI *get_derivedBy)(ISchemaType *This,SCHEMADERIVATIONMETHOD *derivedBy);
	HRESULT (WINAPI *isValid)(ISchemaType *This,BSTR data,VARIANT_BOOL *valid);
	HRESULT (WINAPI *get_minExclusive)(ISchemaType *This,BSTR *minExclusive);
	HRESULT (WINAPI *get_minInclusive)(ISchemaType *This,BSTR *minInclusive);
	HRESULT (WINAPI *get_maxExclusive)(ISchemaType *This,BSTR *maxExclusive);
	HRESULT (WINAPI *get_maxInclusive)(ISchemaType *This,BSTR *maxInclusive);
	HRESULT (WINAPI *get_totalDigits)(ISchemaType *This,VARIANT *totalDigits);
	HRESULT (WINAPI *get_fractionDigits)(ISchemaType *This,VARIANT *fractionDigits);
	HRESULT (WINAPI *get_length)(ISchemaType *This,VARIANT *length);
	HRESULT (WINAPI *get_minLength)(ISchemaType *This,VARIANT *minLength);
	HRESULT (WINAPI *get_maxLength)(ISchemaType *This,VARIANT *maxLength);
	HRESULT (WINAPI *get_enumeration)(ISchemaType *This,ISchemaStringCollection **enumeration);
	HRESULT (WINAPI *get_whitespace)(ISchemaType *This,SCHEMAWHITESPACE *whitespace);
	HRESULT (WINAPI *get_patterns)(ISchemaType *This,ISchemaStringCollection **patterns);
      END_INTERFACE
    } ISchemaTypeVtbl;
    struct ISchemaType {
      CONST_VTBL struct ISchemaTypeVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaType_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaType_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaType_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaType_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaType_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaType_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaType_get_name(This,name) (This)->lpVtbl->get_name(This,name)
#define ISchemaType_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define ISchemaType_get_schema(This,schema) (This)->lpVtbl->get_schema(This,schema)
#define ISchemaType_get_id(This,id) (This)->lpVtbl->get_id(This,id)
#define ISchemaType_get_itemType(This,itemType) (This)->lpVtbl->get_itemType(This,itemType)
#define ISchemaType_get_unhandledAttributes(This,attributes) (This)->lpVtbl->get_unhandledAttributes(This,attributes)
#define ISchemaType_writeAnnotation(This,annotationSink,isWritten) (This)->lpVtbl->writeAnnotation(This,annotationSink,isWritten)
#define ISchemaType_get_baseTypes(This,baseTypes) (This)->lpVtbl->get_baseTypes(This,baseTypes)
#define ISchemaType_get_final(This,final) (This)->lpVtbl->get_final(This,final)
#define ISchemaType_get_variety(This,variety) (This)->lpVtbl->get_variety(This,variety)
#define ISchemaType_get_derivedBy(This,derivedBy) (This)->lpVtbl->get_derivedBy(This,derivedBy)
#define ISchemaType_isValid(This,data,valid) (This)->lpVtbl->isValid(This,data,valid)
#define ISchemaType_get_minExclusive(This,minExclusive) (This)->lpVtbl->get_minExclusive(This,minExclusive)
#define ISchemaType_get_minInclusive(This,minInclusive) (This)->lpVtbl->get_minInclusive(This,minInclusive)
#define ISchemaType_get_maxExclusive(This,maxExclusive) (This)->lpVtbl->get_maxExclusive(This,maxExclusive)
#define ISchemaType_get_maxInclusive(This,maxInclusive) (This)->lpVtbl->get_maxInclusive(This,maxInclusive)
#define ISchemaType_get_totalDigits(This,totalDigits) (This)->lpVtbl->get_totalDigits(This,totalDigits)
#define ISchemaType_get_fractionDigits(This,fractionDigits) (This)->lpVtbl->get_fractionDigits(This,fractionDigits)
#define ISchemaType_get_length(This,length) (This)->lpVtbl->get_length(This,length)
#define ISchemaType_get_minLength(This,minLength) (This)->lpVtbl->get_minLength(This,minLength)
#define ISchemaType_get_maxLength(This,maxLength) (This)->lpVtbl->get_maxLength(This,maxLength)
#define ISchemaType_get_enumeration(This,enumeration) (This)->lpVtbl->get_enumeration(This,enumeration)
#define ISchemaType_get_whitespace(This,whitespace) (This)->lpVtbl->get_whitespace(This,whitespace)
#define ISchemaType_get_patterns(This,patterns) (This)->lpVtbl->get_patterns(This,patterns)
#endif
#endif
    HRESULT WINAPI ISchemaType_get_baseTypes_Proxy(ISchemaType *This,ISchemaItemCollection **baseTypes);
    void __RPC_STUB ISchemaType_get_baseTypes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_final_Proxy(ISchemaType *This,SCHEMADERIVATIONMETHOD *final);
    void __RPC_STUB ISchemaType_get_final_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_variety_Proxy(ISchemaType *This,SCHEMATYPEVARIETY *variety);
    void __RPC_STUB ISchemaType_get_variety_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_derivedBy_Proxy(ISchemaType *This,SCHEMADERIVATIONMETHOD *derivedBy);
    void __RPC_STUB ISchemaType_get_derivedBy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_isValid_Proxy(ISchemaType *This,BSTR data,VARIANT_BOOL *valid);
    void __RPC_STUB ISchemaType_isValid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_minExclusive_Proxy(ISchemaType *This,BSTR *minExclusive);
    void __RPC_STUB ISchemaType_get_minExclusive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_minInclusive_Proxy(ISchemaType *This,BSTR *minInclusive);
    void __RPC_STUB ISchemaType_get_minInclusive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_maxExclusive_Proxy(ISchemaType *This,BSTR *maxExclusive);
    void __RPC_STUB ISchemaType_get_maxExclusive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_maxInclusive_Proxy(ISchemaType *This,BSTR *maxInclusive);
    void __RPC_STUB ISchemaType_get_maxInclusive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_totalDigits_Proxy(ISchemaType *This,VARIANT *totalDigits);
    void __RPC_STUB ISchemaType_get_totalDigits_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_fractionDigits_Proxy(ISchemaType *This,VARIANT *fractionDigits);
    void __RPC_STUB ISchemaType_get_fractionDigits_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_length_Proxy(ISchemaType *This,VARIANT *length);
    void __RPC_STUB ISchemaType_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_minLength_Proxy(ISchemaType *This,VARIANT *minLength);
    void __RPC_STUB ISchemaType_get_minLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_maxLength_Proxy(ISchemaType *This,VARIANT *maxLength);
    void __RPC_STUB ISchemaType_get_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_enumeration_Proxy(ISchemaType *This,ISchemaStringCollection **enumeration);
    void __RPC_STUB ISchemaType_get_enumeration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_whitespace_Proxy(ISchemaType *This,SCHEMAWHITESPACE *whitespace);
    void __RPC_STUB ISchemaType_get_whitespace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaType_get_patterns_Proxy(ISchemaType *This,ISchemaStringCollection **patterns);
    void __RPC_STUB ISchemaType_get_patterns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaComplexType_INTERFACE_DEFINED__
#define __ISchemaComplexType_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaComplexType;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaComplexType : public ISchemaType {
    public:
      virtual HRESULT WINAPI get_isAbstract(VARIANT_BOOL *abstract) = 0;
      virtual HRESULT WINAPI get_anyAttribute(ISchemaAny **anyAttribute) = 0;
      virtual HRESULT WINAPI get_attributes(ISchemaItemCollection **attributes) = 0;
      virtual HRESULT WINAPI get_contentType(SCHEMACONTENTTYPE *contentType) = 0;
      virtual HRESULT WINAPI get_contentModel(ISchemaModelGroup **contentModel) = 0;
      virtual HRESULT WINAPI get_prohibitedSubstitutions(SCHEMADERIVATIONMETHOD *prohibited) = 0;
    };
#else
    typedef struct ISchemaComplexTypeVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaComplexType *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaComplexType *This);
	ULONG (WINAPI *Release)(ISchemaComplexType *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaComplexType *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaComplexType *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaComplexType *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaComplexType *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(ISchemaComplexType *This,BSTR *name);
	HRESULT (WINAPI *get_namespaceURI)(ISchemaComplexType *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_schema)(ISchemaComplexType *This,ISchema **schema);
	HRESULT (WINAPI *get_id)(ISchemaComplexType *This,BSTR *id);
	HRESULT (WINAPI *get_itemType)(ISchemaComplexType *This,SOMITEMTYPE *itemType);
	HRESULT (WINAPI *get_unhandledAttributes)(ISchemaComplexType *This,IVBSAXAttributes **attributes);
	HRESULT (WINAPI *writeAnnotation)(ISchemaComplexType *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
	HRESULT (WINAPI *get_baseTypes)(ISchemaComplexType *This,ISchemaItemCollection **baseTypes);
	HRESULT (WINAPI *get_final)(ISchemaComplexType *This,SCHEMADERIVATIONMETHOD *final);
	HRESULT (WINAPI *get_variety)(ISchemaComplexType *This,SCHEMATYPEVARIETY *variety);
	HRESULT (WINAPI *get_derivedBy)(ISchemaComplexType *This,SCHEMADERIVATIONMETHOD *derivedBy);
	HRESULT (WINAPI *isValid)(ISchemaComplexType *This,BSTR data,VARIANT_BOOL *valid);
	HRESULT (WINAPI *get_minExclusive)(ISchemaComplexType *This,BSTR *minExclusive);
	HRESULT (WINAPI *get_minInclusive)(ISchemaComplexType *This,BSTR *minInclusive);
	HRESULT (WINAPI *get_maxExclusive)(ISchemaComplexType *This,BSTR *maxExclusive);
	HRESULT (WINAPI *get_maxInclusive)(ISchemaComplexType *This,BSTR *maxInclusive);
	HRESULT (WINAPI *get_totalDigits)(ISchemaComplexType *This,VARIANT *totalDigits);
	HRESULT (WINAPI *get_fractionDigits)(ISchemaComplexType *This,VARIANT *fractionDigits);
	HRESULT (WINAPI *get_length)(ISchemaComplexType *This,VARIANT *length);
	HRESULT (WINAPI *get_minLength)(ISchemaComplexType *This,VARIANT *minLength);
	HRESULT (WINAPI *get_maxLength)(ISchemaComplexType *This,VARIANT *maxLength);
	HRESULT (WINAPI *get_enumeration)(ISchemaComplexType *This,ISchemaStringCollection **enumeration);
	HRESULT (WINAPI *get_whitespace)(ISchemaComplexType *This,SCHEMAWHITESPACE *whitespace);
	HRESULT (WINAPI *get_patterns)(ISchemaComplexType *This,ISchemaStringCollection **patterns);
	HRESULT (WINAPI *get_isAbstract)(ISchemaComplexType *This,VARIANT_BOOL *abstract);
	HRESULT (WINAPI *get_anyAttribute)(ISchemaComplexType *This,ISchemaAny **anyAttribute);
	HRESULT (WINAPI *get_attributes)(ISchemaComplexType *This,ISchemaItemCollection **attributes);
	HRESULT (WINAPI *get_contentType)(ISchemaComplexType *This,SCHEMACONTENTTYPE *contentType);
	HRESULT (WINAPI *get_contentModel)(ISchemaComplexType *This,ISchemaModelGroup **contentModel);
	HRESULT (WINAPI *get_prohibitedSubstitutions)(ISchemaComplexType *This,SCHEMADERIVATIONMETHOD *prohibited);
      END_INTERFACE
    } ISchemaComplexTypeVtbl;
    struct ISchemaComplexType {
      CONST_VTBL struct ISchemaComplexTypeVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaComplexType_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaComplexType_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaComplexType_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaComplexType_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaComplexType_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaComplexType_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaComplexType_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaComplexType_get_name(This,name) (This)->lpVtbl->get_name(This,name)
#define ISchemaComplexType_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define ISchemaComplexType_get_schema(This,schema) (This)->lpVtbl->get_schema(This,schema)
#define ISchemaComplexType_get_id(This,id) (This)->lpVtbl->get_id(This,id)
#define ISchemaComplexType_get_itemType(This,itemType) (This)->lpVtbl->get_itemType(This,itemType)
#define ISchemaComplexType_get_unhandledAttributes(This,attributes) (This)->lpVtbl->get_unhandledAttributes(This,attributes)
#define ISchemaComplexType_writeAnnotation(This,annotationSink,isWritten) (This)->lpVtbl->writeAnnotation(This,annotationSink,isWritten)
#define ISchemaComplexType_get_baseTypes(This,baseTypes) (This)->lpVtbl->get_baseTypes(This,baseTypes)
#define ISchemaComplexType_get_final(This,final) (This)->lpVtbl->get_final(This,final)
#define ISchemaComplexType_get_variety(This,variety) (This)->lpVtbl->get_variety(This,variety)
#define ISchemaComplexType_get_derivedBy(This,derivedBy) (This)->lpVtbl->get_derivedBy(This,derivedBy)
#define ISchemaComplexType_isValid(This,data,valid) (This)->lpVtbl->isValid(This,data,valid)
#define ISchemaComplexType_get_minExclusive(This,minExclusive) (This)->lpVtbl->get_minExclusive(This,minExclusive)
#define ISchemaComplexType_get_minInclusive(This,minInclusive) (This)->lpVtbl->get_minInclusive(This,minInclusive)
#define ISchemaComplexType_get_maxExclusive(This,maxExclusive) (This)->lpVtbl->get_maxExclusive(This,maxExclusive)
#define ISchemaComplexType_get_maxInclusive(This,maxInclusive) (This)->lpVtbl->get_maxInclusive(This,maxInclusive)
#define ISchemaComplexType_get_totalDigits(This,totalDigits) (This)->lpVtbl->get_totalDigits(This,totalDigits)
#define ISchemaComplexType_get_fractionDigits(This,fractionDigits) (This)->lpVtbl->get_fractionDigits(This,fractionDigits)
#define ISchemaComplexType_get_length(This,length) (This)->lpVtbl->get_length(This,length)
#define ISchemaComplexType_get_minLength(This,minLength) (This)->lpVtbl->get_minLength(This,minLength)
#define ISchemaComplexType_get_maxLength(This,maxLength) (This)->lpVtbl->get_maxLength(This,maxLength)
#define ISchemaComplexType_get_enumeration(This,enumeration) (This)->lpVtbl->get_enumeration(This,enumeration)
#define ISchemaComplexType_get_whitespace(This,whitespace) (This)->lpVtbl->get_whitespace(This,whitespace)
#define ISchemaComplexType_get_patterns(This,patterns) (This)->lpVtbl->get_patterns(This,patterns)
#define ISchemaComplexType_get_isAbstract(This,abstract) (This)->lpVtbl->get_isAbstract(This,abstract)
#define ISchemaComplexType_get_anyAttribute(This,anyAttribute) (This)->lpVtbl->get_anyAttribute(This,anyAttribute)
#define ISchemaComplexType_get_attributes(This,attributes) (This)->lpVtbl->get_attributes(This,attributes)
#define ISchemaComplexType_get_contentType(This,contentType) (This)->lpVtbl->get_contentType(This,contentType)
#define ISchemaComplexType_get_contentModel(This,contentModel) (This)->lpVtbl->get_contentModel(This,contentModel)
#define ISchemaComplexType_get_prohibitedSubstitutions(This,prohibited) (This)->lpVtbl->get_prohibitedSubstitutions(This,prohibited)
#endif
#endif
    HRESULT WINAPI ISchemaComplexType_get_isAbstract_Proxy(ISchemaComplexType *This,VARIANT_BOOL *abstract);
    void __RPC_STUB ISchemaComplexType_get_isAbstract_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaComplexType_get_anyAttribute_Proxy(ISchemaComplexType *This,ISchemaAny **anyAttribute);
    void __RPC_STUB ISchemaComplexType_get_anyAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaComplexType_get_attributes_Proxy(ISchemaComplexType *This,ISchemaItemCollection **attributes);
    void __RPC_STUB ISchemaComplexType_get_attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaComplexType_get_contentType_Proxy(ISchemaComplexType *This,SCHEMACONTENTTYPE *contentType);
    void __RPC_STUB ISchemaComplexType_get_contentType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaComplexType_get_contentModel_Proxy(ISchemaComplexType *This,ISchemaModelGroup **contentModel);
    void __RPC_STUB ISchemaComplexType_get_contentModel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaComplexType_get_prohibitedSubstitutions_Proxy(ISchemaComplexType *This,SCHEMADERIVATIONMETHOD *prohibited);
    void __RPC_STUB ISchemaComplexType_get_prohibitedSubstitutions_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaAttributeGroup_INTERFACE_DEFINED__
#define __ISchemaAttributeGroup_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaAttributeGroup;

#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaAttributeGroup : public ISchemaItem {
    public:
      virtual HRESULT WINAPI get_anyAttribute(ISchemaAny **anyAttribute) = 0;
      virtual HRESULT WINAPI get_attributes(ISchemaItemCollection **attributes) = 0;
    };
#else
    typedef struct ISchemaAttributeGroupVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaAttributeGroup *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaAttributeGroup *This);
	ULONG (WINAPI *Release)(ISchemaAttributeGroup *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaAttributeGroup *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaAttributeGroup *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaAttributeGroup *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaAttributeGroup *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(ISchemaAttributeGroup *This,BSTR *name);
	HRESULT (WINAPI *get_namespaceURI)(ISchemaAttributeGroup *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_schema)(ISchemaAttributeGroup *This,ISchema **schema);
	HRESULT (WINAPI *get_id)(ISchemaAttributeGroup *This,BSTR *id);
	HRESULT (WINAPI *get_itemType)(ISchemaAttributeGroup *This,SOMITEMTYPE *itemType);
	HRESULT (WINAPI *get_unhandledAttributes)(ISchemaAttributeGroup *This,IVBSAXAttributes **attributes);
	HRESULT (WINAPI *writeAnnotation)(ISchemaAttributeGroup *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
	HRESULT (WINAPI *get_anyAttribute)(ISchemaAttributeGroup *This,ISchemaAny **anyAttribute);
	HRESULT (WINAPI *get_attributes)(ISchemaAttributeGroup *This,ISchemaItemCollection **attributes);
      END_INTERFACE
    } ISchemaAttributeGroupVtbl;
    struct ISchemaAttributeGroup {
      CONST_VTBL struct ISchemaAttributeGroupVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaAttributeGroup_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaAttributeGroup_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaAttributeGroup_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaAttributeGroup_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaAttributeGroup_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaAttributeGroup_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaAttributeGroup_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaAttributeGroup_get_name(This,name) (This)->lpVtbl->get_name(This,name)
#define ISchemaAttributeGroup_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define ISchemaAttributeGroup_get_schema(This,schema) (This)->lpVtbl->get_schema(This,schema)
#define ISchemaAttributeGroup_get_id(This,id) (This)->lpVtbl->get_id(This,id)
#define ISchemaAttributeGroup_get_itemType(This,itemType) (This)->lpVtbl->get_itemType(This,itemType)
#define ISchemaAttributeGroup_get_unhandledAttributes(This,attributes) (This)->lpVtbl->get_unhandledAttributes(This,attributes)
#define ISchemaAttributeGroup_writeAnnotation(This,annotationSink,isWritten) (This)->lpVtbl->writeAnnotation(This,annotationSink,isWritten)
#define ISchemaAttributeGroup_get_anyAttribute(This,anyAttribute) (This)->lpVtbl->get_anyAttribute(This,anyAttribute)
#define ISchemaAttributeGroup_get_attributes(This,attributes) (This)->lpVtbl->get_attributes(This,attributes)
#endif
#endif
    HRESULT WINAPI ISchemaAttributeGroup_get_anyAttribute_Proxy(ISchemaAttributeGroup *This,ISchemaAny **anyAttribute);
    void __RPC_STUB ISchemaAttributeGroup_get_anyAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaAttributeGroup_get_attributes_Proxy(ISchemaAttributeGroup *This,ISchemaItemCollection **attributes);
    void __RPC_STUB ISchemaAttributeGroup_get_attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaModelGroup_INTERFACE_DEFINED__
#define __ISchemaModelGroup_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaModelGroup;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaModelGroup : public ISchemaParticle {
    public:
      virtual HRESULT WINAPI get_particles(ISchemaItemCollection **particles) = 0;
    };
#else
    typedef struct ISchemaModelGroupVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaModelGroup *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaModelGroup *This);
	ULONG (WINAPI *Release)(ISchemaModelGroup *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaModelGroup *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaModelGroup *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaModelGroup *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaModelGroup *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(ISchemaModelGroup *This,BSTR *name);
	HRESULT (WINAPI *get_namespaceURI)(ISchemaModelGroup *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_schema)(ISchemaModelGroup *This,ISchema **schema);
	HRESULT (WINAPI *get_id)(ISchemaModelGroup *This,BSTR *id);
	HRESULT (WINAPI *get_itemType)(ISchemaModelGroup *This,SOMITEMTYPE *itemType);
	HRESULT (WINAPI *get_unhandledAttributes)(ISchemaModelGroup *This,IVBSAXAttributes **attributes);
	HRESULT (WINAPI *writeAnnotation)(ISchemaModelGroup *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
	HRESULT (WINAPI *get_minOccurs)(ISchemaModelGroup *This,VARIANT *minOccurs);
	HRESULT (WINAPI *get_maxOccurs)(ISchemaModelGroup *This,VARIANT *maxOccurs);
	HRESULT (WINAPI *get_particles)(ISchemaModelGroup *This,ISchemaItemCollection **particles);
      END_INTERFACE
    } ISchemaModelGroupVtbl;
    struct ISchemaModelGroup {
      CONST_VTBL struct ISchemaModelGroupVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaModelGroup_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaModelGroup_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaModelGroup_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaModelGroup_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaModelGroup_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaModelGroup_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaModelGroup_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaModelGroup_get_name(This,name) (This)->lpVtbl->get_name(This,name)
#define ISchemaModelGroup_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define ISchemaModelGroup_get_schema(This,schema) (This)->lpVtbl->get_schema(This,schema)
#define ISchemaModelGroup_get_id(This,id) (This)->lpVtbl->get_id(This,id)
#define ISchemaModelGroup_get_itemType(This,itemType) (This)->lpVtbl->get_itemType(This,itemType)
#define ISchemaModelGroup_get_unhandledAttributes(This,attributes) (This)->lpVtbl->get_unhandledAttributes(This,attributes)
#define ISchemaModelGroup_writeAnnotation(This,annotationSink,isWritten) (This)->lpVtbl->writeAnnotation(This,annotationSink,isWritten)
#define ISchemaModelGroup_get_minOccurs(This,minOccurs) (This)->lpVtbl->get_minOccurs(This,minOccurs)
#define ISchemaModelGroup_get_maxOccurs(This,maxOccurs) (This)->lpVtbl->get_maxOccurs(This,maxOccurs)
#define ISchemaModelGroup_get_particles(This,particles) (This)->lpVtbl->get_particles(This,particles)
#endif
#endif
    HRESULT WINAPI ISchemaModelGroup_get_particles_Proxy(ISchemaModelGroup *This,ISchemaItemCollection **particles);
    void __RPC_STUB ISchemaModelGroup_get_particles_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaAny_INTERFACE_DEFINED__
#define __ISchemaAny_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaAny;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaAny : public ISchemaParticle {
    public:
      virtual HRESULT WINAPI get_namespaces(ISchemaStringCollection **namespaces) = 0;
      virtual HRESULT WINAPI get_processContents(SCHEMAPROCESSCONTENTS *processContents) = 0;
    };
#else
    typedef struct ISchemaAnyVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaAny *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaAny *This);
	ULONG (WINAPI *Release)(ISchemaAny *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaAny *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaAny *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaAny *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaAny *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(ISchemaAny *This,BSTR *name);
	HRESULT (WINAPI *get_namespaceURI)(ISchemaAny *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_schema)(ISchemaAny *This,ISchema **schema);
	HRESULT (WINAPI *get_id)(ISchemaAny *This,BSTR *id);
	HRESULT (WINAPI *get_itemType)(ISchemaAny *This,SOMITEMTYPE *itemType);
	HRESULT (WINAPI *get_unhandledAttributes)(ISchemaAny *This,IVBSAXAttributes **attributes);
	HRESULT (WINAPI *writeAnnotation)(ISchemaAny *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
	HRESULT (WINAPI *get_minOccurs)(ISchemaAny *This,VARIANT *minOccurs);
	HRESULT (WINAPI *get_maxOccurs)(ISchemaAny *This,VARIANT *maxOccurs);
	HRESULT (WINAPI *get_namespaces)(ISchemaAny *This,ISchemaStringCollection **namespaces);
	HRESULT (WINAPI *get_processContents)(ISchemaAny *This,SCHEMAPROCESSCONTENTS *processContents);
      END_INTERFACE
    } ISchemaAnyVtbl;
    struct ISchemaAny {
      CONST_VTBL struct ISchemaAnyVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaAny_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaAny_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaAny_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaAny_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaAny_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaAny_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaAny_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaAny_get_name(This,name) (This)->lpVtbl->get_name(This,name)
#define ISchemaAny_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define ISchemaAny_get_schema(This,schema) (This)->lpVtbl->get_schema(This,schema)
#define ISchemaAny_get_id(This,id) (This)->lpVtbl->get_id(This,id)
#define ISchemaAny_get_itemType(This,itemType) (This)->lpVtbl->get_itemType(This,itemType)
#define ISchemaAny_get_unhandledAttributes(This,attributes) (This)->lpVtbl->get_unhandledAttributes(This,attributes)
#define ISchemaAny_writeAnnotation(This,annotationSink,isWritten) (This)->lpVtbl->writeAnnotation(This,annotationSink,isWritten)
#define ISchemaAny_get_minOccurs(This,minOccurs) (This)->lpVtbl->get_minOccurs(This,minOccurs)
#define ISchemaAny_get_maxOccurs(This,maxOccurs) (This)->lpVtbl->get_maxOccurs(This,maxOccurs)
#define ISchemaAny_get_namespaces(This,namespaces) (This)->lpVtbl->get_namespaces(This,namespaces)
#define ISchemaAny_get_processContents(This,processContents) (This)->lpVtbl->get_processContents(This,processContents)
#endif
#endif
    HRESULT WINAPI ISchemaAny_get_namespaces_Proxy(ISchemaAny *This,ISchemaStringCollection **namespaces);
    void __RPC_STUB ISchemaAny_get_namespaces_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaAny_get_processContents_Proxy(ISchemaAny *This,SCHEMAPROCESSCONTENTS *processContents);
    void __RPC_STUB ISchemaAny_get_processContents_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaIdentityConstraint_INTERFACE_DEFINED__
#define __ISchemaIdentityConstraint_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaIdentityConstraint;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaIdentityConstraint : public ISchemaItem {
    public:
      virtual HRESULT WINAPI get_selector(BSTR *selector) = 0;
      virtual HRESULT WINAPI get_fields(ISchemaStringCollection **fields) = 0;
      virtual HRESULT WINAPI get_referencedKey(ISchemaIdentityConstraint **key) = 0;
    };
#else
    typedef struct ISchemaIdentityConstraintVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaIdentityConstraint *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaIdentityConstraint *This);
	ULONG (WINAPI *Release)(ISchemaIdentityConstraint *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaIdentityConstraint *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaIdentityConstraint *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaIdentityConstraint *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaIdentityConstraint *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(ISchemaIdentityConstraint *This,BSTR *name);
	HRESULT (WINAPI *get_namespaceURI)(ISchemaIdentityConstraint *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_schema)(ISchemaIdentityConstraint *This,ISchema **schema);
	HRESULT (WINAPI *get_id)(ISchemaIdentityConstraint *This,BSTR *id);
	HRESULT (WINAPI *get_itemType)(ISchemaIdentityConstraint *This,SOMITEMTYPE *itemType);
	HRESULT (WINAPI *get_unhandledAttributes)(ISchemaIdentityConstraint *This,IVBSAXAttributes **attributes);
	HRESULT (WINAPI *writeAnnotation)(ISchemaIdentityConstraint *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
	HRESULT (WINAPI *get_selector)(ISchemaIdentityConstraint *This,BSTR *selector);
	HRESULT (WINAPI *get_fields)(ISchemaIdentityConstraint *This,ISchemaStringCollection **fields);
	HRESULT (WINAPI *get_referencedKey)(ISchemaIdentityConstraint *This,ISchemaIdentityConstraint **key);
      END_INTERFACE
    } ISchemaIdentityConstraintVtbl;
    struct ISchemaIdentityConstraint {
      CONST_VTBL struct ISchemaIdentityConstraintVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaIdentityConstraint_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaIdentityConstraint_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaIdentityConstraint_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaIdentityConstraint_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaIdentityConstraint_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaIdentityConstraint_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaIdentityConstraint_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaIdentityConstraint_get_name(This,name) (This)->lpVtbl->get_name(This,name)
#define ISchemaIdentityConstraint_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define ISchemaIdentityConstraint_get_schema(This,schema) (This)->lpVtbl->get_schema(This,schema)
#define ISchemaIdentityConstraint_get_id(This,id) (This)->lpVtbl->get_id(This,id)
#define ISchemaIdentityConstraint_get_itemType(This,itemType) (This)->lpVtbl->get_itemType(This,itemType)
#define ISchemaIdentityConstraint_get_unhandledAttributes(This,attributes) (This)->lpVtbl->get_unhandledAttributes(This,attributes)
#define ISchemaIdentityConstraint_writeAnnotation(This,annotationSink,isWritten) (This)->lpVtbl->writeAnnotation(This,annotationSink,isWritten)
#define ISchemaIdentityConstraint_get_selector(This,selector) (This)->lpVtbl->get_selector(This,selector)
#define ISchemaIdentityConstraint_get_fields(This,fields) (This)->lpVtbl->get_fields(This,fields)
#define ISchemaIdentityConstraint_get_referencedKey(This,key) (This)->lpVtbl->get_referencedKey(This,key)
#endif
#endif
    HRESULT WINAPI ISchemaIdentityConstraint_get_selector_Proxy(ISchemaIdentityConstraint *This,BSTR *selector);
    void __RPC_STUB ISchemaIdentityConstraint_get_selector_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaIdentityConstraint_get_fields_Proxy(ISchemaIdentityConstraint *This,ISchemaStringCollection **fields);
    void __RPC_STUB ISchemaIdentityConstraint_get_fields_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaIdentityConstraint_get_referencedKey_Proxy(ISchemaIdentityConstraint *This,ISchemaIdentityConstraint **key);
    void __RPC_STUB ISchemaIdentityConstraint_get_referencedKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISchemaNotation_INTERFACE_DEFINED__
#define __ISchemaNotation_INTERFACE_DEFINED__
    EXTERN_C const IID IID_ISchemaNotation;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct ISchemaNotation : public ISchemaItem {
    public:
      virtual HRESULT WINAPI get_systemIdentifier(BSTR *uri) = 0;
      virtual HRESULT WINAPI get_publicIdentifier(BSTR *uri) = 0;
    };
#else
    typedef struct ISchemaNotationVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(ISchemaNotation *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(ISchemaNotation *This);
	ULONG (WINAPI *Release)(ISchemaNotation *This);
	HRESULT (WINAPI *GetTypeInfoCount)(ISchemaNotation *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(ISchemaNotation *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(ISchemaNotation *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(ISchemaNotation *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(ISchemaNotation *This,BSTR *name);
	HRESULT (WINAPI *get_namespaceURI)(ISchemaNotation *This,BSTR *namespaceURI);
	HRESULT (WINAPI *get_schema)(ISchemaNotation *This,ISchema **schema);
	HRESULT (WINAPI *get_id)(ISchemaNotation *This,BSTR *id);
	HRESULT (WINAPI *get_itemType)(ISchemaNotation *This,SOMITEMTYPE *itemType);
	HRESULT (WINAPI *get_unhandledAttributes)(ISchemaNotation *This,IVBSAXAttributes **attributes);
	HRESULT (WINAPI *writeAnnotation)(ISchemaNotation *This,IUnknown *annotationSink,VARIANT_BOOL *isWritten);
	HRESULT (WINAPI *get_systemIdentifier)(ISchemaNotation *This,BSTR *uri);
	HRESULT (WINAPI *get_publicIdentifier)(ISchemaNotation *This,BSTR *uri);
      END_INTERFACE
    } ISchemaNotationVtbl;
    struct ISchemaNotation {
      CONST_VTBL struct ISchemaNotationVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define ISchemaNotation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISchemaNotation_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISchemaNotation_Release(This) (This)->lpVtbl->Release(This)
#define ISchemaNotation_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ISchemaNotation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ISchemaNotation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ISchemaNotation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define ISchemaNotation_get_name(This,name) (This)->lpVtbl->get_name(This,name)
#define ISchemaNotation_get_namespaceURI(This,namespaceURI) (This)->lpVtbl->get_namespaceURI(This,namespaceURI)
#define ISchemaNotation_get_schema(This,schema) (This)->lpVtbl->get_schema(This,schema)
#define ISchemaNotation_get_id(This,id) (This)->lpVtbl->get_id(This,id)
#define ISchemaNotation_get_itemType(This,itemType) (This)->lpVtbl->get_itemType(This,itemType)
#define ISchemaNotation_get_unhandledAttributes(This,attributes) (This)->lpVtbl->get_unhandledAttributes(This,attributes)
#define ISchemaNotation_writeAnnotation(This,annotationSink,isWritten) (This)->lpVtbl->writeAnnotation(This,annotationSink,isWritten)
#define ISchemaNotation_get_systemIdentifier(This,uri) (This)->lpVtbl->get_systemIdentifier(This,uri)
#define ISchemaNotation_get_publicIdentifier(This,uri) (This)->lpVtbl->get_publicIdentifier(This,uri)
#endif
#endif
    HRESULT WINAPI ISchemaNotation_get_systemIdentifier_Proxy(ISchemaNotation *This,BSTR *uri);
    void __RPC_STUB ISchemaNotation_get_systemIdentifier_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI ISchemaNotation_get_publicIdentifier_Proxy(ISchemaNotation *This,BSTR *uri);
    void __RPC_STUB ISchemaNotation_get_publicIdentifier_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLElementCollection_INTERFACE_DEFINED__
#define __IXMLElementCollection_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLElementCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLElementCollection : public IDispatch {
    public:
      virtual HRESULT WINAPI put_length(long v) = 0;
      virtual HRESULT WINAPI get_length(long *p) = 0;
      virtual HRESULT WINAPI get__newEnum(IUnknown **ppUnk) = 0;
      virtual HRESULT WINAPI item(VARIANT var1,VARIANT var2,IDispatch **ppDisp) = 0;
    };
#else
    typedef struct IXMLElementCollectionVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLElementCollection *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLElementCollection *This);
	ULONG (WINAPI *Release)(IXMLElementCollection *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLElementCollection *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLElementCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLElementCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLElementCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *put_length)(IXMLElementCollection *This,long v);
	HRESULT (WINAPI *get_length)(IXMLElementCollection *This,long *p);
	HRESULT (WINAPI *get__newEnum)(IXMLElementCollection *This,IUnknown **ppUnk);
	HRESULT (WINAPI *item)(IXMLElementCollection *This,VARIANT var1,VARIANT var2,IDispatch **ppDisp);
      END_INTERFACE
    } IXMLElementCollectionVtbl;
    struct IXMLElementCollection {
      CONST_VTBL struct IXMLElementCollectionVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLElementCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLElementCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLElementCollection_Release(This) (This)->lpVtbl->Release(This)
#define IXMLElementCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLElementCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLElementCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLElementCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLElementCollection_put_length(This,v) (This)->lpVtbl->put_length(This,v)
#define IXMLElementCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IXMLElementCollection_get__newEnum(This,ppUnk) (This)->lpVtbl->get__newEnum(This,ppUnk)
#define IXMLElementCollection_item(This,var1,var2,ppDisp) (This)->lpVtbl->item(This,var1,var2,ppDisp)
#endif
#endif
    HRESULT WINAPI IXMLElementCollection_put_length_Proxy(IXMLElementCollection *This,long v);
    void __RPC_STUB IXMLElementCollection_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElementCollection_get_length_Proxy(IXMLElementCollection *This,long *p);
    void __RPC_STUB IXMLElementCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElementCollection_get__newEnum_Proxy(IXMLElementCollection *This,IUnknown **ppUnk);
    void __RPC_STUB IXMLElementCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElementCollection_item_Proxy(IXMLElementCollection *This,VARIANT var1,VARIANT var2,IDispatch **ppDisp);
    void __RPC_STUB IXMLElementCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDocument_INTERFACE_DEFINED__
#define __IXMLDocument_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDocument;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDocument : public IDispatch {
    public:
      virtual HRESULT WINAPI get_root(IXMLElement **p) = 0;
      virtual HRESULT WINAPI get_fileSize(BSTR *p) = 0;
      virtual HRESULT WINAPI get_fileModifiedDate(BSTR *p) = 0;
      virtual HRESULT WINAPI get_fileUpdatedDate(BSTR *p) = 0;
      virtual HRESULT WINAPI get_URL(BSTR *p) = 0;
      virtual HRESULT WINAPI put_URL(BSTR p) = 0;
      virtual HRESULT WINAPI get_mimeType(BSTR *p) = 0;
      virtual HRESULT WINAPI get_readyState(long *pl) = 0;
      virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
      virtual HRESULT WINAPI put_charset(BSTR p) = 0;
      virtual HRESULT WINAPI get_version(BSTR *p) = 0;
      virtual HRESULT WINAPI get_doctype(BSTR *p) = 0;
      virtual HRESULT WINAPI get_dtdURL(BSTR *p) = 0;
      virtual HRESULT WINAPI createElement(VARIANT vType,VARIANT var1,IXMLElement **ppElem) = 0;
    };
#else
    typedef struct IXMLDocumentVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDocument *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDocument *This);
	ULONG (WINAPI *Release)(IXMLDocument *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDocument *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDocument *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDocument *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDocument *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_root)(IXMLDocument *This,IXMLElement **p);
	HRESULT (WINAPI *get_fileSize)(IXMLDocument *This,BSTR *p);
	HRESULT (WINAPI *get_fileModifiedDate)(IXMLDocument *This,BSTR *p);
	HRESULT (WINAPI *get_fileUpdatedDate)(IXMLDocument *This,BSTR *p);
	HRESULT (WINAPI *get_URL)(IXMLDocument *This,BSTR *p);
	HRESULT (WINAPI *put_URL)(IXMLDocument *This,BSTR p);
	HRESULT (WINAPI *get_mimeType)(IXMLDocument *This,BSTR *p);
	HRESULT (WINAPI *get_readyState)(IXMLDocument *This,long *pl);
	HRESULT (WINAPI *get_charset)(IXMLDocument *This,BSTR *p);
	HRESULT (WINAPI *put_charset)(IXMLDocument *This,BSTR p);
	HRESULT (WINAPI *get_version)(IXMLDocument *This,BSTR *p);
	HRESULT (WINAPI *get_doctype)(IXMLDocument *This,BSTR *p);
	HRESULT (WINAPI *get_dtdURL)(IXMLDocument *This,BSTR *p);
	HRESULT (WINAPI *createElement)(IXMLDocument *This,VARIANT vType,VARIANT var1,IXMLElement **ppElem);
      END_INTERFACE
    } IXMLDocumentVtbl;
    struct IXMLDocument {
      CONST_VTBL struct IXMLDocumentVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDocument_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDocument_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDocument_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDocument_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDocument_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDocument_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDocument_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDocument_get_root(This,p) (This)->lpVtbl->get_root(This,p)
#define IXMLDocument_get_fileSize(This,p) (This)->lpVtbl->get_fileSize(This,p)
#define IXMLDocument_get_fileModifiedDate(This,p) (This)->lpVtbl->get_fileModifiedDate(This,p)
#define IXMLDocument_get_fileUpdatedDate(This,p) (This)->lpVtbl->get_fileUpdatedDate(This,p)
#define IXMLDocument_get_URL(This,p) (This)->lpVtbl->get_URL(This,p)
#define IXMLDocument_put_URL(This,p) (This)->lpVtbl->put_URL(This,p)
#define IXMLDocument_get_mimeType(This,p) (This)->lpVtbl->get_mimeType(This,p)
#define IXMLDocument_get_readyState(This,pl) (This)->lpVtbl->get_readyState(This,pl)
#define IXMLDocument_get_charset(This,p) (This)->lpVtbl->get_charset(This,p)
#define IXMLDocument_put_charset(This,p) (This)->lpVtbl->put_charset(This,p)
#define IXMLDocument_get_version(This,p) (This)->lpVtbl->get_version(This,p)
#define IXMLDocument_get_doctype(This,p) (This)->lpVtbl->get_doctype(This,p)
#define IXMLDocument_get_dtdURL(This,p) (This)->lpVtbl->get_dtdURL(This,p)
#define IXMLDocument_createElement(This,vType,var1,ppElem) (This)->lpVtbl->createElement(This,vType,var1,ppElem)
#endif
#endif
    HRESULT WINAPI IXMLDocument_get_root_Proxy(IXMLDocument *This,IXMLElement **p);
    void __RPC_STUB IXMLDocument_get_root_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_get_fileSize_Proxy(IXMLDocument *This,BSTR *p);
    void __RPC_STUB IXMLDocument_get_fileSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_get_fileModifiedDate_Proxy(IXMLDocument *This,BSTR *p);
    void __RPC_STUB IXMLDocument_get_fileModifiedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_get_fileUpdatedDate_Proxy(IXMLDocument *This,BSTR *p);
    void __RPC_STUB IXMLDocument_get_fileUpdatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_get_URL_Proxy(IXMLDocument *This,BSTR *p);
    void __RPC_STUB IXMLDocument_get_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_put_URL_Proxy(IXMLDocument *This,BSTR p);
    void __RPC_STUB IXMLDocument_put_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_get_mimeType_Proxy(IXMLDocument *This,BSTR *p);
    void __RPC_STUB IXMLDocument_get_mimeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_get_readyState_Proxy(IXMLDocument *This,long *pl);
    void __RPC_STUB IXMLDocument_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_get_charset_Proxy(IXMLDocument *This,BSTR *p);
    void __RPC_STUB IXMLDocument_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_put_charset_Proxy(IXMLDocument *This,BSTR p);
    void __RPC_STUB IXMLDocument_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_get_version_Proxy(IXMLDocument *This,BSTR *p);
    void __RPC_STUB IXMLDocument_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_get_doctype_Proxy(IXMLDocument *This,BSTR *p);
    void __RPC_STUB IXMLDocument_get_doctype_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_get_dtdURL_Proxy(IXMLDocument *This,BSTR *p);
    void __RPC_STUB IXMLDocument_get_dtdURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument_createElement_Proxy(IXMLDocument *This,VARIANT vType,VARIANT var1,IXMLElement **ppElem);
    void __RPC_STUB IXMLDocument_createElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDocument2_INTERFACE_DEFINED__
#define __IXMLDocument2_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDocument2;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDocument2 : public IDispatch {
    public:
      virtual HRESULT WINAPI get_root(IXMLElement2 **p) = 0;
      virtual HRESULT WINAPI get_fileSize(BSTR *p) = 0;
      virtual HRESULT WINAPI get_fileModifiedDate(BSTR *p) = 0;
      virtual HRESULT WINAPI get_fileUpdatedDate(BSTR *p) = 0;
      virtual HRESULT WINAPI get_URL(BSTR *p) = 0;
      virtual HRESULT WINAPI put_URL(BSTR p) = 0;
      virtual HRESULT WINAPI get_mimeType(BSTR *p) = 0;
      virtual HRESULT WINAPI get_readyState(long *pl) = 0;
      virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
      virtual HRESULT WINAPI put_charset(BSTR p) = 0;
      virtual HRESULT WINAPI get_version(BSTR *p) = 0;
      virtual HRESULT WINAPI get_doctype(BSTR *p) = 0;
      virtual HRESULT WINAPI get_dtdURL(BSTR *p) = 0;
      virtual HRESULT WINAPI createElement(VARIANT vType,VARIANT var1,IXMLElement2 **ppElem) = 0;
      virtual HRESULT WINAPI get_async(VARIANT_BOOL *pf) = 0;
      virtual HRESULT WINAPI put_async(VARIANT_BOOL f) = 0;
    };
#else
    typedef struct IXMLDocument2Vtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDocument2 *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDocument2 *This);
	ULONG (WINAPI *Release)(IXMLDocument2 *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDocument2 *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDocument2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDocument2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDocument2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_root)(IXMLDocument2 *This,IXMLElement2 **p);
	HRESULT (WINAPI *get_fileSize)(IXMLDocument2 *This,BSTR *p);
	HRESULT (WINAPI *get_fileModifiedDate)(IXMLDocument2 *This,BSTR *p);
	HRESULT (WINAPI *get_fileUpdatedDate)(IXMLDocument2 *This,BSTR *p);
	HRESULT (WINAPI *get_URL)(IXMLDocument2 *This,BSTR *p);
	HRESULT (WINAPI *put_URL)(IXMLDocument2 *This,BSTR p);
	HRESULT (WINAPI *get_mimeType)(IXMLDocument2 *This,BSTR *p);
	HRESULT (WINAPI *get_readyState)(IXMLDocument2 *This,long *pl);
	HRESULT (WINAPI *get_charset)(IXMLDocument2 *This,BSTR *p);
	HRESULT (WINAPI *put_charset)(IXMLDocument2 *This,BSTR p);
	HRESULT (WINAPI *get_version)(IXMLDocument2 *This,BSTR *p);
	HRESULT (WINAPI *get_doctype)(IXMLDocument2 *This,BSTR *p);
	HRESULT (WINAPI *get_dtdURL)(IXMLDocument2 *This,BSTR *p);
	HRESULT (WINAPI *createElement)(IXMLDocument2 *This,VARIANT vType,VARIANT var1,IXMLElement2 **ppElem);
	HRESULT (WINAPI *get_async)(IXMLDocument2 *This,VARIANT_BOOL *pf);
	HRESULT (WINAPI *put_async)(IXMLDocument2 *This,VARIANT_BOOL f);
      END_INTERFACE
    } IXMLDocument2Vtbl;
    struct IXMLDocument2 {
      CONST_VTBL struct IXMLDocument2Vtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDocument2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDocument2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDocument2_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDocument2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDocument2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDocument2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDocument2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDocument2_get_root(This,p) (This)->lpVtbl->get_root(This,p)
#define IXMLDocument2_get_fileSize(This,p) (This)->lpVtbl->get_fileSize(This,p)
#define IXMLDocument2_get_fileModifiedDate(This,p) (This)->lpVtbl->get_fileModifiedDate(This,p)
#define IXMLDocument2_get_fileUpdatedDate(This,p) (This)->lpVtbl->get_fileUpdatedDate(This,p)
#define IXMLDocument2_get_URL(This,p) (This)->lpVtbl->get_URL(This,p)
#define IXMLDocument2_put_URL(This,p) (This)->lpVtbl->put_URL(This,p)
#define IXMLDocument2_get_mimeType(This,p) (This)->lpVtbl->get_mimeType(This,p)
#define IXMLDocument2_get_readyState(This,pl) (This)->lpVtbl->get_readyState(This,pl)
#define IXMLDocument2_get_charset(This,p) (This)->lpVtbl->get_charset(This,p)
#define IXMLDocument2_put_charset(This,p) (This)->lpVtbl->put_charset(This,p)
#define IXMLDocument2_get_version(This,p) (This)->lpVtbl->get_version(This,p)
#define IXMLDocument2_get_doctype(This,p) (This)->lpVtbl->get_doctype(This,p)
#define IXMLDocument2_get_dtdURL(This,p) (This)->lpVtbl->get_dtdURL(This,p)
#define IXMLDocument2_createElement(This,vType,var1,ppElem) (This)->lpVtbl->createElement(This,vType,var1,ppElem)
#define IXMLDocument2_get_async(This,pf) (This)->lpVtbl->get_async(This,pf)
#define IXMLDocument2_put_async(This,f) (This)->lpVtbl->put_async(This,f)
#endif
#endif
    HRESULT WINAPI IXMLDocument2_get_root_Proxy(IXMLDocument2 *This,IXMLElement2 **p);
    void __RPC_STUB IXMLDocument2_get_root_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_get_fileSize_Proxy(IXMLDocument2 *This,BSTR *p);
    void __RPC_STUB IXMLDocument2_get_fileSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_get_fileModifiedDate_Proxy(IXMLDocument2 *This,BSTR *p);
    void __RPC_STUB IXMLDocument2_get_fileModifiedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_get_fileUpdatedDate_Proxy(IXMLDocument2 *This,BSTR *p);
    void __RPC_STUB IXMLDocument2_get_fileUpdatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_get_URL_Proxy(IXMLDocument2 *This,BSTR *p);
    void __RPC_STUB IXMLDocument2_get_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_put_URL_Proxy(IXMLDocument2 *This,BSTR p);
    void __RPC_STUB IXMLDocument2_put_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_get_mimeType_Proxy(IXMLDocument2 *This,BSTR *p);
    void __RPC_STUB IXMLDocument2_get_mimeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_get_readyState_Proxy(IXMLDocument2 *This,long *pl);
    void __RPC_STUB IXMLDocument2_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_get_charset_Proxy(IXMLDocument2 *This,BSTR *p);
    void __RPC_STUB IXMLDocument2_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_put_charset_Proxy(IXMLDocument2 *This,BSTR p);
    void __RPC_STUB IXMLDocument2_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_get_version_Proxy(IXMLDocument2 *This,BSTR *p);
    void __RPC_STUB IXMLDocument2_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_get_doctype_Proxy(IXMLDocument2 *This,BSTR *p);
    void __RPC_STUB IXMLDocument2_get_doctype_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_get_dtdURL_Proxy(IXMLDocument2 *This,BSTR *p);
    void __RPC_STUB IXMLDocument2_get_dtdURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_createElement_Proxy(IXMLDocument2 *This,VARIANT vType,VARIANT var1,IXMLElement2 **ppElem);
    void __RPC_STUB IXMLDocument2_createElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_get_async_Proxy(IXMLDocument2 *This,VARIANT_BOOL *pf);
    void __RPC_STUB IXMLDocument2_get_async_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDocument2_put_async_Proxy(IXMLDocument2 *This,VARIANT_BOOL f);
    void __RPC_STUB IXMLDocument2_put_async_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLElement_INTERFACE_DEFINED__
#define __IXMLElement_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLElement : public IDispatch {
    public:
      virtual HRESULT WINAPI get_tagName(BSTR *p) = 0;
      virtual HRESULT WINAPI put_tagName(BSTR p) = 0;
      virtual HRESULT WINAPI get_parent(IXMLElement **ppParent) = 0;
      virtual HRESULT WINAPI setAttribute(BSTR strPropertyName,VARIANT PropertyValue) = 0;
      virtual HRESULT WINAPI getAttribute(BSTR strPropertyName,VARIANT *PropertyValue) = 0;
      virtual HRESULT WINAPI removeAttribute(BSTR strPropertyName) = 0;
      virtual HRESULT WINAPI get_children(IXMLElementCollection **pp) = 0;
      virtual HRESULT WINAPI get_type(long *plType) = 0;
      virtual HRESULT WINAPI get_text(BSTR *p) = 0;
      virtual HRESULT WINAPI put_text(BSTR p) = 0;
      virtual HRESULT WINAPI addChild(IXMLElement *pChildElem,long lIndex,long lReserved) = 0;
      virtual HRESULT WINAPI removeChild(IXMLElement *pChildElem) = 0;
    };
#else
    typedef struct IXMLElementVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLElement *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLElement *This);
	ULONG (WINAPI *Release)(IXMLElement *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLElement *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_tagName)(IXMLElement *This,BSTR *p);
	HRESULT (WINAPI *put_tagName)(IXMLElement *This,BSTR p);
	HRESULT (WINAPI *get_parent)(IXMLElement *This,IXMLElement **ppParent);
	HRESULT (WINAPI *setAttribute)(IXMLElement *This,BSTR strPropertyName,VARIANT PropertyValue);
	HRESULT (WINAPI *getAttribute)(IXMLElement *This,BSTR strPropertyName,VARIANT *PropertyValue);
	HRESULT (WINAPI *removeAttribute)(IXMLElement *This,BSTR strPropertyName);
	HRESULT (WINAPI *get_children)(IXMLElement *This,IXMLElementCollection **pp);
	HRESULT (WINAPI *get_type)(IXMLElement *This,long *plType);
	HRESULT (WINAPI *get_text)(IXMLElement *This,BSTR *p);
	HRESULT (WINAPI *put_text)(IXMLElement *This,BSTR p);
	HRESULT (WINAPI *addChild)(IXMLElement *This,IXMLElement *pChildElem,long lIndex,long lReserved);
	HRESULT (WINAPI *removeChild)(IXMLElement *This,IXMLElement *pChildElem);
      END_INTERFACE
    } IXMLElementVtbl;
    struct IXMLElement {
      CONST_VTBL struct IXMLElementVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLElement_Release(This) (This)->lpVtbl->Release(This)
#define IXMLElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLElement_get_tagName(This,p) (This)->lpVtbl->get_tagName(This,p)
#define IXMLElement_put_tagName(This,p) (This)->lpVtbl->put_tagName(This,p)
#define IXMLElement_get_parent(This,ppParent) (This)->lpVtbl->get_parent(This,ppParent)
#define IXMLElement_setAttribute(This,strPropertyName,PropertyValue) (This)->lpVtbl->setAttribute(This,strPropertyName,PropertyValue)
#define IXMLElement_getAttribute(This,strPropertyName,PropertyValue) (This)->lpVtbl->getAttribute(This,strPropertyName,PropertyValue)
#define IXMLElement_removeAttribute(This,strPropertyName) (This)->lpVtbl->removeAttribute(This,strPropertyName)
#define IXMLElement_get_children(This,pp) (This)->lpVtbl->get_children(This,pp)
#define IXMLElement_get_type(This,plType) (This)->lpVtbl->get_type(This,plType)
#define IXMLElement_get_text(This,p) (This)->lpVtbl->get_text(This,p)
#define IXMLElement_put_text(This,p) (This)->lpVtbl->put_text(This,p)
#define IXMLElement_addChild(This,pChildElem,lIndex,lReserved) (This)->lpVtbl->addChild(This,pChildElem,lIndex,lReserved)
#define IXMLElement_removeChild(This,pChildElem) (This)->lpVtbl->removeChild(This,pChildElem)
#endif
#endif
    HRESULT WINAPI IXMLElement_get_tagName_Proxy(IXMLElement *This,BSTR *p);
    void __RPC_STUB IXMLElement_get_tagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement_put_tagName_Proxy(IXMLElement *This,BSTR p);
    void __RPC_STUB IXMLElement_put_tagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement_get_parent_Proxy(IXMLElement *This,IXMLElement **ppParent);
    void __RPC_STUB IXMLElement_get_parent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement_setAttribute_Proxy(IXMLElement *This,BSTR strPropertyName,VARIANT PropertyValue);
    void __RPC_STUB IXMLElement_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement_getAttribute_Proxy(IXMLElement *This,BSTR strPropertyName,VARIANT *PropertyValue);
    void __RPC_STUB IXMLElement_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement_removeAttribute_Proxy(IXMLElement *This,BSTR strPropertyName);
    void __RPC_STUB IXMLElement_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement_get_children_Proxy(IXMLElement *This,IXMLElementCollection **pp);
    void __RPC_STUB IXMLElement_get_children_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement_get_type_Proxy(IXMLElement *This,long *plType);
    void __RPC_STUB IXMLElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement_get_text_Proxy(IXMLElement *This,BSTR *p);
    void __RPC_STUB IXMLElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement_put_text_Proxy(IXMLElement *This,BSTR p);
    void __RPC_STUB IXMLElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement_addChild_Proxy(IXMLElement *This,IXMLElement *pChildElem,long lIndex,long lReserved);
    void __RPC_STUB IXMLElement_addChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement_removeChild_Proxy(IXMLElement *This,IXMLElement *pChildElem);
    void __RPC_STUB IXMLElement_removeChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLElement2_INTERFACE_DEFINED__
#define __IXMLElement2_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLElement2 : public IDispatch {
    public:
      virtual HRESULT WINAPI get_tagName(BSTR *p) = 0;
      virtual HRESULT WINAPI put_tagName(BSTR p) = 0;
      virtual HRESULT WINAPI get_parent(IXMLElement2 **ppParent) = 0;
      virtual HRESULT WINAPI setAttribute(BSTR strPropertyName,VARIANT PropertyValue) = 0;
      virtual HRESULT WINAPI getAttribute(BSTR strPropertyName,VARIANT *PropertyValue) = 0;
      virtual HRESULT WINAPI removeAttribute(BSTR strPropertyName) = 0;
      virtual HRESULT WINAPI get_children(IXMLElementCollection **pp) = 0;
      virtual HRESULT WINAPI get_type(long *plType) = 0;
      virtual HRESULT WINAPI get_text(BSTR *p) = 0;
      virtual HRESULT WINAPI put_text(BSTR p) = 0;
      virtual HRESULT WINAPI addChild(IXMLElement2 *pChildElem,long lIndex,long lReserved) = 0;
      virtual HRESULT WINAPI removeChild(IXMLElement2 *pChildElem) = 0;
      virtual HRESULT WINAPI get_attributes(IXMLElementCollection **pp) = 0;
    };
#else
    typedef struct IXMLElement2Vtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLElement2 *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLElement2 *This);
	ULONG (WINAPI *Release)(IXMLElement2 *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLElement2 *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_tagName)(IXMLElement2 *This,BSTR *p);
	HRESULT (WINAPI *put_tagName)(IXMLElement2 *This,BSTR p);
	HRESULT (WINAPI *get_parent)(IXMLElement2 *This,IXMLElement2 **ppParent);
	HRESULT (WINAPI *setAttribute)(IXMLElement2 *This,BSTR strPropertyName,VARIANT PropertyValue);
	HRESULT (WINAPI *getAttribute)(IXMLElement2 *This,BSTR strPropertyName,VARIANT *PropertyValue);
	HRESULT (WINAPI *removeAttribute)(IXMLElement2 *This,BSTR strPropertyName);
	HRESULT (WINAPI *get_children)(IXMLElement2 *This,IXMLElementCollection **pp);
	HRESULT (WINAPI *get_type)(IXMLElement2 *This,long *plType);
	HRESULT (WINAPI *get_text)(IXMLElement2 *This,BSTR *p);
	HRESULT (WINAPI *put_text)(IXMLElement2 *This,BSTR p);
	HRESULT (WINAPI *addChild)(IXMLElement2 *This,IXMLElement2 *pChildElem,long lIndex,long lReserved);
	HRESULT (WINAPI *removeChild)(IXMLElement2 *This,IXMLElement2 *pChildElem);
	HRESULT (WINAPI *get_attributes)(IXMLElement2 *This,IXMLElementCollection **pp);
      END_INTERFACE
    } IXMLElement2Vtbl;
    struct IXMLElement2 {
      CONST_VTBL struct IXMLElement2Vtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLElement2_Release(This) (This)->lpVtbl->Release(This)
#define IXMLElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLElement2_get_tagName(This,p) (This)->lpVtbl->get_tagName(This,p)
#define IXMLElement2_put_tagName(This,p) (This)->lpVtbl->put_tagName(This,p)
#define IXMLElement2_get_parent(This,ppParent) (This)->lpVtbl->get_parent(This,ppParent)
#define IXMLElement2_setAttribute(This,strPropertyName,PropertyValue) (This)->lpVtbl->setAttribute(This,strPropertyName,PropertyValue)
#define IXMLElement2_getAttribute(This,strPropertyName,PropertyValue) (This)->lpVtbl->getAttribute(This,strPropertyName,PropertyValue)
#define IXMLElement2_removeAttribute(This,strPropertyName) (This)->lpVtbl->removeAttribute(This,strPropertyName)
#define IXMLElement2_get_children(This,pp) (This)->lpVtbl->get_children(This,pp)
#define IXMLElement2_get_type(This,plType) (This)->lpVtbl->get_type(This,plType)
#define IXMLElement2_get_text(This,p) (This)->lpVtbl->get_text(This,p)
#define IXMLElement2_put_text(This,p) (This)->lpVtbl->put_text(This,p)
#define IXMLElement2_addChild(This,pChildElem,lIndex,lReserved) (This)->lpVtbl->addChild(This,pChildElem,lIndex,lReserved)
#define IXMLElement2_removeChild(This,pChildElem) (This)->lpVtbl->removeChild(This,pChildElem)
#define IXMLElement2_get_attributes(This,pp) (This)->lpVtbl->get_attributes(This,pp)
#endif
#endif
    HRESULT WINAPI IXMLElement2_get_tagName_Proxy(IXMLElement2 *This,BSTR *p);
    void __RPC_STUB IXMLElement2_get_tagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement2_put_tagName_Proxy(IXMLElement2 *This,BSTR p);
    void __RPC_STUB IXMLElement2_put_tagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement2_get_parent_Proxy(IXMLElement2 *This,IXMLElement2 **ppParent);
    void __RPC_STUB IXMLElement2_get_parent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement2_setAttribute_Proxy(IXMLElement2 *This,BSTR strPropertyName,VARIANT PropertyValue);
    void __RPC_STUB IXMLElement2_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement2_getAttribute_Proxy(IXMLElement2 *This,BSTR strPropertyName,VARIANT *PropertyValue);
    void __RPC_STUB IXMLElement2_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement2_removeAttribute_Proxy(IXMLElement2 *This,BSTR strPropertyName);
    void __RPC_STUB IXMLElement2_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement2_get_children_Proxy(IXMLElement2 *This,IXMLElementCollection **pp);
    void __RPC_STUB IXMLElement2_get_children_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement2_get_type_Proxy(IXMLElement2 *This,long *plType);
    void __RPC_STUB IXMLElement2_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement2_get_text_Proxy(IXMLElement2 *This,BSTR *p);
    void __RPC_STUB IXMLElement2_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement2_put_text_Proxy(IXMLElement2 *This,BSTR p);
    void __RPC_STUB IXMLElement2_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement2_addChild_Proxy(IXMLElement2 *This,IXMLElement2 *pChildElem,long lIndex,long lReserved);
    void __RPC_STUB IXMLElement2_addChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement2_removeChild_Proxy(IXMLElement2 *This,IXMLElement2 *pChildElem);
    void __RPC_STUB IXMLElement2_removeChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLElement2_get_attributes_Proxy(IXMLElement2 *This,IXMLElementCollection **pp);
    void __RPC_STUB IXMLElement2_get_attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLAttribute_INTERFACE_DEFINED__
#define __IXMLAttribute_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLAttribute;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLAttribute : public IDispatch {
    public:
      virtual HRESULT WINAPI get_name(BSTR *n) = 0;
      virtual HRESULT WINAPI get_value(BSTR *v) = 0;
    };
#else
    typedef struct IXMLAttributeVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLAttribute *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLAttribute *This);
	ULONG (WINAPI *Release)(IXMLAttribute *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLAttribute *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLAttribute *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLAttribute *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLAttribute *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_name)(IXMLAttribute *This,BSTR *n);
	HRESULT (WINAPI *get_value)(IXMLAttribute *This,BSTR *v);
      END_INTERFACE
    } IXMLAttributeVtbl;
    struct IXMLAttribute {
      CONST_VTBL struct IXMLAttributeVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLAttribute_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLAttribute_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLAttribute_Release(This) (This)->lpVtbl->Release(This)
#define IXMLAttribute_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLAttribute_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLAttribute_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLAttribute_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLAttribute_get_name(This,n) (This)->lpVtbl->get_name(This,n)
#define IXMLAttribute_get_value(This,v) (This)->lpVtbl->get_value(This,v)
#endif
#endif
    HRESULT WINAPI IXMLAttribute_get_name_Proxy(IXMLAttribute *This,BSTR *n);
    void __RPC_STUB IXMLAttribute_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLAttribute_get_value_Proxy(IXMLAttribute *This,BSTR *v);
    void __RPC_STUB IXMLAttribute_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLError_INTERFACE_DEFINED__
#define __IXMLError_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLError;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLError : public IUnknown {
    public:
      virtual HRESULT WINAPI GetErrorInfo(XML_ERROR *pErrorReturn) = 0;
    };
#else
    typedef struct IXMLErrorVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLError *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLError *This);
	ULONG (WINAPI *Release)(IXMLError *This);
	HRESULT (WINAPI *GetErrorInfo)(IXMLError *This,XML_ERROR *pErrorReturn);
      END_INTERFACE
    } IXMLErrorVtbl;
    struct IXMLError {
      CONST_VTBL struct IXMLErrorVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLError_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLError_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLError_Release(This) (This)->lpVtbl->Release(This)
#define IXMLError_GetErrorInfo(This,pErrorReturn) (This)->lpVtbl->GetErrorInfo(This,pErrorReturn)
#endif
#endif
    HRESULT WINAPI IXMLError_GetErrorInfo_Proxy(IXMLError *This,XML_ERROR *pErrorReturn);
    void __RPC_STUB IXMLError_GetErrorInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLDOMSelection_INTERFACE_DEFINED__
#define __IXMLDOMSelection_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLDOMSelection;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLDOMSelection : public IXMLDOMNodeList {
    public:
      virtual HRESULT WINAPI get_expr(BSTR *expression) = 0;
      virtual HRESULT WINAPI put_expr(BSTR expression) = 0;
      virtual HRESULT WINAPI get_context(IXMLDOMNode **ppNode) = 0;
      virtual HRESULT WINAPI putref_context(IXMLDOMNode *pNode) = 0;
      virtual HRESULT WINAPI peekNode(IXMLDOMNode **ppNode) = 0;
      virtual HRESULT WINAPI matches(IXMLDOMNode *pNode,IXMLDOMNode **ppNode) = 0;
      virtual HRESULT WINAPI removeNext(IXMLDOMNode **ppNode) = 0;
      virtual HRESULT WINAPI removeAll(void) = 0;
      virtual HRESULT WINAPI clone(IXMLDOMSelection **ppNode) = 0;
      virtual HRESULT WINAPI getProperty(BSTR name,VARIANT *value) = 0;
      virtual HRESULT WINAPI setProperty(BSTR name,VARIANT value) = 0;
    };
#else
    typedef struct IXMLDOMSelectionVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLDOMSelection *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLDOMSelection *This);
	ULONG (WINAPI *Release)(IXMLDOMSelection *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLDOMSelection *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLDOMSelection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLDOMSelection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLDOMSelection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_item)(IXMLDOMSelection *This,long index,IXMLDOMNode **listItem);
	HRESULT (WINAPI *get_length)(IXMLDOMSelection *This,long *listLength);
	HRESULT (WINAPI *nextNode)(IXMLDOMSelection *This,IXMLDOMNode **nextItem);
	HRESULT (WINAPI *reset)(IXMLDOMSelection *This);
	HRESULT (WINAPI *get__newEnum)(IXMLDOMSelection *This,IUnknown **ppUnk);
	HRESULT (WINAPI *get_expr)(IXMLDOMSelection *This,BSTR *expression);
	HRESULT (WINAPI *put_expr)(IXMLDOMSelection *This,BSTR expression);
	HRESULT (WINAPI *get_context)(IXMLDOMSelection *This,IXMLDOMNode **ppNode);
	HRESULT (WINAPI *putref_context)(IXMLDOMSelection *This,IXMLDOMNode *pNode);
	HRESULT (WINAPI *peekNode)(IXMLDOMSelection *This,IXMLDOMNode **ppNode);
	HRESULT (WINAPI *matches)(IXMLDOMSelection *This,IXMLDOMNode *pNode,IXMLDOMNode **ppNode);
	HRESULT (WINAPI *removeNext)(IXMLDOMSelection *This,IXMLDOMNode **ppNode);
	HRESULT (WINAPI *removeAll)(IXMLDOMSelection *This);
	HRESULT (WINAPI *clone)(IXMLDOMSelection *This,IXMLDOMSelection **ppNode);
	HRESULT (WINAPI *getProperty)(IXMLDOMSelection *This,BSTR name,VARIANT *value);
	HRESULT (WINAPI *setProperty)(IXMLDOMSelection *This,BSTR name,VARIANT value);
      END_INTERFACE
    } IXMLDOMSelectionVtbl;
    struct IXMLDOMSelection {
      CONST_VTBL struct IXMLDOMSelectionVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLDOMSelection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLDOMSelection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLDOMSelection_Release(This) (This)->lpVtbl->Release(This)
#define IXMLDOMSelection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLDOMSelection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLDOMSelection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLDOMSelection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLDOMSelection_get_item(This,index,listItem) (This)->lpVtbl->get_item(This,index,listItem)
#define IXMLDOMSelection_get_length(This,listLength) (This)->lpVtbl->get_length(This,listLength)
#define IXMLDOMSelection_nextNode(This,nextItem) (This)->lpVtbl->nextNode(This,nextItem)
#define IXMLDOMSelection_reset(This) (This)->lpVtbl->reset(This)
#define IXMLDOMSelection_get__newEnum(This,ppUnk) (This)->lpVtbl->get__newEnum(This,ppUnk)
#define IXMLDOMSelection_get_expr(This,expression) (This)->lpVtbl->get_expr(This,expression)
#define IXMLDOMSelection_put_expr(This,expression) (This)->lpVtbl->put_expr(This,expression)
#define IXMLDOMSelection_get_context(This,ppNode) (This)->lpVtbl->get_context(This,ppNode)
#define IXMLDOMSelection_putref_context(This,pNode) (This)->lpVtbl->putref_context(This,pNode)
#define IXMLDOMSelection_peekNode(This,ppNode) (This)->lpVtbl->peekNode(This,ppNode)
#define IXMLDOMSelection_matches(This,pNode,ppNode) (This)->lpVtbl->matches(This,pNode,ppNode)
#define IXMLDOMSelection_removeNext(This,ppNode) (This)->lpVtbl->removeNext(This,ppNode)
#define IXMLDOMSelection_removeAll(This) (This)->lpVtbl->removeAll(This)
#define IXMLDOMSelection_clone(This,ppNode) (This)->lpVtbl->clone(This,ppNode)
#define IXMLDOMSelection_getProperty(This,name,value) (This)->lpVtbl->getProperty(This,name,value)
#define IXMLDOMSelection_setProperty(This,name,value) (This)->lpVtbl->setProperty(This,name,value)
#endif
#endif
    HRESULT WINAPI IXMLDOMSelection_get_expr_Proxy(IXMLDOMSelection *This,BSTR *expression);
    void __RPC_STUB IXMLDOMSelection_get_expr_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSelection_put_expr_Proxy(IXMLDOMSelection *This,BSTR expression);
    void __RPC_STUB IXMLDOMSelection_put_expr_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSelection_get_context_Proxy(IXMLDOMSelection *This,IXMLDOMNode **ppNode);
    void __RPC_STUB IXMLDOMSelection_get_context_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSelection_putref_context_Proxy(IXMLDOMSelection *This,IXMLDOMNode *pNode);
    void __RPC_STUB IXMLDOMSelection_putref_context_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSelection_peekNode_Proxy(IXMLDOMSelection *This,IXMLDOMNode **ppNode);
    void __RPC_STUB IXMLDOMSelection_peekNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSelection_matches_Proxy(IXMLDOMSelection *This,IXMLDOMNode *pNode,IXMLDOMNode **ppNode);
    void __RPC_STUB IXMLDOMSelection_matches_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSelection_removeNext_Proxy(IXMLDOMSelection *This,IXMLDOMNode **ppNode);
    void __RPC_STUB IXMLDOMSelection_removeNext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSelection_removeAll_Proxy(IXMLDOMSelection *This);
    void __RPC_STUB IXMLDOMSelection_removeAll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSelection_clone_Proxy(IXMLDOMSelection *This,IXMLDOMSelection **ppNode);
    void __RPC_STUB IXMLDOMSelection_clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSelection_getProperty_Proxy(IXMLDOMSelection *This,BSTR name,VARIANT *value);
    void __RPC_STUB IXMLDOMSelection_getProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLDOMSelection_setProperty_Proxy(IXMLDOMSelection *This,BSTR name,VARIANT value);
    void __RPC_STUB IXMLDOMSelection_setProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __XMLDOMDocumentEvents_DISPINTERFACE_DEFINED__
#define __XMLDOMDocumentEvents_DISPINTERFACE_DEFINED__
    EXTERN_C const IID DIID_XMLDOMDocumentEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct XMLDOMDocumentEvents : public IDispatch {
    };
#else
    typedef struct XMLDOMDocumentEventsVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(XMLDOMDocumentEvents *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(XMLDOMDocumentEvents *This);
	ULONG (WINAPI *Release)(XMLDOMDocumentEvents *This);
	HRESULT (WINAPI *GetTypeInfoCount)(XMLDOMDocumentEvents *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(XMLDOMDocumentEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(XMLDOMDocumentEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(XMLDOMDocumentEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      END_INTERFACE
    } XMLDOMDocumentEventsVtbl;
    struct XMLDOMDocumentEvents {
      CONST_VTBL struct XMLDOMDocumentEventsVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define XMLDOMDocumentEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define XMLDOMDocumentEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define XMLDOMDocumentEvents_Release(This) (This)->lpVtbl->Release(This)
#define XMLDOMDocumentEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define XMLDOMDocumentEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define XMLDOMDocumentEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define XMLDOMDocumentEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IDSOControl_INTERFACE_DEFINED__
#define __IDSOControl_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IDSOControl;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IDSOControl : public IDispatch {
    public:
      virtual HRESULT WINAPI get_XMLDocument(IXMLDOMDocument **ppDoc) = 0;
      virtual HRESULT WINAPI put_XMLDocument(IXMLDOMDocument *ppDoc) = 0;
      virtual HRESULT WINAPI get_JavaDSOCompatible(WINBOOL *fJavaDSOCompatible) = 0;
      virtual HRESULT WINAPI put_JavaDSOCompatible(WINBOOL fJavaDSOCompatible) = 0;
      virtual HRESULT WINAPI get_readyState(long *state) = 0;
    };
#else
    typedef struct IDSOControlVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IDSOControl *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IDSOControl *This);
	ULONG (WINAPI *Release)(IDSOControl *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IDSOControl *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IDSOControl *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IDSOControl *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IDSOControl *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_XMLDocument)(IDSOControl *This,IXMLDOMDocument **ppDoc);
	HRESULT (WINAPI *put_XMLDocument)(IDSOControl *This,IXMLDOMDocument *ppDoc);
	HRESULT (WINAPI *get_JavaDSOCompatible)(IDSOControl *This,WINBOOL *fJavaDSOCompatible);
	HRESULT (WINAPI *put_JavaDSOCompatible)(IDSOControl *This,WINBOOL fJavaDSOCompatible);
	HRESULT (WINAPI *get_readyState)(IDSOControl *This,long *state);
      END_INTERFACE
    } IDSOControlVtbl;
    struct IDSOControl {
      CONST_VTBL struct IDSOControlVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IDSOControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDSOControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDSOControl_Release(This) (This)->lpVtbl->Release(This)
#define IDSOControl_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IDSOControl_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IDSOControl_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IDSOControl_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IDSOControl_get_XMLDocument(This,ppDoc) (This)->lpVtbl->get_XMLDocument(This,ppDoc)
#define IDSOControl_put_XMLDocument(This,ppDoc) (This)->lpVtbl->put_XMLDocument(This,ppDoc)
#define IDSOControl_get_JavaDSOCompatible(This,fJavaDSOCompatible) (This)->lpVtbl->get_JavaDSOCompatible(This,fJavaDSOCompatible)
#define IDSOControl_put_JavaDSOCompatible(This,fJavaDSOCompatible) (This)->lpVtbl->put_JavaDSOCompatible(This,fJavaDSOCompatible)
#define IDSOControl_get_readyState(This,state) (This)->lpVtbl->get_readyState(This,state)
#endif
#endif
    HRESULT WINAPI IDSOControl_get_XMLDocument_Proxy(IDSOControl *This,IXMLDOMDocument **ppDoc);
    void __RPC_STUB IDSOControl_get_XMLDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IDSOControl_put_XMLDocument_Proxy(IDSOControl *This,IXMLDOMDocument *ppDoc);
    void __RPC_STUB IDSOControl_put_XMLDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IDSOControl_get_JavaDSOCompatible_Proxy(IDSOControl *This,WINBOOL *fJavaDSOCompatible);
    void __RPC_STUB IDSOControl_get_JavaDSOCompatible_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IDSOControl_put_JavaDSOCompatible_Proxy(IDSOControl *This,WINBOOL fJavaDSOCompatible);
    void __RPC_STUB IDSOControl_put_JavaDSOCompatible_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IDSOControl_get_readyState_Proxy(IDSOControl *This,long *state);
    void __RPC_STUB IDSOControl_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLHTTPRequest_INTERFACE_DEFINED__
#define __IXMLHTTPRequest_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IXMLHTTPRequest;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IXMLHTTPRequest : public IDispatch {
    public:
      virtual HRESULT WINAPI open(BSTR bstrMethod,BSTR bstrUrl,VARIANT varAsync,VARIANT bstrUser,VARIANT bstrPassword) = 0;
      virtual HRESULT WINAPI setRequestHeader(BSTR bstrHeader,BSTR bstrValue) = 0;
      virtual HRESULT WINAPI getResponseHeader(BSTR bstrHeader,BSTR *pbstrValue) = 0;
      virtual HRESULT WINAPI getAllResponseHeaders(BSTR *pbstrHeaders) = 0;
      virtual HRESULT WINAPI send(VARIANT varBody) = 0;
      virtual HRESULT WINAPI abort(void) = 0;
      virtual HRESULT WINAPI get_status(long *plStatus) = 0;
      virtual HRESULT WINAPI get_statusText(BSTR *pbstrStatus) = 0;
      virtual HRESULT WINAPI get_responseXML(IDispatch **ppBody) = 0;
      virtual HRESULT WINAPI get_responseText(BSTR *pbstrBody) = 0;
      virtual HRESULT WINAPI get_responseBody(VARIANT *pvarBody) = 0;
      virtual HRESULT WINAPI get_responseStream(VARIANT *pvarBody) = 0;
      virtual HRESULT WINAPI get_readyState(long *plState) = 0;
      virtual HRESULT WINAPI put_onreadystatechange(IDispatch *pReadyStateSink) = 0;
    };
#else
    typedef struct IXMLHTTPRequestVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IXMLHTTPRequest *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IXMLHTTPRequest *This);
	ULONG (WINAPI *Release)(IXMLHTTPRequest *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IXMLHTTPRequest *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IXMLHTTPRequest *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IXMLHTTPRequest *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IXMLHTTPRequest *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *open)(IXMLHTTPRequest *This,BSTR bstrMethod,BSTR bstrUrl,VARIANT varAsync,VARIANT bstrUser,VARIANT bstrPassword);
	HRESULT (WINAPI *setRequestHeader)(IXMLHTTPRequest *This,BSTR bstrHeader,BSTR bstrValue);
	HRESULT (WINAPI *getResponseHeader)(IXMLHTTPRequest *This,BSTR bstrHeader,BSTR *pbstrValue);
	HRESULT (WINAPI *getAllResponseHeaders)(IXMLHTTPRequest *This,BSTR *pbstrHeaders);
	HRESULT (WINAPI *send)(IXMLHTTPRequest *This,VARIANT varBody);
	HRESULT (WINAPI *abort)(IXMLHTTPRequest *This);
	HRESULT (WINAPI *get_status)(IXMLHTTPRequest *This,long *plStatus);
	HRESULT (WINAPI *get_statusText)(IXMLHTTPRequest *This,BSTR *pbstrStatus);
	HRESULT (WINAPI *get_responseXML)(IXMLHTTPRequest *This,IDispatch **ppBody);
	HRESULT (WINAPI *get_responseText)(IXMLHTTPRequest *This,BSTR *pbstrBody);
	HRESULT (WINAPI *get_responseBody)(IXMLHTTPRequest *This,VARIANT *pvarBody);
	HRESULT (WINAPI *get_responseStream)(IXMLHTTPRequest *This,VARIANT *pvarBody);
	HRESULT (WINAPI *get_readyState)(IXMLHTTPRequest *This,long *plState);
	HRESULT (WINAPI *put_onreadystatechange)(IXMLHTTPRequest *This,IDispatch *pReadyStateSink);
      END_INTERFACE
    } IXMLHTTPRequestVtbl;
    struct IXMLHTTPRequest {
      CONST_VTBL struct IXMLHTTPRequestVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IXMLHTTPRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLHTTPRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLHTTPRequest_Release(This) (This)->lpVtbl->Release(This)
#define IXMLHTTPRequest_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IXMLHTTPRequest_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IXMLHTTPRequest_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IXMLHTTPRequest_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IXMLHTTPRequest_open(This,bstrMethod,bstrUrl,varAsync,bstrUser,bstrPassword) (This)->lpVtbl->open(This,bstrMethod,bstrUrl,varAsync,bstrUser,bstrPassword)
#define IXMLHTTPRequest_setRequestHeader(This,bstrHeader,bstrValue) (This)->lpVtbl->setRequestHeader(This,bstrHeader,bstrValue)
#define IXMLHTTPRequest_getResponseHeader(This,bstrHeader,pbstrValue) (This)->lpVtbl->getResponseHeader(This,bstrHeader,pbstrValue)
#define IXMLHTTPRequest_getAllResponseHeaders(This,pbstrHeaders) (This)->lpVtbl->getAllResponseHeaders(This,pbstrHeaders)
#define IXMLHTTPRequest_send(This,varBody) (This)->lpVtbl->send(This,varBody)
#define IXMLHTTPRequest_abort(This) (This)->lpVtbl->abort(This)
#define IXMLHTTPRequest_get_status(This,plStatus) (This)->lpVtbl->get_status(This,plStatus)
#define IXMLHTTPRequest_get_statusText(This,pbstrStatus) (This)->lpVtbl->get_statusText(This,pbstrStatus)
#define IXMLHTTPRequest_get_responseXML(This,ppBody) (This)->lpVtbl->get_responseXML(This,ppBody)
#define IXMLHTTPRequest_get_responseText(This,pbstrBody) (This)->lpVtbl->get_responseText(This,pbstrBody)
#define IXMLHTTPRequest_get_responseBody(This,pvarBody) (This)->lpVtbl->get_responseBody(This,pvarBody)
#define IXMLHTTPRequest_get_responseStream(This,pvarBody) (This)->lpVtbl->get_responseStream(This,pvarBody)
#define IXMLHTTPRequest_get_readyState(This,plState) (This)->lpVtbl->get_readyState(This,plState)
#define IXMLHTTPRequest_put_onreadystatechange(This,pReadyStateSink) (This)->lpVtbl->put_onreadystatechange(This,pReadyStateSink)
#endif
#endif
    HRESULT WINAPI IXMLHTTPRequest_open_Proxy(IXMLHTTPRequest *This,BSTR bstrMethod,BSTR bstrUrl,VARIANT varAsync,VARIANT bstrUser,VARIANT bstrPassword);
    void __RPC_STUB IXMLHTTPRequest_open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_setRequestHeader_Proxy(IXMLHTTPRequest *This,BSTR bstrHeader,BSTR bstrValue);
    void __RPC_STUB IXMLHTTPRequest_setRequestHeader_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_getResponseHeader_Proxy(IXMLHTTPRequest *This,BSTR bstrHeader,BSTR *pbstrValue);
    void __RPC_STUB IXMLHTTPRequest_getResponseHeader_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_getAllResponseHeaders_Proxy(IXMLHTTPRequest *This,BSTR *pbstrHeaders);
    void __RPC_STUB IXMLHTTPRequest_getAllResponseHeaders_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_send_Proxy(IXMLHTTPRequest *This,VARIANT varBody);
    void __RPC_STUB IXMLHTTPRequest_send_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_abort_Proxy(IXMLHTTPRequest *This);
    void __RPC_STUB IXMLHTTPRequest_abort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_get_status_Proxy(IXMLHTTPRequest *This,long *plStatus);
    void __RPC_STUB IXMLHTTPRequest_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_get_statusText_Proxy(IXMLHTTPRequest *This,BSTR *pbstrStatus);
    void __RPC_STUB IXMLHTTPRequest_get_statusText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_get_responseXML_Proxy(IXMLHTTPRequest *This,IDispatch **ppBody);
    void __RPC_STUB IXMLHTTPRequest_get_responseXML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_get_responseText_Proxy(IXMLHTTPRequest *This,BSTR *pbstrBody);
    void __RPC_STUB IXMLHTTPRequest_get_responseText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_get_responseBody_Proxy(IXMLHTTPRequest *This,VARIANT *pvarBody);
    void __RPC_STUB IXMLHTTPRequest_get_responseBody_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_get_responseStream_Proxy(IXMLHTTPRequest *This,VARIANT *pvarBody);
    void __RPC_STUB IXMLHTTPRequest_get_responseStream_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_get_readyState_Proxy(IXMLHTTPRequest *This,long *plState);
    void __RPC_STUB IXMLHTTPRequest_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IXMLHTTPRequest_put_onreadystatechange_Proxy(IXMLHTTPRequest *This,IDispatch *pReadyStateSink);
    void __RPC_STUB IXMLHTTPRequest_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IServerXMLHTTPRequest_INTERFACE_DEFINED__
#define __IServerXMLHTTPRequest_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IServerXMLHTTPRequest;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IServerXMLHTTPRequest : public IXMLHTTPRequest {
    public:
      virtual HRESULT WINAPI setTimeouts(long resolveTimeout,long connectTimeout,long sendTimeout,long receiveTimeout) = 0;
      virtual HRESULT WINAPI waitForResponse(VARIANT timeoutInSeconds,VARIANT_BOOL *isSuccessful) = 0;
      virtual HRESULT WINAPI getOption(SERVERXMLHTTP_OPTION option,VARIANT *value) = 0;
      virtual HRESULT WINAPI setOption(SERVERXMLHTTP_OPTION option,VARIANT value) = 0;
    };
#else
    typedef struct IServerXMLHTTPRequestVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IServerXMLHTTPRequest *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IServerXMLHTTPRequest *This);
	ULONG (WINAPI *Release)(IServerXMLHTTPRequest *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IServerXMLHTTPRequest *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IServerXMLHTTPRequest *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IServerXMLHTTPRequest *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IServerXMLHTTPRequest *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *open)(IServerXMLHTTPRequest *This,BSTR bstrMethod,BSTR bstrUrl,VARIANT varAsync,VARIANT bstrUser,VARIANT bstrPassword);
	HRESULT (WINAPI *setRequestHeader)(IServerXMLHTTPRequest *This,BSTR bstrHeader,BSTR bstrValue);
	HRESULT (WINAPI *getResponseHeader)(IServerXMLHTTPRequest *This,BSTR bstrHeader,BSTR *pbstrValue);
	HRESULT (WINAPI *getAllResponseHeaders)(IServerXMLHTTPRequest *This,BSTR *pbstrHeaders);
	HRESULT (WINAPI *send)(IServerXMLHTTPRequest *This,VARIANT varBody);
	HRESULT (WINAPI *abort)(IServerXMLHTTPRequest *This);
	HRESULT (WINAPI *get_status)(IServerXMLHTTPRequest *This,long *plStatus);
	HRESULT (WINAPI *get_statusText)(IServerXMLHTTPRequest *This,BSTR *pbstrStatus);
	HRESULT (WINAPI *get_responseXML)(IServerXMLHTTPRequest *This,IDispatch **ppBody);
	HRESULT (WINAPI *get_responseText)(IServerXMLHTTPRequest *This,BSTR *pbstrBody);
	HRESULT (WINAPI *get_responseBody)(IServerXMLHTTPRequest *This,VARIANT *pvarBody);
	HRESULT (WINAPI *get_responseStream)(IServerXMLHTTPRequest *This,VARIANT *pvarBody);
	HRESULT (WINAPI *get_readyState)(IServerXMLHTTPRequest *This,long *plState);
	HRESULT (WINAPI *put_onreadystatechange)(IServerXMLHTTPRequest *This,IDispatch *pReadyStateSink);
	HRESULT (WINAPI *setTimeouts)(IServerXMLHTTPRequest *This,long resolveTimeout,long connectTimeout,long sendTimeout,long receiveTimeout);
	HRESULT (WINAPI *waitForResponse)(IServerXMLHTTPRequest *This,VARIANT timeoutInSeconds,VARIANT_BOOL *isSuccessful);
	HRESULT (WINAPI *getOption)(IServerXMLHTTPRequest *This,SERVERXMLHTTP_OPTION option,VARIANT *value);
	HRESULT (WINAPI *setOption)(IServerXMLHTTPRequest *This,SERVERXMLHTTP_OPTION option,VARIANT value);
      END_INTERFACE
    } IServerXMLHTTPRequestVtbl;
    struct IServerXMLHTTPRequest {
      CONST_VTBL struct IServerXMLHTTPRequestVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IServerXMLHTTPRequest_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IServerXMLHTTPRequest_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IServerXMLHTTPRequest_Release(This) (This)->lpVtbl->Release(This)
#define IServerXMLHTTPRequest_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IServerXMLHTTPRequest_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IServerXMLHTTPRequest_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IServerXMLHTTPRequest_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IServerXMLHTTPRequest_open(This,bstrMethod,bstrUrl,varAsync,bstrUser,bstrPassword) (This)->lpVtbl->open(This,bstrMethod,bstrUrl,varAsync,bstrUser,bstrPassword)
#define IServerXMLHTTPRequest_setRequestHeader(This,bstrHeader,bstrValue) (This)->lpVtbl->setRequestHeader(This,bstrHeader,bstrValue)
#define IServerXMLHTTPRequest_getResponseHeader(This,bstrHeader,pbstrValue) (This)->lpVtbl->getResponseHeader(This,bstrHeader,pbstrValue)
#define IServerXMLHTTPRequest_getAllResponseHeaders(This,pbstrHeaders) (This)->lpVtbl->getAllResponseHeaders(This,pbstrHeaders)
#define IServerXMLHTTPRequest_send(This,varBody) (This)->lpVtbl->send(This,varBody)
#define IServerXMLHTTPRequest_abort(This) (This)->lpVtbl->abort(This)
#define IServerXMLHTTPRequest_get_status(This,plStatus) (This)->lpVtbl->get_status(This,plStatus)
#define IServerXMLHTTPRequest_get_statusText(This,pbstrStatus) (This)->lpVtbl->get_statusText(This,pbstrStatus)
#define IServerXMLHTTPRequest_get_responseXML(This,ppBody) (This)->lpVtbl->get_responseXML(This,ppBody)
#define IServerXMLHTTPRequest_get_responseText(This,pbstrBody) (This)->lpVtbl->get_responseText(This,pbstrBody)
#define IServerXMLHTTPRequest_get_responseBody(This,pvarBody) (This)->lpVtbl->get_responseBody(This,pvarBody)
#define IServerXMLHTTPRequest_get_responseStream(This,pvarBody) (This)->lpVtbl->get_responseStream(This,pvarBody)
#define IServerXMLHTTPRequest_get_readyState(This,plState) (This)->lpVtbl->get_readyState(This,plState)
#define IServerXMLHTTPRequest_put_onreadystatechange(This,pReadyStateSink) (This)->lpVtbl->put_onreadystatechange(This,pReadyStateSink)
#define IServerXMLHTTPRequest_setTimeouts(This,resolveTimeout,connectTimeout,sendTimeout,receiveTimeout) (This)->lpVtbl->setTimeouts(This,resolveTimeout,connectTimeout,sendTimeout,receiveTimeout)
#define IServerXMLHTTPRequest_waitForResponse(This,timeoutInSeconds,isSuccessful) (This)->lpVtbl->waitForResponse(This,timeoutInSeconds,isSuccessful)
#define IServerXMLHTTPRequest_getOption(This,option,value) (This)->lpVtbl->getOption(This,option,value)
#define IServerXMLHTTPRequest_setOption(This,option,value) (This)->lpVtbl->setOption(This,option,value)
#endif
#endif
    HRESULT WINAPI IServerXMLHTTPRequest_setTimeouts_Proxy(IServerXMLHTTPRequest *This,long resolveTimeout,long connectTimeout,long sendTimeout,long receiveTimeout);
    void __RPC_STUB IServerXMLHTTPRequest_setTimeouts_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IServerXMLHTTPRequest_waitForResponse_Proxy(IServerXMLHTTPRequest *This,VARIANT timeoutInSeconds,VARIANT_BOOL *isSuccessful);
    void __RPC_STUB IServerXMLHTTPRequest_waitForResponse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IServerXMLHTTPRequest_getOption_Proxy(IServerXMLHTTPRequest *This,SERVERXMLHTTP_OPTION option,VARIANT *value);
    void __RPC_STUB IServerXMLHTTPRequest_getOption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IServerXMLHTTPRequest_setOption_Proxy(IServerXMLHTTPRequest *This,SERVERXMLHTTP_OPTION option,VARIANT value);
    void __RPC_STUB IServerXMLHTTPRequest_setOption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IServerXMLHTTPRequest2_INTERFACE_DEFINED__
#define __IServerXMLHTTPRequest2_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IServerXMLHTTPRequest2;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IServerXMLHTTPRequest2 : public IServerXMLHTTPRequest {
    public:
      virtual HRESULT WINAPI setProxy(SXH_PROXY_SETTING proxySetting,VARIANT varProxyServer,VARIANT varBypassList) = 0;
      virtual HRESULT WINAPI setProxyCredentials(BSTR bstrUserName,BSTR bstrPassword) = 0;
    };
#else
    typedef struct IServerXMLHTTPRequest2Vtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IServerXMLHTTPRequest2 *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IServerXMLHTTPRequest2 *This);
	ULONG (WINAPI *Release)(IServerXMLHTTPRequest2 *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IServerXMLHTTPRequest2 *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IServerXMLHTTPRequest2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IServerXMLHTTPRequest2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IServerXMLHTTPRequest2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *open)(IServerXMLHTTPRequest2 *This,BSTR bstrMethod,BSTR bstrUrl,VARIANT varAsync,VARIANT bstrUser,VARIANT bstrPassword);
	HRESULT (WINAPI *setRequestHeader)(IServerXMLHTTPRequest2 *This,BSTR bstrHeader,BSTR bstrValue);
	HRESULT (WINAPI *getResponseHeader)(IServerXMLHTTPRequest2 *This,BSTR bstrHeader,BSTR *pbstrValue);
	HRESULT (WINAPI *getAllResponseHeaders)(IServerXMLHTTPRequest2 *This,BSTR *pbstrHeaders);
	HRESULT (WINAPI *send)(IServerXMLHTTPRequest2 *This,VARIANT varBody);
	HRESULT (WINAPI *abort)(IServerXMLHTTPRequest2 *This);
	HRESULT (WINAPI *get_status)(IServerXMLHTTPRequest2 *This,long *plStatus);
	HRESULT (WINAPI *get_statusText)(IServerXMLHTTPRequest2 *This,BSTR *pbstrStatus);
	HRESULT (WINAPI *get_responseXML)(IServerXMLHTTPRequest2 *This,IDispatch **ppBody);
	HRESULT (WINAPI *get_responseText)(IServerXMLHTTPRequest2 *This,BSTR *pbstrBody);
	HRESULT (WINAPI *get_responseBody)(IServerXMLHTTPRequest2 *This,VARIANT *pvarBody);
	HRESULT (WINAPI *get_responseStream)(IServerXMLHTTPRequest2 *This,VARIANT *pvarBody);
	HRESULT (WINAPI *get_readyState)(IServerXMLHTTPRequest2 *This,long *plState);
	HRESULT (WINAPI *put_onreadystatechange)(IServerXMLHTTPRequest2 *This,IDispatch *pReadyStateSink);
	HRESULT (WINAPI *setTimeouts)(IServerXMLHTTPRequest2 *This,long resolveTimeout,long connectTimeout,long sendTimeout,long receiveTimeout);
	HRESULT (WINAPI *waitForResponse)(IServerXMLHTTPRequest2 *This,VARIANT timeoutInSeconds,VARIANT_BOOL *isSuccessful);
	HRESULT (WINAPI *getOption)(IServerXMLHTTPRequest2 *This,SERVERXMLHTTP_OPTION option,VARIANT *value);
	HRESULT (WINAPI *setOption)(IServerXMLHTTPRequest2 *This,SERVERXMLHTTP_OPTION option,VARIANT value);
	HRESULT (WINAPI *setProxy)(IServerXMLHTTPRequest2 *This,SXH_PROXY_SETTING proxySetting,VARIANT varProxyServer,VARIANT varBypassList);
	HRESULT (WINAPI *setProxyCredentials)(IServerXMLHTTPRequest2 *This,BSTR bstrUserName,BSTR bstrPassword);
      END_INTERFACE
    } IServerXMLHTTPRequest2Vtbl;
    struct IServerXMLHTTPRequest2 {
      CONST_VTBL struct IServerXMLHTTPRequest2Vtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IServerXMLHTTPRequest2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IServerXMLHTTPRequest2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IServerXMLHTTPRequest2_Release(This) (This)->lpVtbl->Release(This)
#define IServerXMLHTTPRequest2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IServerXMLHTTPRequest2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IServerXMLHTTPRequest2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IServerXMLHTTPRequest2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IServerXMLHTTPRequest2_open(This,bstrMethod,bstrUrl,varAsync,bstrUser,bstrPassword) (This)->lpVtbl->open(This,bstrMethod,bstrUrl,varAsync,bstrUser,bstrPassword)
#define IServerXMLHTTPRequest2_setRequestHeader(This,bstrHeader,bstrValue) (This)->lpVtbl->setRequestHeader(This,bstrHeader,bstrValue)
#define IServerXMLHTTPRequest2_getResponseHeader(This,bstrHeader,pbstrValue) (This)->lpVtbl->getResponseHeader(This,bstrHeader,pbstrValue)
#define IServerXMLHTTPRequest2_getAllResponseHeaders(This,pbstrHeaders) (This)->lpVtbl->getAllResponseHeaders(This,pbstrHeaders)
#define IServerXMLHTTPRequest2_send(This,varBody) (This)->lpVtbl->send(This,varBody)
#define IServerXMLHTTPRequest2_abort(This) (This)->lpVtbl->abort(This)
#define IServerXMLHTTPRequest2_get_status(This,plStatus) (This)->lpVtbl->get_status(This,plStatus)
#define IServerXMLHTTPRequest2_get_statusText(This,pbstrStatus) (This)->lpVtbl->get_statusText(This,pbstrStatus)
#define IServerXMLHTTPRequest2_get_responseXML(This,ppBody) (This)->lpVtbl->get_responseXML(This,ppBody)
#define IServerXMLHTTPRequest2_get_responseText(This,pbstrBody) (This)->lpVtbl->get_responseText(This,pbstrBody)
#define IServerXMLHTTPRequest2_get_responseBody(This,pvarBody) (This)->lpVtbl->get_responseBody(This,pvarBody)
#define IServerXMLHTTPRequest2_get_responseStream(This,pvarBody) (This)->lpVtbl->get_responseStream(This,pvarBody)
#define IServerXMLHTTPRequest2_get_readyState(This,plState) (This)->lpVtbl->get_readyState(This,plState)
#define IServerXMLHTTPRequest2_put_onreadystatechange(This,pReadyStateSink) (This)->lpVtbl->put_onreadystatechange(This,pReadyStateSink)
#define IServerXMLHTTPRequest2_setTimeouts(This,resolveTimeout,connectTimeout,sendTimeout,receiveTimeout) (This)->lpVtbl->setTimeouts(This,resolveTimeout,connectTimeout,sendTimeout,receiveTimeout)
#define IServerXMLHTTPRequest2_waitForResponse(This,timeoutInSeconds,isSuccessful) (This)->lpVtbl->waitForResponse(This,timeoutInSeconds,isSuccessful)
#define IServerXMLHTTPRequest2_getOption(This,option,value) (This)->lpVtbl->getOption(This,option,value)
#define IServerXMLHTTPRequest2_setOption(This,option,value) (This)->lpVtbl->setOption(This,option,value)
#define IServerXMLHTTPRequest2_setProxy(This,proxySetting,varProxyServer,varBypassList) (This)->lpVtbl->setProxy(This,proxySetting,varProxyServer,varBypassList)
#define IServerXMLHTTPRequest2_setProxyCredentials(This,bstrUserName,bstrPassword) (This)->lpVtbl->setProxyCredentials(This,bstrUserName,bstrPassword)
#endif
#endif
    HRESULT WINAPI IServerXMLHTTPRequest2_setProxy_Proxy(IServerXMLHTTPRequest2 *This,SXH_PROXY_SETTING proxySetting,VARIANT varProxyServer,VARIANT varBypassList);
    void __RPC_STUB IServerXMLHTTPRequest2_setProxy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IServerXMLHTTPRequest2_setProxyCredentials_Proxy(IServerXMLHTTPRequest2 *This,BSTR bstrUserName,BSTR bstrPassword);
    void __RPC_STUB IServerXMLHTTPRequest2_setProxyCredentials_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMXNamespacePrefixes_INTERFACE_DEFINED__
#define __IMXNamespacePrefixes_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IMXNamespacePrefixes;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IMXNamespacePrefixes : public IDispatch {
    public:
      virtual HRESULT WINAPI get_item(long index,BSTR *prefix) = 0;
      virtual HRESULT WINAPI get_length(long *length) = 0;
      virtual HRESULT WINAPI get__newEnum(IUnknown **ppUnk) = 0;
    };
#else
    typedef struct IMXNamespacePrefixesVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IMXNamespacePrefixes *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IMXNamespacePrefixes *This);
	ULONG (WINAPI *Release)(IMXNamespacePrefixes *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IMXNamespacePrefixes *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IMXNamespacePrefixes *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IMXNamespacePrefixes *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IMXNamespacePrefixes *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *get_item)(IMXNamespacePrefixes *This,long index,BSTR *prefix);
	HRESULT (WINAPI *get_length)(IMXNamespacePrefixes *This,long *length);
	HRESULT (WINAPI *get__newEnum)(IMXNamespacePrefixes *This,IUnknown **ppUnk);
      END_INTERFACE
    } IMXNamespacePrefixesVtbl;
    struct IMXNamespacePrefixes {
      CONST_VTBL struct IMXNamespacePrefixesVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IMXNamespacePrefixes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMXNamespacePrefixes_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMXNamespacePrefixes_Release(This) (This)->lpVtbl->Release(This)
#define IMXNamespacePrefixes_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IMXNamespacePrefixes_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IMXNamespacePrefixes_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IMXNamespacePrefixes_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IMXNamespacePrefixes_get_item(This,index,prefix) (This)->lpVtbl->get_item(This,index,prefix)
#define IMXNamespacePrefixes_get_length(This,length) (This)->lpVtbl->get_length(This,length)
#define IMXNamespacePrefixes_get__newEnum(This,ppUnk) (This)->lpVtbl->get__newEnum(This,ppUnk)
#endif
#endif
    HRESULT WINAPI IMXNamespacePrefixes_get_item_Proxy(IMXNamespacePrefixes *This,long index,BSTR *prefix);
    void __RPC_STUB IMXNamespacePrefixes_get_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXNamespacePrefixes_get_length_Proxy(IMXNamespacePrefixes *This,long *length);
    void __RPC_STUB IMXNamespacePrefixes_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXNamespacePrefixes_get__newEnum_Proxy(IMXNamespacePrefixes *This,IUnknown **ppUnk);
    void __RPC_STUB IMXNamespacePrefixes_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IVBMXNamespaceManager_INTERFACE_DEFINED__
#define __IVBMXNamespaceManager_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IVBMXNamespaceManager;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IVBMXNamespaceManager : public IDispatch {
    public:
      virtual HRESULT WINAPI put_allowOverride(VARIANT_BOOL fOverride) = 0;
      virtual HRESULT WINAPI get_allowOverride(VARIANT_BOOL *fOverride) = 0;
      virtual HRESULT WINAPI reset(void) = 0;
      virtual HRESULT WINAPI pushContext(void) = 0;
      virtual HRESULT WINAPI pushNodeContext(IXMLDOMNode *contextNode,VARIANT_BOOL fDeep = -1) = 0;
      virtual HRESULT WINAPI popContext(void) = 0;
      virtual HRESULT WINAPI declarePrefix(BSTR prefix,BSTR namespaceURI) = 0;
      virtual HRESULT WINAPI getDeclaredPrefixes(IMXNamespacePrefixes **prefixes) = 0;
      virtual HRESULT WINAPI getPrefixes(BSTR namespaceURI,IMXNamespacePrefixes **prefixes) = 0;
      virtual HRESULT WINAPI getURI(BSTR prefix,VARIANT *uri) = 0;
      virtual HRESULT WINAPI getURIFromNode(BSTR strPrefix,IXMLDOMNode *contextNode,VARIANT *uri) = 0;
    };
#else
    typedef struct IVBMXNamespaceManagerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IVBMXNamespaceManager *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IVBMXNamespaceManager *This);
	ULONG (WINAPI *Release)(IVBMXNamespaceManager *This);
	HRESULT (WINAPI *GetTypeInfoCount)(IVBMXNamespaceManager *This,UINT *pctinfo);
	HRESULT (WINAPI *GetTypeInfo)(IVBMXNamespaceManager *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
	HRESULT (WINAPI *GetIDsOfNames)(IVBMXNamespaceManager *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
	HRESULT (WINAPI *Invoke)(IVBMXNamespaceManager *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
	HRESULT (WINAPI *put_allowOverride)(IVBMXNamespaceManager *This,VARIANT_BOOL fOverride);
	HRESULT (WINAPI *get_allowOverride)(IVBMXNamespaceManager *This,VARIANT_BOOL *fOverride);
	HRESULT (WINAPI *reset)(IVBMXNamespaceManager *This);
	HRESULT (WINAPI *pushContext)(IVBMXNamespaceManager *This);
	HRESULT (WINAPI *pushNodeContext)(IVBMXNamespaceManager *This,IXMLDOMNode *contextNode,VARIANT_BOOL fDeep);
	HRESULT (WINAPI *popContext)(IVBMXNamespaceManager *This);
	HRESULT (WINAPI *declarePrefix)(IVBMXNamespaceManager *This,BSTR prefix,BSTR namespaceURI);
	HRESULT (WINAPI *getDeclaredPrefixes)(IVBMXNamespaceManager *This,IMXNamespacePrefixes **prefixes);
	HRESULT (WINAPI *getPrefixes)(IVBMXNamespaceManager *This,BSTR namespaceURI,IMXNamespacePrefixes **prefixes);
	HRESULT (WINAPI *getURI)(IVBMXNamespaceManager *This,BSTR prefix,VARIANT *uri);
	HRESULT (WINAPI *getURIFromNode)(IVBMXNamespaceManager *This,BSTR strPrefix,IXMLDOMNode *contextNode,VARIANT *uri);
      END_INTERFACE
    } IVBMXNamespaceManagerVtbl;
    struct IVBMXNamespaceManager {
      CONST_VTBL struct IVBMXNamespaceManagerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IVBMXNamespaceManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVBMXNamespaceManager_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVBMXNamespaceManager_Release(This) (This)->lpVtbl->Release(This)
#define IVBMXNamespaceManager_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IVBMXNamespaceManager_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IVBMXNamespaceManager_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IVBMXNamespaceManager_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IVBMXNamespaceManager_put_allowOverride(This,fOverride) (This)->lpVtbl->put_allowOverride(This,fOverride)
#define IVBMXNamespaceManager_get_allowOverride(This,fOverride) (This)->lpVtbl->get_allowOverride(This,fOverride)
#define IVBMXNamespaceManager_reset(This) (This)->lpVtbl->reset(This)
#define IVBMXNamespaceManager_pushContext(This) (This)->lpVtbl->pushContext(This)
#define IVBMXNamespaceManager_pushNodeContext(This,contextNode,fDeep) (This)->lpVtbl->pushNodeContext(This,contextNode,fDeep)
#define IVBMXNamespaceManager_popContext(This) (This)->lpVtbl->popContext(This)
#define IVBMXNamespaceManager_declarePrefix(This,prefix,namespaceURI) (This)->lpVtbl->declarePrefix(This,prefix,namespaceURI)
#define IVBMXNamespaceManager_getDeclaredPrefixes(This,prefixes) (This)->lpVtbl->getDeclaredPrefixes(This,prefixes)
#define IVBMXNamespaceManager_getPrefixes(This,namespaceURI,prefixes) (This)->lpVtbl->getPrefixes(This,namespaceURI,prefixes)
#define IVBMXNamespaceManager_getURI(This,prefix,uri) (This)->lpVtbl->getURI(This,prefix,uri)
#define IVBMXNamespaceManager_getURIFromNode(This,strPrefix,contextNode,uri) (This)->lpVtbl->getURIFromNode(This,strPrefix,contextNode,uri)
#endif
#endif
    HRESULT WINAPI IVBMXNamespaceManager_put_allowOverride_Proxy(IVBMXNamespaceManager *This,VARIANT_BOOL fOverride);
    void __RPC_STUB IVBMXNamespaceManager_put_allowOverride_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBMXNamespaceManager_get_allowOverride_Proxy(IVBMXNamespaceManager *This,VARIANT_BOOL *fOverride);
    void __RPC_STUB IVBMXNamespaceManager_get_allowOverride_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBMXNamespaceManager_reset_Proxy(IVBMXNamespaceManager *This);
    void __RPC_STUB IVBMXNamespaceManager_reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBMXNamespaceManager_pushContext_Proxy(IVBMXNamespaceManager *This);
    void __RPC_STUB IVBMXNamespaceManager_pushContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBMXNamespaceManager_pushNodeContext_Proxy(IVBMXNamespaceManager *This,IXMLDOMNode *contextNode,VARIANT_BOOL fDeep);
    void __RPC_STUB IVBMXNamespaceManager_pushNodeContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBMXNamespaceManager_popContext_Proxy(IVBMXNamespaceManager *This);
    void __RPC_STUB IVBMXNamespaceManager_popContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBMXNamespaceManager_declarePrefix_Proxy(IVBMXNamespaceManager *This,BSTR prefix,BSTR namespaceURI);
    void __RPC_STUB IVBMXNamespaceManager_declarePrefix_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBMXNamespaceManager_getDeclaredPrefixes_Proxy(IVBMXNamespaceManager *This,IMXNamespacePrefixes **prefixes);
    void __RPC_STUB IVBMXNamespaceManager_getDeclaredPrefixes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBMXNamespaceManager_getPrefixes_Proxy(IVBMXNamespaceManager *This,BSTR namespaceURI,IMXNamespacePrefixes **prefixes);
    void __RPC_STUB IVBMXNamespaceManager_getPrefixes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBMXNamespaceManager_getURI_Proxy(IVBMXNamespaceManager *This,BSTR prefix,VARIANT *uri);
    void __RPC_STUB IVBMXNamespaceManager_getURI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IVBMXNamespaceManager_getURIFromNode_Proxy(IVBMXNamespaceManager *This,BSTR strPrefix,IXMLDOMNode *contextNode,VARIANT *uri);
    void __RPC_STUB IVBMXNamespaceManager_getURIFromNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMXNamespaceManager_INTERFACE_DEFINED__
#define __IMXNamespaceManager_INTERFACE_DEFINED__
    EXTERN_C const IID IID_IMXNamespaceManager;
#if defined(__cplusplus) && !defined(CINTERFACE)
    struct IMXNamespaceManager : public IUnknown {
    public:
      virtual HRESULT WINAPI putAllowOverride(VARIANT_BOOL fOverride) = 0;
      virtual HRESULT WINAPI getAllowOverride(VARIANT_BOOL *fOverride) = 0;
      virtual HRESULT WINAPI reset(void) = 0;
      virtual HRESULT WINAPI pushContext(void) = 0;
      virtual HRESULT WINAPI pushNodeContext(IXMLDOMNode *contextNode,VARIANT_BOOL fDeep) = 0;
      virtual HRESULT WINAPI popContext(void) = 0;
      virtual HRESULT WINAPI declarePrefix(const wchar_t *prefix,const wchar_t *namespaceURI) = 0;
      virtual HRESULT WINAPI getDeclaredPrefix(long nIndex,wchar_t *pwchPrefix,int *pcchPrefix) = 0;
      virtual HRESULT WINAPI getPrefix(const wchar_t *pwszNamespaceURI,long nIndex,wchar_t *pwchPrefix,int *pcchPrefix) = 0;
      virtual HRESULT WINAPI getURI(const wchar_t *pwchPrefix,IXMLDOMNode *pContextNode,wchar_t *pwchUri,int *pcchUri) = 0;
    };
#else
    typedef struct IMXNamespaceManagerVtbl {
      BEGIN_INTERFACE
	HRESULT (WINAPI *QueryInterface)(IMXNamespaceManager *This,REFIID riid,void **ppvObject);
	ULONG (WINAPI *AddRef)(IMXNamespaceManager *This);
	ULONG (WINAPI *Release)(IMXNamespaceManager *This);
	HRESULT (WINAPI *putAllowOverride)(IMXNamespaceManager *This,VARIANT_BOOL fOverride);
	HRESULT (WINAPI *getAllowOverride)(IMXNamespaceManager *This,VARIANT_BOOL *fOverride);
	HRESULT (WINAPI *reset)(IMXNamespaceManager *This);
	HRESULT (WINAPI *pushContext)(IMXNamespaceManager *This);
	HRESULT (WINAPI *pushNodeContext)(IMXNamespaceManager *This,IXMLDOMNode *contextNode,VARIANT_BOOL fDeep);
	HRESULT (WINAPI *popContext)(IMXNamespaceManager *This);
	HRESULT (WINAPI *declarePrefix)(IMXNamespaceManager *This,const wchar_t *prefix,const wchar_t *namespaceURI);
	HRESULT (WINAPI *getDeclaredPrefix)(IMXNamespaceManager *This,long nIndex,wchar_t *pwchPrefix,int *pcchPrefix);
	HRESULT (WINAPI *getPrefix)(IMXNamespaceManager *This,const wchar_t *pwszNamespaceURI,long nIndex,wchar_t *pwchPrefix,int *pcchPrefix);
	HRESULT (WINAPI *getURI)(IMXNamespaceManager *This,const wchar_t *pwchPrefix,IXMLDOMNode *pContextNode,wchar_t *pwchUri,int *pcchUri);
      END_INTERFACE
    } IMXNamespaceManagerVtbl;
    struct IMXNamespaceManager {
      CONST_VTBL struct IMXNamespaceManagerVtbl *lpVtbl;
    };
#ifdef COBJMACROS
#define IMXNamespaceManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMXNamespaceManager_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMXNamespaceManager_Release(This) (This)->lpVtbl->Release(This)
#define IMXNamespaceManager_putAllowOverride(This,fOverride) (This)->lpVtbl->putAllowOverride(This,fOverride)
#define IMXNamespaceManager_getAllowOverride(This,fOverride) (This)->lpVtbl->getAllowOverride(This,fOverride)
#define IMXNamespaceManager_reset(This) (This)->lpVtbl->reset(This)
#define IMXNamespaceManager_pushContext(This) (This)->lpVtbl->pushContext(This)
#define IMXNamespaceManager_pushNodeContext(This,contextNode,fDeep) (This)->lpVtbl->pushNodeContext(This,contextNode,fDeep)
#define IMXNamespaceManager_popContext(This) (This)->lpVtbl->popContext(This)
#define IMXNamespaceManager_declarePrefix(This,prefix,namespaceURI) (This)->lpVtbl->declarePrefix(This,prefix,namespaceURI)
#define IMXNamespaceManager_getDeclaredPrefix(This,nIndex,pwchPrefix,pcchPrefix) (This)->lpVtbl->getDeclaredPrefix(This,nIndex,pwchPrefix,pcchPrefix)
#define IMXNamespaceManager_getPrefix(This,pwszNamespaceURI,nIndex,pwchPrefix,pcchPrefix) (This)->lpVtbl->getPrefix(This,pwszNamespaceURI,nIndex,pwchPrefix,pcchPrefix)
#define IMXNamespaceManager_getURI(This,pwchPrefix,pContextNode,pwchUri,pcchUri) (This)->lpVtbl->getURI(This,pwchPrefix,pContextNode,pwchUri,pcchUri)
#endif
#endif
    HRESULT WINAPI IMXNamespaceManager_putAllowOverride_Proxy(IMXNamespaceManager *This,VARIANT_BOOL fOverride);
    void __RPC_STUB IMXNamespaceManager_putAllowOverride_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXNamespaceManager_getAllowOverride_Proxy(IMXNamespaceManager *This,VARIANT_BOOL *fOverride);
    void __RPC_STUB IMXNamespaceManager_getAllowOverride_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXNamespaceManager_reset_Proxy(IMXNamespaceManager *This);
    void __RPC_STUB IMXNamespaceManager_reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXNamespaceManager_pushContext_Proxy(IMXNamespaceManager *This);
    void __RPC_STUB IMXNamespaceManager_pushContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXNamespaceManager_pushNodeContext_Proxy(IMXNamespaceManager *This,IXMLDOMNode *contextNode,VARIANT_BOOL fDeep);
    void __RPC_STUB IMXNamespaceManager_pushNodeContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXNamespaceManager_popContext_Proxy(IMXNamespaceManager *This);
    void __RPC_STUB IMXNamespaceManager_popContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXNamespaceManager_declarePrefix_Proxy(IMXNamespaceManager *This,const wchar_t *prefix,const wchar_t *namespaceURI);
    void __RPC_STUB IMXNamespaceManager_declarePrefix_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXNamespaceManager_getDeclaredPrefix_Proxy(IMXNamespaceManager *This,long nIndex,wchar_t *pwchPrefix,int *pcchPrefix);
    void __RPC_STUB IMXNamespaceManager_getDeclaredPrefix_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXNamespaceManager_getPrefix_Proxy(IMXNamespaceManager *This,const wchar_t *pwszNamespaceURI,long nIndex,wchar_t *pwchPrefix,int *pcchPrefix);
    void __RPC_STUB IMXNamespaceManager_getPrefix_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
    HRESULT WINAPI IMXNamespaceManager_getURI_Proxy(IMXNamespaceManager *This,const wchar_t *pwchPrefix,IXMLDOMNode *pContextNode,wchar_t *pwchUri,int *pcchUri);
    void __RPC_STUB IMXNamespaceManager_getURI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

    EXTERN_C const CLSID CLSID_DOMDocument;
#ifdef __cplusplus
    class DOMDocument;
#endif
    EXTERN_C const CLSID CLSID_DOMDocument26;
#ifdef __cplusplus
    class DOMDocument26;
#endif
    EXTERN_C const CLSID CLSID_DOMDocument30;
#ifdef __cplusplus
    class DOMDocument30;
#endif
    EXTERN_C const CLSID CLSID_DOMDocument40;
#ifdef __cplusplus
    class DOMDocument40;
#endif
    EXTERN_C const CLSID CLSID_FreeThreadedDOMDocument;
#ifdef __cplusplus
    class FreeThreadedDOMDocument;
#endif
    EXTERN_C const CLSID CLSID_FreeThreadedDOMDocument26;
#ifdef __cplusplus
    class FreeThreadedDOMDocument26;
#endif
    EXTERN_C const CLSID CLSID_FreeThreadedDOMDocument30;
#ifdef __cplusplus
    class FreeThreadedDOMDocument30;
#endif
    EXTERN_C const CLSID CLSID_FreeThreadedDOMDocument40;
#ifdef __cplusplus
    class FreeThreadedDOMDocument40;
#endif
    EXTERN_C const CLSID CLSID_XMLSchemaCache;
#ifdef __cplusplus
    class XMLSchemaCache;
#endif
    EXTERN_C const CLSID CLSID_XMLSchemaCache26;
#ifdef __cplusplus
    class XMLSchemaCache26;
#endif
    EXTERN_C const CLSID CLSID_XMLSchemaCache30;
#ifdef __cplusplus
    class XMLSchemaCache30;
#endif
    EXTERN_C const CLSID CLSID_XMLSchemaCache40;
#ifdef __cplusplus
    class XMLSchemaCache40;
#endif
    EXTERN_C const CLSID CLSID_XSLTemplate;
#ifdef __cplusplus
    class XSLTemplate;
#endif
    EXTERN_C const CLSID CLSID_XSLTemplate26;
#ifdef __cplusplus
    class XSLTemplate26;
#endif
    EXTERN_C const CLSID CLSID_XSLTemplate30;
#ifdef __cplusplus
    class XSLTemplate30;
#endif
    EXTERN_C const CLSID CLSID_XSLTemplate40;
#ifdef __cplusplus
    class XSLTemplate40;
#endif
    EXTERN_C const CLSID CLSID_DSOControl;
#ifdef __cplusplus
    class DSOControl;
#endif
    EXTERN_C const CLSID CLSID_DSOControl26;
#ifdef __cplusplus
    class DSOControl26;
#endif
    EXTERN_C const CLSID CLSID_DSOControl30;
#ifdef __cplusplus
    class DSOControl30;
#endif
    EXTERN_C const CLSID CLSID_DSOControl40;
#ifdef __cplusplus
    class DSOControl40;
#endif
    EXTERN_C const CLSID CLSID_XMLHTTP;
#ifdef __cplusplus
    class XMLHTTP;
#endif
    EXTERN_C const CLSID CLSID_XMLHTTP26;
#ifdef __cplusplus
    class XMLHTTP26;
#endif
    EXTERN_C const CLSID CLSID_XMLHTTP30;
#ifdef __cplusplus
    class XMLHTTP30;
#endif
    EXTERN_C const CLSID CLSID_XMLHTTP40;
#ifdef __cplusplus
    class XMLHTTP40;
#endif
    EXTERN_C const CLSID CLSID_ServerXMLHTTP;
#ifdef __cplusplus
    class ServerXMLHTTP;
#endif
    EXTERN_C const CLSID CLSID_ServerXMLHTTP30;
#ifdef __cplusplus
    class ServerXMLHTTP30;
#endif
    EXTERN_C const CLSID CLSID_ServerXMLHTTP40;
#ifdef __cplusplus
    class ServerXMLHTTP40;
#endif
    EXTERN_C const CLSID CLSID_SAXXMLReader;
#ifdef __cplusplus
    class SAXXMLReader;
#endif
    EXTERN_C const CLSID CLSID_SAXXMLReader30;
#ifdef __cplusplus
    class SAXXMLReader30;
#endif
    EXTERN_C const CLSID CLSID_SAXXMLReader40;
#ifdef __cplusplus
    class SAXXMLReader40;
#endif
    EXTERN_C const CLSID CLSID_MXXMLWriter;
#ifdef __cplusplus
    class MXXMLWriter;
#endif
    EXTERN_C const CLSID CLSID_MXXMLWriter30;
#ifdef __cplusplus
    class MXXMLWriter30;
#endif
    EXTERN_C const CLSID CLSID_MXXMLWriter40;
#ifdef __cplusplus
    class MXXMLWriter40;
#endif
    EXTERN_C const CLSID CLSID_MXHTMLWriter;
#ifdef __cplusplus
    class MXHTMLWriter;
#endif
    EXTERN_C const CLSID CLSID_MXHTMLWriter30;
#ifdef __cplusplus
    class MXHTMLWriter30;
#endif
    EXTERN_C const CLSID CLSID_MXHTMLWriter40;
#ifdef __cplusplus
    class MXHTMLWriter40;
#endif
    EXTERN_C const CLSID CLSID_SAXAttributes;
#ifdef __cplusplus
    class SAXAttributes;
#endif
    EXTERN_C const CLSID CLSID_SAXAttributes30;
#ifdef __cplusplus
    class SAXAttributes30;
#endif
    EXTERN_C const CLSID CLSID_SAXAttributes40;
#ifdef __cplusplus
    class SAXAttributes40;
#endif
    EXTERN_C const CLSID CLSID_MXNamespaceManager;
#ifdef __cplusplus
    class MXNamespaceManager;
#endif
    EXTERN_C const CLSID CLSID_MXNamespaceManager40;
#ifdef __cplusplus
    class MXNamespaceManager40;
#endif
    EXTERN_C const CLSID CLSID_XMLDocument;
#ifdef __cplusplus
    class XMLDocument;
#endif
#endif

#define E_XML_NOTWF 0xC00CE223L
#define E_XML_NODTD 0xC00CE224L
#define E_XML_INVALID 0xC00CE225L
#define E_XML_BUFFERTOOSMALL 0xC00CE226L
#ifdef __USE_MSXML2_NAMESPACE__
  }
#endif

  extern RPC_IF_HANDLE __MIDL_itf_msxml2_0196_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_msxml2_0196_v0_0_s_ifspec;

#ifdef __cplusplus
}
#endif
#endif
