Announcement

Collapse

Forum Guidelines

This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.
See more
See less

SAX2 wrapper functions

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • SAX2 wrapper functions

    Wrapper functions for the SAX2 COM Visual Basic interfaces. Also implementations
    of the ContentHandler, ErrorHandler and DTDHandler interfaces and examples that
    show how to connect these dispatch interfaces to the SAX Reader.

    You will need to have MSXML 4.0 installed in your computer.


    ------------------


    [This message has been edited by José Roca (edited August 15, 2004).]
    Forum: http://www.jose.it-berater.org/smfforum/index.php

  • #2
    Save as DS_SAX.INC

    Code:
    ' ********************************************************************************************
    ' Library name: MSXML2
    ' Version: 4.0
    ' Documentation string: Microsoft XML, v4.0
    ' Path: C:\WINNT\system32\msxml4.dll
    ' Library GUID: {F5078F18-C551-11D3-89B9-0000F81FE221}
    ' ********************************************************************************************
    
    #INCLUDE "WIN32API.INC"
    
    MACRO SAX2_DLLNAME = "DS_SAX2.DLL"
    
    ' ********************************************************************************************
    ' EXCEPINFO structure
    ' ********************************************************************************************
    TYPE EXCEPINFO
       wCode AS WORD               ' An error code describing the error.
       wReserved AS WORD           ' Reserved
       bstrSource AS DWORD         ' Source of the exception.
       bstrDescription AS DWORD    ' Textual description of the error.
       bstrHelpFile AS DWORD       ' Help file path.
       dwHelpContext AS DWORD      ' Help context ID.
       pvReserved AS DWORD         ' Reserved.
       pfnDeferredFillIn AS DWORD  ' Pointer to function that fills in Help and description info.
       scode AS DWORD              ' An error code describing the error.
    END TYPE
    ' ********************************************************************************************
    
    ' ********************************************************************************************
    ' SAX2 COM/Visual Basic Interfaces
    ' ********************************************************************************************
    ' The Microsoft® COM/Visual Basic® implementation of the latest version of the Simple API
    ' for XML (SAX2) includes a handful of interfaces that map to the Java-based SAX2 standard,
    ' which was developed collaboratively by the members of the XML-DEV mailing list. The Visual
    ' Basic interfaces are wrappers that are based on the Microsoft XML Parser (MSXML) SAX2
    ' COM/C++ interfaces.
    
    ' The Microsoft COM implementation includes the following interfaces:
    
    '    * IMXAttributes : IDispatch
    '    * IMXReaderControl : IDispatch
    '    * IMXWriter : IDispatch
    '    * IVBSAXAttributes : IDispatch
    '    * IVBSAXContentHandler : IDispatch
    '    * IVBSAXDeclHandler : IDispatch
    '    * IVBSAXDTDHandler : IDispatch
    '    * IVBSAXEntityResolver : IDispatch
    '    * IVBSAXErrorHandler : IDispatch
    '    * IVBSAXLexicalHandler : IDispatch
    '    * IVBSAXLocator : IDispatch
    '    * IVBSAXXMLFilter : IDispatch
    '    * IVBSAXXMLReader : IDispatch
    
    ' You can find an implementation of the Java-based standard at [url="http://www.megginson.com/SAX/Java/index.html."]http://www.megginson.com/SAX/Java/index.html.[/url] 
    ' Other Resources
    ' [url="http://www.megginson.com/SAX/Java/index.html"]http://www.megginson.com/SAX/Java/index.html[/url] 
    ' ********************************************************************************************
    
    ' ********************************************************************************************
    ' ProgIDs
    ' ********************************************************************************************
    
    $PROGID_Msxml2SAXXMLReader = "Msxml2.SAXXMLReader"
    $PROGID_Msxml2SAXXMLReader30 = "Msxml2.SAXXMLReader.3.0"
    $PROGID_Msxml2SAXXMLReader40 = "Msxml2.SAXXMLReader.4.0"
    $PROGID_Msxml2SAXAttributes = "Msxml2.SAXAttributes"
    $PROGID_Msxml2SAXAttributes30 = "Msxml2.SAXAttributes.3.0"
    $PROGID_Msxml2SAXAttributes40 = "Msxml2.SAXAttributes.4.0"
    $PROGID_Msxml2MXXMLWriter = "Msxml2.MXXMLWriter"
    $PROGID_Msxml2MXXMLWriter30 = "Msxml2.MXXMLWriter.3.0"
    $PROGID_Msxml2MXXMLWriter40 = "Msxml2.MXXMLWriter.4.0"
    $PROGID_Msxml2MXHTMLWriter40 = "Msxml2.MXHTMLWriter.4.0"
    
    ' ********************************************************************************************
    DECLARE FUNCTION SaxError LIB SAX2_DLLNAME ALIAS "SaxError" () AS LONG
    DECLARE FUNCTION SaxResult LIB SAX2_DLLNAME ALIAS "SaxResult" () AS LONG
    DECLARE FUNCTION SAX_Release LIB SAX2_DLLNAME ALIAS "SAX_Release" (BYVAL pthis AS DWORD PTR) AS DWORD
    ' ********************************************************************************************
    
    ' ********************************************************************************************
    DECLARE FUNCTION NewSAXXMLReader LIB SAX2_DLLNAME ALIAS "NewSAXXMLReader" (OPTIONAL BYVAL strProgID AS STRING, BYVAL lContext AS LONG) AS DWORD
    DECLARE FUNCTION NewMXHTMLWriter LIB SAX2_DLLNAME ALIAS "NewMXHTMLWriter" (OPTIONAL BYVAL strProgID AS STRING, BYVAL lContext AS LONG) AS DWORD
    DECLARE FUNCTION NewMXXMLWriter LIB SAX2_DLLNAME ALIAS "NewMXXMLWriter" (OPTIONAL BYVAL strProgID AS STRING, BYVAL lContext AS LONG) AS DWORD
    DECLARE FUNCTION NewSAXAttributes LIB SAX2_DLLNAME ALIAS "NewSAXAttributes" (OPTIONAL BYVAL strProgID AS STRING, BYVAL lContext AS LONG) AS DWORD
    ' ********************************************************************************************
    
    ' ********************************************************************************************
    DECLARE SUB IMXAttributes_addAttribute LIB SAX2_DLLNAME ALIAS "IMXAttributes_addAttribute" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL strURI AS STRING, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL strLocalName AS STRING, _                            ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL strQName AS STRING, _                                ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL strType AS STRING, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL strValue AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IMXAttributes_addAttributeFromIndex LIB SAX2_DLLNAME ALIAS "IMXAttributes_addAttributeFromIndex" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL varAtts AS VARIANT, _                                ' [IN] VT_VARIANT <VARIANT>
        BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IMXAttributes_clear LIB SAX2_DLLNAME ALIAS "IMXAttributes_clear" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IMXAttributes_removeAttribute LIB SAX2_DLLNAME ALIAS "IMXAttributes_removeAttribute" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IMXAttributes_setAttribute LIB SAX2_DLLNAME ALIAS "IMXAttributes_setAttribute" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
        BYVAL strURI AS STRING, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL strLocalName AS STRING, _                            ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL strQName AS STRING, _                                ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL strType AS STRING, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL strValue AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IMXAttributes_setAttributes LIB SAX2_DLLNAME ALIAS "IMXAttributes_setAttributes" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL varAtts AS VARIANT _                                 ' [IN] VT_VARIANT <VARIANT>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IMXAttributes_setLocalName LIB SAX2_DLLNAME ALIAS "IMXAttributes_setLocalName" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
        BYVAL strLocalName AS STRING _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IMXAttributes_setQName LIB SAX2_DLLNAME ALIAS "IMXAttributes_setQName" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
        BYVAL strQName AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IMXAttributes_setType LIB SAX2_DLLNAME ALIAS "IMXAttributes_setType" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
        BYVAL strType AS STRING _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IMXAttributes_setURI LIB SAX2_DLLNAME ALIAS "IMXAttributes_setURI" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
        BYVAL strURI AS STRING _                                   ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IMXAttributes_setValue LIB SAX2_DLLNAME ALIAS "IMXAttributes_setValue" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
        BYVAL strValue AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    
    ' ********************************************************************************************
    DECLARE SUB IMXReaderControl_abort LIB SAX2_DLLNAME ALIAS "IMXReaderControl_abort" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IMXReaderControl_resume LIB SAX2_DLLNAME ALIAS "IMXReaderControl_resume" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IMXReaderControl_suspend LIB SAX2_DLLNAME ALIAS "IMXReaderControl_suspend" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    
    
    ' ********************************************************************************************
    DECLARE SUB IMXWriter_put_output LIB SAX2_DLLNAME ALIAS "IMXWriter_put_output" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL varoutput AS VARIANT _                               ' [IN] VT_VARIANT <VARIANT>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IMXWriter_get_output LIB SAX2_DLLNAME ALIAS "IMXWriter_get_output" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS DWORD                                                 ' VT_VARIANT <VARIANT>
    ' ********************************************************************************************
    DECLARE SUB IMXWriter_put_encoding LIB SAX2_DLLNAME ALIAS "IMXWriter_put_encoding" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL pbstrencoding AS STRING _                            ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IMXWriter_get_encoding LIB SAX2_DLLNAME ALIAS "IMXWriter_get_encoding" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE SUB IMXWriter_put_byteOrderMark LIB SAX2_DLLNAME ALIAS "IMXWriter_put_byteOrderMark" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL pfbyteOrderMark AS INTEGER _                         ' [IN] VT_BOOL <INTEGER>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IMXWriter_get_byteOrderMark LIB SAX2_DLLNAME ALIAS "IMXWriter_get_byteOrderMark" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS INTEGER                                               ' VT_BOOL <INTEGER>
    ' ********************************************************************************************
    DECLARE SUB IMXWriter_put_indent LIB SAX2_DLLNAME ALIAS "IMXWriter_put_indent" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL pfindent AS INTEGER _                                ' [IN] VT_BOOL <INTEGER>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IMXWriter_get_indent LIB SAX2_DLLNAME ALIAS "IMXWriter_get_indent" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS INTEGER                                               ' VT_BOOL <INTEGER>
    ' ********************************************************************************************
    DECLARE SUB IMXWriter_put_standalone LIB SAX2_DLLNAME ALIAS "IMXWriter_put_standalone" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL pfstandalone AS INTEGER _                            ' [IN] VT_BOOL <INTEGER>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IMXWriter_get_standalone LIB SAX2_DLLNAME ALIAS "IMXWriter_get_standalone" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS INTEGER                                               ' VT_BOOL <INTEGER>
    ' ********************************************************************************************
    DECLARE SUB IMXWriter_put_omitXMLDeclaration LIB SAX2_DLLNAME ALIAS "IMXWriter_put_omitXMLDeclaration" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL pfomitXMLDeclaration AS INTEGER _                    ' [IN] VT_BOOL <INTEGER>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IMXWriter_get_omitXMLDeclaration LIB SAX2_DLLNAME ALIAS "IMXWriter_get_omitXMLDeclaration" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS INTEGER                                               ' VT_BOOL <INTEGER>
    ' ********************************************************************************************
    DECLARE SUB IMXWriter_put_version LIB SAX2_DLLNAME ALIAS "IMXWriter_put_version" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL pbstrversion AS STRING _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IMXWriter_get_version LIB SAX2_DLLNAME ALIAS "IMXWriter_get_version" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE SUB IMXWriter_put_disableOutputEscaping LIB SAX2_DLLNAME ALIAS "IMXWriter_put_disableOutputEscaping" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL pfdisableOutputEscaping AS INTEGER _                 ' [IN] VT_BOOL <INTEGER>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IMXWriter_get_disableOutputEscaping LIB SAX2_DLLNAME ALIAS "IMXWriter_get_disableOutputEscaping" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS INTEGER                                               ' VT_BOOL <INTEGER>
    ' ********************************************************************************************
    DECLARE SUB IMXWriter_flush LIB SAX2_DLLNAME ALIAS "IMXWriter_flush" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXAttributes_get_length LIB SAX2_DLLNAME ALIAS "IVBSAXAttributes_get_length" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS LONG                                                  ' VT_INT <LONG>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXAttributes_getURI LIB SAX2_DLLNAME ALIAS "IVBSAXAttributes_getURI" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXAttributes_getLocalName LIB SAX2_DLLNAME ALIAS "IVBSAXAttributes_getLocalName" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXAttributes_getQName LIB SAX2_DLLNAME ALIAS "IVBSAXAttributes_getQName" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXAttributes_getIndexFromName LIB SAX2_DLLNAME ALIAS "IVBSAXAttributes_getIndexFromName" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL strURI AS STRING, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL strLocalName AS STRING _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        ) AS LONG                                                  ' VT_INT <LONG>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXAttributes_getIndexFromQName LIB SAX2_DLLNAME ALIAS "IVBSAXAttributes_getIndexFromQName" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL strQName AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        ) AS LONG                                                  ' VT_INT <LONG>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXAttributes_getType LIB SAX2_DLLNAME ALIAS "IVBSAXAttributes_getType" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXAttributes_getTypeFromName LIB SAX2_DLLNAME ALIAS "IVBSAXAttributes_getTypeFromName" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL strURI AS STRING, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL strLocalName AS STRING _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXAttributes_getTypeFromQName LIB SAX2_DLLNAME ALIAS "IVBSAXAttributes_getTypeFromQName" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL strQName AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXAttributes_getValue LIB SAX2_DLLNAME ALIAS "IVBSAXAttributes_getValue" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXAttributes_getValueFromName LIB SAX2_DLLNAME ALIAS "IVBSAXAttributes_getValueFromName" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL strURI AS STRING, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL strLocalName AS STRING _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXAttributes_getValueFromQName LIB SAX2_DLLNAME ALIAS "IVBSAXAttributes_getValueFromQName" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL strQName AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXEntityResolver_resolveEntity LIB SAX2_DLLNAME ALIAS "IVBSAXEntityResolver_resolveEntity" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYREF strPublicId AS STRING, _                             ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
        BYREF strSystemId AS STRING _                              ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
        ) AS DWORD                                                 ' VT_VARIANT <VARIANT>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXLocator_get_columnNumber LIB SAX2_DLLNAME ALIAS "IVBSAXLocator_get_columnNumber" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS LONG                                                  ' VT_INT <LONG>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXLocator_get_lineNumber LIB SAX2_DLLNAME ALIAS "IVBSAXLocator_get_lineNumber" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS LONG                                                  ' VT_INT <LONG>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXLocator_get_publicId LIB SAX2_DLLNAME ALIAS "IVBSAXLocator_get_publicId" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXLocator_get_systemId LIB SAX2_DLLNAME ALIAS "IVBSAXLocator_get_systemId" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXXMLFilter_get_parent LIB SAX2_DLLNAME ALIAS "IVBSAXXMLFilter_get_parent" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS DWORD                                                 ' VT_PTR <*IVBSAXXMLReader>
    ' ********************************************************************************************
    DECLARE SUB IVBSAXXMLFilter_putref_parent LIB SAX2_DLLNAME ALIAS "IVBSAXXMLFilter_putref_parent" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL prmparent AS DWORD _                                 ' [IN] <*IVBSAXXMLReader>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXXMLReader_getFeature LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_getFeature" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL strName AS STRING _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        ) AS INTEGER                                               ' VT_BOOL <INTEGER>
    ' ********************************************************************************************
    DECLARE SUB IVBSAXXMLReader_putFeature LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_putFeature" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL strName AS STRING, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL fValue AS INTEGER _                                  ' [IN] VT_BOOL <INTEGER>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXXMLReader_getProperty LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_getProperty" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL strName AS STRING _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        ) AS DWORD                                                 ' VT_VARIANT <VARIANT>
    ' ********************************************************************************************
    DECLARE SUB IVBSAXXMLReader_putProperty LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_putProperty" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL strName AS STRING, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        BYVAL varValue AS VARIANT _                                ' [IN] VT_VARIANT <VARIANT>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXXMLReader_get_entityResolver LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_get_entityResolver" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS DWORD                                                 ' VT_PTR <*IVBSAXEntityResolver>
    ' ********************************************************************************************
    DECLARE SUB IVBSAXXMLReader_putref_entityResolver LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_putref_entityResolver" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL prmentityResolver AS DWORD _                         ' [IN] <*IVBSAXEntityResolver>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXXMLReader_get_contentHandler LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_get_contentHandler" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS DWORD                                                 ' VT_PTR <*IVBSAXContentHandler>
    ' ********************************************************************************************
    DECLARE SUB IVBSAXXMLReader_putref_contentHandler LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_putref_contentHandler" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL prmcontentHandler AS DWORD _                         ' [IN] <*IVBSAXContentHandler>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXXMLReader_get_dtdHandler LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_get_dtdHandler" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS DWORD                                                 ' VT_PTR <*IVBSAXDTDHandler>
    ' ********************************************************************************************
    DECLARE SUB IVBSAXXMLReader_putref_dtdHandler LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_putref_dtdHandler" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL prmdtdHandler AS DWORD _                             ' [IN] <*IVBSAXDTDHandler>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXXMLReader_get_errorHandler LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_get_errorHandler" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS DWORD                                                 ' VT_PTR <*IVBSAXErrorHandler>
    ' ********************************************************************************************
    DECLARE SUB IVBSAXXMLReader_putref_errorHandler LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_putref_errorHandler" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL prmerrorHandler AS DWORD _                           ' [IN] <*IVBSAXErrorHandler>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXXMLReader_get_baseURL LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_get_baseURL" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE SUB IVBSAXXMLReader_put_baseURL LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_put_baseURL" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL pbstrbaseURL AS STRING _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE FUNCTION IVBSAXXMLReader_get_secureBaseURL LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_get_secureBaseURL" ( _
        BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
        ) AS STRING                                                ' VT_BSTR <DYNAMIC UNICODE STRING>
    ' ********************************************************************************************
    DECLARE SUB IVBSAXXMLReader_put_secureBaseURL LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_put_secureBaseURL" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL pbstrsecureBaseURL AS STRING _                       ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IVBSAXXMLReader_parse LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_parse" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL varInput AS VARIANT _                                ' [IN] VT_VARIANT <VARIANT>
        )                                                          ' VT_VOID
    ' ********************************************************************************************
    DECLARE SUB IVBSAXXMLReader_parseURL LIB SAX2_DLLNAME ALIAS "IVBSAXXMLReader_parseURL" ( _
        BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
        BYVAL strURL AS STRING _                                   ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
        )                                                          ' VT_VOID
    ' ********************************************************************************************

    ------------------




    [This message has been edited by José Roca (edited August 15, 2004).]
    Forum: http://www.jose.it-berater.org/smfforum/index.php

    Comment


    • #3
      Save as DS_SAX.BAS and compile it to make a DLL.

      Code:
      ' ********************************************************************************************
      ' Library name: MSXML2
      ' Version: 4.0
      ' Documentation string: Microsoft XML, v4.0
      ' Path: C:\WINNT\system32\msxml4.dll
      ' Library GUID: {F5078F18-C551-11D3-89B9-0000F81FE221}
      ' SED_PBWIN  - Compile with PBWIN
      ' ********************************************************************************************
      
      #DIM ALL
      #COMPILE DLL
      #INCLUDE "DS_SAX2.INC"
      
      ' ********************************************************************************************
      ' SAX2 COM/Visual Basic Interfaces
      ' ********************************************************************************************
      ' The Microsoft® COM/Visual Basic® implementation of the latest version of the Simple API
      ' for XML (SAX2) includes a handful of interfaces that map to the Java-based SAX2 standard,
      ' which was developed collaboratively by the members of the XML-DEV mailing list. The Visual
      ' Basic interfaces are wrappers that are based on the Microsoft XML Parser (MSXML) SAX2
      ' COM/C++ interfaces.
      
      ' The Microsoft COM implementation includes the following interfaces:
      
      '    * IMXAttributes : IDispatch
      '    * IMXReaderControl : IDispatch
      '    * IMXWriter : IDispatch
      '    * IVBSAXAttributes : IDispatch
      '    * IVBSAXContentHandler : IDispatch
      '    * IVBSAXDeclHandler : IDispatch
      '    * IVBSAXDTDHandler : IDispatch
      '    * IVBSAXEntityResolver : IDispatch
      '    * IVBSAXErrorHandler : IDispatch
      '    * IVBSAXLexicalHandler : IDispatch
      '    * IVBSAXLocator : IDispatch
      '    * IVBSAXXMLFilter : IDispatch
      '    * IVBSAXXMLReader : IDispatch
      
      ' You can find an implementation of the Java-based standard at [url="http://www.megginson.com/SAX/Java/index.html."]http://www.megginson.com/SAX/Java/index.html.[/url] 
      ' Other Resources
      ' [url="http://www.megginson.com/SAX/Java/index.html"]http://www.megginson.com/SAX/Java/index.html[/url] 
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' CoClasses
      ' ********************************************************************************************
      
      ' Name: SAXXMLReader
      ' CLSID: {079AA557-4A18-424A-8EEE-E39F0A8D41B9}
      ' Documentation string: SAX XML Reader (version independent) coclass
      ' ProgId: Msxml2.SAXXMLReader
      ' InprocServer32 = C:\WINNT\system32\msxml3.dll
      ' Default interface = IVBSAXXMLReader
      
      ' Name: SAXXMLReader30
      ' CLSID: {3124C396-FB13-4836-A6AD-1317F1713688}
      ' Documentation string: SAX XML Reader 3.0 coclass
      ' ProgId: Msxml2.SAXXMLReader.3.0
      ' Version independent ProgID = Msxml2.SAXXMLReader
      ' InprocServer32 = C:\WINNT\system32\msxml3.dll
      ' Default interface = IVBSAXXMLReader
      
      ' Name: SAXXMLReader40
      ' CLSID: {7C6E29BC-8B8B-4C3D-859E-AF6CD158BE0F}
      ' Documentation string: SAX XML Reader 4.0 coclass
      ' ProgId: Msxml2.SAXXMLReader.4.0
      ' InprocServer32 = C:\WINNT\system32\msxml4.dll
      ' Default interface = IVBSAXXMLReader
      
      ' Name: SAXAttributes30
      ' CLSID: {3E784A01-F3AE-4DC0-9354-9526B9370EBA}
      ' Documentation string: SAX Attributes 3.0 coclass
      ' ProgId: Msxml2.SAXAttributes.3.0
      ' Version independent ProgID = Msxml2.SAXAttributes
      ' InprocServer32 = C:\WINNT\system32\msxml3.dll
      ' Default interface = IMXAttributes
      
      ' Name: SAXAttributes40
      ' CLSID: {88D969CA-F192-11D4-A65F-0040963251E5}
      ' Documentation string: SAX Attributes 4.0 coclass
      ' ProgId: Msxml2.SAXAttributes.4.0
      ' InprocServer32 = C:\WINNT\system32\msxml4.dll
      ' Default interface = IMXAttributes
      
      ' Name: MXXMLWriter
      ' CLSID: {FC220AD8-A72A-4EE8-926E-0B7AD152A020}
      ' Documentation string: Microsoft XML Writer (version independent) coclass
      ' ProgId: Msxml2.MXXMLWriter
      ' InprocServer32 = C:\WINNT\system32\msxml3.dll
      ' Default interface = IMXWriter
      
      ' Name: MXXMLWriter30
      ' CLSID: {3D813DFE-6C91-4A4E-8F41-04346A841D9C}
      ' Documentation string: Microsoft XML Writer 3.0 coclass
      ' ProgId: Msxml2.MXXMLWriter.3.0
      ' Version independent ProgID = Msxml2.MXXMLWriter
      ' InprocServer32 = C:\WINNT\system32\msxml3.dll
      ' Default interface = IMXWriter
      
      ' Name: MXXMLWriter40
      ' CLSID: {88D969C8-F192-11D4-A65F-0040963251E5}
      ' Documentation string: Microsoft XML Writer 4.0 coclass
      ' ProgId: Msxml2.MXXMLWriter.4.0
      ' InprocServer32 = C:\WINNT\system32\msxml4.dll
      ' Default interface = IMXWriter
      
      ' Name: MXHTMLWriter
      ' CLSID: {A4C23EC3-6B70-4466-9127-550077239978}
      ' Documentation string: Microsoft HTML Writer (version independent) coclass
      ' Default interface = IMXWriter
      
      ' Name: MXHTMLWriter30
      ' CLSID: {853D1540-C1A7-4AA9-A226-4D3BD301146D}
      ' Documentation string: Microsoft HTML Writer 3.0 coclass
      ' Default interface = IMXWriter
      
      ' Name: MXHTMLWriter40
      ' CLSID: {88D969C9-F192-11D4-A65F-0040963251E5}
      ' Documentation string: Microsoft HTML Writer 4.0 coclass
      ' ProgId: Msxml2.MXHTMLWriter.4.0
      ' InprocServer32 = C:\WINNT\system32\msxml4.dll
      ' Default interface = IMXWriter
      
      
      ' ********************************************************************************************
      ' Global error variable
      ' ********************************************************************************************
      GLOBAL SAX_ERROR_HRESULT AS LONG
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' Returns a boolean value indicating if an error has happened
      ' ********************************************************************************************
      FUNCTION SaxError ALIAS "SaxError" () EXPORT AS LONG
          FUNCTION = ISTRUE SAX_ERROR_HRESULT
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' Returns the HRESULT code
      ' ********************************************************************************************
      FUNCTION SaxResult ALIAS "SaxResult" () EXPORT AS LONG
          FUNCTION = SAX_ERROR_HRESULT
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' Creates an instance of the SAXXMLReader class.
      ' StrProgID can be the ProgID or the ClsID. If you pass a version dependent ProgID or a ClsID,
      ' it will work only with this particular version. You can pass an empty string and the function
      ' will use the version independent ProgID, if it has been able to retrieve it, or the ClsID of
      ' the version you were using when you generated this file. Some components, such DAO, require
      ' that you use a version dependent ProgID.
      ' ********************************************************************************************
      FUNCTION NewSAXXMLReader ALIAS "NewSAXXMLReader" (OPTIONAL BYVAL strProgID AS STRING, BYVAL lContext AS LONG) EXPORT AS DWORD
          LOCAL ppv AS DWORD, CLSID_SAXXMLReader AS GUID, IID_IVBSAXXMLReader AS GUID
          IF ISFALSE lContext THEN lContext = 1  ' %CLSCTX_INPROC_SERVER - Component is allowed in the same process space.
          IF LEN(strProgID) THEN
             IF LEN(GUID$(strProgID)) THEN  ' It is a GUID
                CLSID_SAXXMLReader = GUID$(strProgID)
             ELSE
                CLSID_SAXXMLReader = CLSID$(strProgID)  ' It is a ProgID
             END IF
          ELSE
             ' Use the version independent ProgID
             CLSID_SAXXMLReader = CLSID$("Msxml2.SAXXMLReader")
          END IF
          IID_IVBSAXXMLReader = GUID$("{8C033CAA-6CD6-4F73-B728-4531AF74945F}")
          SAX_ERROR_HRESULT = CoCreateInstance (CLSID_SAXXMLReader, BYVAL %NULL, lContext, IID_IVBSAXXMLReader, ppv)
          FUNCTION = ppv
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' Creates an instance of the MXHTMLWriter40 class.
      ' StrProgID can be the ProgID or the ClsID. If you pass a version dependent ProgID or a ClsID,
      ' it will work only with this particular version. You can pass an empty string and the function
      ' will use the version independent ProgID, if it has been able to retrieve it, or the ClsID of
      ' the version you were using when you generated this file. Some components, such DAO, require
      ' that you use a version dependent ProgID.
      ' ********************************************************************************************
      FUNCTION NewMXHTMLWriter ALIAS "NewMXHTMLWriter" (OPTIONAL BYVAL strProgID AS STRING, BYVAL lContext AS LONG) EXPORT AS DWORD
          LOCAL ppv AS DWORD, CLSID_MXHTMLWriter AS GUID, IID_IMXWriter AS GUID
          IF ISFALSE lContext THEN lContext = 1  ' %CLSCTX_INPROC_SERVER - Component is allowed in the same process space.
          IF LEN(strProgID) THEN
             IF LEN(GUID$(strProgID)) THEN  ' It is a GUID
                CLSID_MXHTMLWriter = GUID$(strProgID)
             ELSE
                CLSID_MXHTMLWriter = CLSID$(strProgID)  ' It is a ProgID
             END IF
          ELSE
             ' Use the version independent ProgID
             CLSID_MXHTMLWriter = CLSID$("Msxml2.MXHTMLWriter")
          END IF
          IID_IMXWriter = GUID$("{4D7FF4BA-1565-4EA8-94E1-6E724A46F98D}")
          SAX_ERROR_HRESULT = CoCreateInstance (CLSID_MXHTMLWriter, BYVAL %NULL, lContext, IID_IMXWriter, ppv)
          FUNCTION = ppv
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' Creates an instance of the MXXMLWriter class.
      ' StrProgID can be the ProgID or the ClsID. If you pass a version dependent ProgID or a ClsID,
      ' it will work only with this particular version. You can pass an empty string and the function
      ' will use the version independent ProgID, if it has been able to retrieve it, or the ClsID of
      ' the version you were using when you generated this file. Some components, such DAO, require
      ' that you use a version dependent ProgID.
      ' ********************************************************************************************
      FUNCTION NewMXXMLWriter ALIAS "NewMXXMLWriter" (OPTIONAL BYVAL strProgID AS STRING, BYVAL lContext AS LONG) EXPORT AS DWORD
          LOCAL ppv AS DWORD, CLSID_MXXMLWriter AS GUID, IID_IMXWriter AS GUID
          IF ISFALSE lContext THEN lContext = 1  ' %CLSCTX_INPROC_SERVER - Component is allowed in the same process space.
          IF LEN(strProgID) THEN
             IF LEN(GUID$(strProgID)) THEN  ' It is a GUID
                CLSID_MXXMLWriter = GUID$(strProgID)
             ELSE
                CLSID_MXXMLWriter = CLSID$(strProgID)  ' It is a ProgID
             END IF
          ELSE
             ' Use the version independent ProgID
             CLSID_MXXMLWriter = CLSID$("Msxml2.MXXMLWriter")
          END IF
          IID_IMXWriter = GUID$("{4D7FF4BA-1565-4EA8-94E1-6E724A46F98D}")
          SAX_ERROR_HRESULT = CoCreateInstance (CLSID_MXXMLWriter, BYVAL %NULL, lContext, IID_IMXWriter, ppv)
          FUNCTION = ppv
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' Creates an instance of the SAXAttributes class.
      ' StrProgID can be the ProgID or the ClsID. If you pass a version dependent ProgID or a ClsID,
      ' it will work only with this particular version. You can pass an empty string and the function
      ' will use the version independent ProgID, if it has been able to retrieve it, or the ClsID of
      ' the version you were using when you generated this file. Some components, such DAO, require
      ' that you use a version dependent ProgID.
      ' ********************************************************************************************
      FUNCTION NewSAXAttributes ALIAS "NewSAXAttributes" (OPTIONAL BYVAL strProgID AS STRING, BYVAL lContext AS LONG) EXPORT AS DWORD
          LOCAL ppv AS DWORD, CLSID_SAXAttributes AS GUID, IID_IMXAttributes AS GUID
          IF ISFALSE lContext THEN lContext = 1  ' %CLSCTX_INPROC_SERVER - Component is allowed in the same process space.
          IF LEN(strProgID) THEN
             IF LEN(GUID$(strProgID)) THEN  ' It is a GUID
                CLSID_SAXAttributes = GUID$(strProgID)
             ELSE
                CLSID_SAXAttributes = CLSID$(strProgID)  ' It is a ProgID
             END IF
          ELSE
             ' Use the version independent ProgID
             CLSID_SAXAttributes = CLSID$("Msxml2.SAXAttributes")
          END IF
          IID_IMXAttributes = GUID$("{F10D27CC-3EC0-415C-8ED8-77AB1C5E7262}")
          SAX_ERROR_HRESULT = CoCreateInstance (CLSID_SAXAttributes, BYVAL %NULL, lContext, IID_IMXAttributes, ppv)
          FUNCTION = ppv
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' Decrements the reference count for the calling interface on a object. If the reference count
      ' on the object falls to 0, the object is freed from memory.
      ' Return Value:
      ' Returns the resulting value of the reference count, which is used for diagnostic/testing
      ' purposes only.
      ' ********************************************************************************************
      FUNCTION SAX_Release ALIAS "SAX_Release" (BYVAL pthis AS DWORD PTR) EXPORT AS DWORD
          LOCAL HRESULT AS DWORD
          CALL DWORD @@pthis[2] USING SAX_Release(pthis) TO HRESULT
          FUNCTION = HRESULT
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' IMXAttributes interface
      ' Documentation string: IMXAttributes interface
      ' IID: {F10D27CC-3EC0-415C-8ED8-77AB1C5E7262}
      ' Interface flags: &H10C0 [Dual] [Nonextensible] [Dispatchable]
      ' Member identifier: 46
      ' Number of functions: 18
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' addAttribute method
      ' Interface name: IMXAttributes
      ' Documentation string: Add an attribute to the end of the list.
      ' VTable offset: 28
      ' Member identifier: 1373
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXAttributes_addAttribute ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL strURI AS DWORD, _                                   ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strLocalName AS DWORD, _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strQName AS DWORD, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strType AS DWORD, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strValue AS DWORD _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXAttributes_addAttribute ALIAS "IMXAttributes_addAttribute" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL strURI AS STRING, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strLocalName AS STRING, _                            ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strQName AS STRING, _                                ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strType AS STRING, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strValue AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          strURI = UCODE$(strURI) : strLocalName = UCODE$(strLocalName)
          strQName = UCODE$(strQName) : strType = UCODE$(strType) : strValue = UCODE$(strValue)
          CALL DWORD @@pthis[7] USING Proto_IMXAttributes_addAttribute(pthis, STRPTR(strURI), STRPTR(strLocalName), STRPTR(strQName), STRPTR(strType), STRPTR(strValue)) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' addAttributeFromIndex method
      ' Interface name: IMXAttributes
      ' Documentation string: Add an attribute, whose value is equal to the indexed attribute in the input attributes object, to the end of the list.
      ' VTable offset: 32
      ' Member identifier: 1383
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXAttributes_addAttributeFromIndex ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL varAtts AS VARIANT, _                                ' [IN] VT_VARIANT <VARIANT>
          BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXAttributes_addAttributeFromIndex ALIAS "IMXAttributes_addAttributeFromIndex" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL varAtts AS VARIANT, _                                ' [IN] VT_VARIANT <VARIANT>
          BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          CALL DWORD @@pthis[8] USING Proto_IMXAttributes_addAttributeFromIndex(pthis, varAtts, nIndex) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' clear method
      ' Interface name: IMXAttributes
      ' Documentation string: Clear the attribute list for reuse.
      ' VTable offset: 36
      ' Member identifier: 1374
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXAttributes_clear ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXAttributes_clear ALIAS "IMXAttributes_clear" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          CALL DWORD @@pthis[9] USING Proto_IMXAttributes_clear(pthis) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' removeAttribute method
      ' Interface name: IMXAttributes
      ' Documentation string: Remove an attribute from the list.
      ' VTable offset: 40
      ' Member identifier: 1375
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXAttributes_removeAttribute ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXAttributes_removeAttribute ALIAS "IMXAttributes_removeAttribute" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          CALL DWORD @@pthis[10] USING Proto_IMXAttributes_removeAttribute(pthis, nIndex) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' setAttribute method
      ' Interface name: IMXAttributes
      ' Documentation string: Set an attribute in the list.
      ' VTable offset: 44
      ' Member identifier: 1376
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXAttributes_setAttribute ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
          BYVAL strURI AS DWORD, _                                   ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strLocalName AS DWORD, _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strQName AS DWORD, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strType AS DWORD, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strValue AS DWORD _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXAttributes_setAttribute ALIAS "IMXAttributes_setAttribute" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
          BYVAL strURI AS STRING, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strLocalName AS STRING, _                            ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strQName AS STRING, _                                ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strType AS STRING, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          BYVAL strValue AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          strURI = UCODE$(strURI) : strLocalName = UCODE$(strLocalName)
          strQName = UCODE$(strQName) : strType = UCODE$(strType) : strValue = UCODE$(strValue)
          CALL DWORD @@pthis[11] USING Proto_IMXAttributes_setAttribute(pthis, nIndex, STRPTR(strURI), STRPTR(strLocalName), STRPTR(strQName), STRPTR(strType), STRPTR(strValue)) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' setAttributes method
      ' Interface name: IMXAttributes
      ' Documentation string: Copy an entire Attributes object.
      ' VTable offset: 48
      ' Member identifier: 1377
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXAttributes_setAttributes ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL varAtts AS VARIANT _                                 ' [IN] VT_VARIANT <VARIANT>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXAttributes_setAttributes ALIAS "IMXAttributes_setAttributes" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL varAtts AS VARIANT _                                 ' [IN] VT_VARIANT <VARIANT>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          CALL DWORD @@pthis[12] USING Proto_IMXAttributes_setAttributes(pthis, varAtts) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' setLocalName method
      ' Interface name: IMXAttributes
      ' Documentation string: Set the local name of a specific attribute.
      ' VTable offset: 52
      ' Member identifier: 1378
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXAttributes_setLocalName ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
          BYVAL strLocalName AS DWORD _                              ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXAttributes_setLocalName ALIAS "IMXAttributes_setLocalName" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
          BYVAL strLocalName AS STRING _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          strLocalName = UCODE$(strLocalName)
          CALL DWORD @@pthis[13] USING Proto_IMXAttributes_setLocalName(pthis, nIndex, STRPTR(strLocalName)) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' setQName method
      ' Interface name: IMXAttributes
      ' Documentation string: Set the qualified name of a specific attribute.
      ' VTable offset: 56
      ' Member identifier: 1379
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXAttributes_setQName ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
          BYVAL strQName AS DWORD _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXAttributes_setQName ALIAS "IMXAttributes_setQName" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
          BYVAL strQName AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          strQName = UCODE$(strQName)
          CALL DWORD @@pthis[14] USING Proto_IMXAttributes_setQName(pthis, nIndex, STRPTR(strQName)) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' setType method
      ' Interface name: IMXAttributes
      ' Documentation string: Set the type of a specific attribute.
      ' VTable offset: 60
      ' Member identifier: 1380
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXAttributes_setType ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
          BYVAL strType AS DWORD _                                   ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXAttributes_setType ALIAS "IMXAttributes_setType" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
          BYVAL strType AS STRING _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          strType = UCODE$(strType)
          CALL DWORD @@pthis[15] USING Proto_IMXAttributes_setType(pthis, nIndex, STRPTR(strType)) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' setURI method
      ' Interface name: IMXAttributes
      ' Documentation string: Set the Namespace URI of a specific attribute.
      ' VTable offset: 64
      ' Member identifier: 1381
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXAttributes_setURI ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
          BYVAL strURI AS DWORD _                                    ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXAttributes_setURI ALIAS "IMXAttributes_setURI" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
          BYVAL strURI AS STRING _                                   ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          strURI = UCODE$(strURI)
          CALL DWORD @@pthis[16] USING Proto_IMXAttributes_setURI(pthis, nIndex, STRPTR(strURI)) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' setValue method
      ' Interface name: IMXAttributes
      ' Documentation string: Set the value of a specific attribute.
      ' VTable offset: 68
      ' Member identifier: 1382
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXAttributes_setValue ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
          BYVAL strValue AS DWORD _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXAttributes_setValue ALIAS "IMXAttributes_setValue" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
          BYVAL strValue AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          strValue = UCODE$(strValue)
          CALL DWORD @@pthis[17] USING Proto_IMXAttributes_setValue(pthis, nIndex, STRPTR(strValue)) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' IMXReaderControl interface
      ' Documentation string: IMXReaderControl interface
      ' IID: {808F4E35-8D5A-4FBE-8466-33A41279ED30}
      ' Interface flags: &H10C0 [Dual] [Nonextensible] [Dispatchable]
      ' Member identifier: 47
      ' Number of functions: 10
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' abort method
      ' Interface name: IMXReaderControl
      ' Documentation string: Abort the reader
      ' VTable offset: 28
      ' Member identifier: 1398
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXReaderControl_abort ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXReaderControl_abort ALIAS "IMXReaderControl_abort" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          CALL DWORD @@pthis[7] USING Proto_IMXReaderControl_abort(pthis) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' resume method
      ' Interface name: IMXReaderControl
      ' Documentation string: Resume the reader
      ' VTable offset: 32
      ' Member identifier: 1399
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXReaderControl_resume ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXReaderControl_resume ALIAS "IMXReaderControl_resume" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          CALL DWORD @@pthis[8] USING Proto_IMXReaderControl_resume(pthis) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' suspend method
      ' Interface name: IMXReaderControl
      ' Documentation string: Suspend the reader
      ' VTable offset: 36
      ' Member identifier: 1400
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXReaderControl_suspend ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXReaderControl_suspend ALIAS "IMXReaderControl_suspend" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          CALL DWORD @@pthis[9] USING Proto_IMXReaderControl_suspend(pthis) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' IMXWriter interface
      ' Documentation string: IMXWriter interface
      ' IID: {4D7FF4BA-1565-4EA8-94E1-6E724A46F98D}
      ' Interface flags: &H10C0 [Dual] [Nonextensible] [Dispatchable]
      ' Member identifier: 45
      ' Number of functions: 24
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Set]output property
      ' Interface name: IMXWriter
      ' Documentation string: Set or get the output.
      ' VTable offset: 28
      ' Member identifier: 1385
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_put_output ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL varoutput AS VARIANT _                               ' [IN] VT_VARIANT <VARIANT>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXWriter_put_output ALIAS "IMXWriter_put_output" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL varoutput AS VARIANT _                               ' [IN] VT_VARIANT <VARIANT>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          CALL DWORD @@pthis[7] USING Proto_IMXWriter_put_output(pthis, varoutput) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Get]output property
      ' Interface name: IMXWriter
      ' Documentation string: Set or get the output.
      ' VTable offset: 32
      ' Member identifier: 1385
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_get_output ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYREF pRetVal AS VARIANT _                                 ' [OUT] VT_VARIANT <VARIANT>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      FUNCTION IMXWriter_get_output ALIAS "IMXWriter_get_output" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT AS DWORD                                          ' VT_VARIANT <VARIANT>
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
          DIM pRetVal AS STATIC VARIANT  ' Declare it static and return is address as the result of the function
          pRetVal = EMPTY  ' Empty any previous contents
      
          CALL DWORD @@pthis[8] USING Proto_IMXWriter_get_output(pthis, pRetVal) TO SAX_ERROR_HRESULT
          FUNCTION = VARPTR(pRetVal)  ' Return the address of the variant as the result
      
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Set]encoding property
      ' Interface name: IMXWriter
      ' Documentation string: Set or get the output encoding.
      ' VTable offset: 36
      ' Member identifier: 1387
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_put_encoding ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pbstrencoding AS DWORD _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXWriter_put_encoding ALIAS "IMXWriter_put_encoding" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pbstrencoding AS STRING _                            ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          pbstrencoding = UCODE$(pbstrencoding)
          CALL DWORD @@pthis[9] USING Proto_IMXWriter_put_encoding(pthis, STRPTR(pbstrencoding)) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Get]encoding property
      ' Interface name: IMXWriter
      ' Documentation string: Set or get the output encoding.
      ' VTable offset: 40
      ' Member identifier: 1387
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_get_encoding ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      FUNCTION IMXWriter_get_encoding ALIAS "IMXWriter_get_encoding" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
          DIM pRetVal AS STRING
          CALL DWORD @@pthis[10] USING Proto_IMXWriter_get_encoding(pthis, pRetVal) TO SAX_ERROR_HRESULT
          FUNCTION = ACODE$(pRetVal)
      
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Set]byteOrderMark property
      ' Interface name: IMXWriter
      ' Documentation string: Determine whether or not to write the byte order mark
      ' VTable offset: 44
      ' Member identifier: 1388
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_put_byteOrderMark ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pfbyteOrderMark AS INTEGER _                         ' [IN] VT_BOOL <INTEGER>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXWriter_put_byteOrderMark ALIAS "IMXWriter_put_byteOrderMark" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pfbyteOrderMark AS INTEGER _                         ' [IN] VT_BOOL <INTEGER>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          IF pfbyteOrderMark <> 0 THEN pfbyteOrderMark = -1
          CALL DWORD @@pthis[11] USING Proto_IMXWriter_put_byteOrderMark(pthis, pfbyteOrderMark) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Get]byteOrderMark property
      ' Interface name: IMXWriter
      ' Documentation string: Determine whether or not to write the byte order mark
      ' VTable offset: 48
      ' Member identifier: 1388
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_get_byteOrderMark ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYREF pRetVal AS INTEGER _                                 ' [OUT] VT_BOOL <INTEGER>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      FUNCTION IMXWriter_get_byteOrderMark ALIAS "IMXWriter_get_byteOrderMark" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT AS INTEGER                                        ' VT_BOOL <INTEGER>
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
          DIM pRetVal AS INTEGER
          CALL DWORD @@pthis[12] USING Proto_IMXWriter_get_byteOrderMark(pthis, pRetVal) TO SAX_ERROR_HRESULT
          FUNCTION = pRetVal
      
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Set]indent property
      ' Interface name: IMXWriter
      ' Documentation string: Enable or disable auto indent mode.
      ' VTable offset: 52
      ' Member identifier: 1389
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_put_indent ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pfindent AS INTEGER _                                ' [IN] VT_BOOL <INTEGER>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXWriter_put_indent ALIAS "IMXWriter_put_indent" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pfindent AS INTEGER _                                ' [IN] VT_BOOL <INTEGER>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          IF pfindent <> 0 THEN pfindent = -1
          CALL DWORD @@pthis[13] USING Proto_IMXWriter_put_indent(pthis, pfindent) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Get]indent property
      ' Interface name: IMXWriter
      ' Documentation string: Enable or disable auto indent mode.
      ' VTable offset: 56
      ' Member identifier: 1389
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_get_indent ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYREF pRetVal AS INTEGER _                                 ' [OUT] VT_BOOL <INTEGER>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      FUNCTION IMXWriter_get_indent ALIAS "IMXWriter_get_indent" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT AS INTEGER                                        ' VT_BOOL <INTEGER>
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
          DIM pRetVal AS INTEGER
          CALL DWORD @@pthis[14] USING Proto_IMXWriter_get_indent(pthis, pRetVal) TO SAX_ERROR_HRESULT
          FUNCTION = pRetVal
      
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Set]standalone property
      ' Interface name: IMXWriter
      ' Documentation string: Set or get the standalone document declaration.
      ' VTable offset: 60
      ' Member identifier: 1390
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_put_standalone ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pfstandalone AS INTEGER _                            ' [IN] VT_BOOL <INTEGER>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXWriter_put_standalone ALIAS "IMXWriter_put_standalone" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pfstandalone AS INTEGER _                            ' [IN] VT_BOOL <INTEGER>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          IF pfstandalone <> 0 THEN pfstandalone = -1
          CALL DWORD @@pthis[15] USING Proto_IMXWriter_put_standalone(pthis, pfstandalone) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Get]standalone property
      ' Interface name: IMXWriter
      ' Documentation string: Set or get the standalone document declaration.
      ' VTable offset: 64
      ' Member identifier: 1390
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_get_standalone ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYREF pRetVal AS INTEGER _                                 ' [OUT] VT_BOOL <INTEGER>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      FUNCTION IMXWriter_get_standalone ALIAS "IMXWriter_get_standalone" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT AS INTEGER                                        ' VT_BOOL <INTEGER>
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
          DIM pRetVal AS INTEGER
          CALL DWORD @@pthis[16] USING Proto_IMXWriter_get_standalone(pthis, pRetVal) TO SAX_ERROR_HRESULT
          FUNCTION = pRetVal
      
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Set]omitXMLDeclaration property
      ' Interface name: IMXWriter
      ' Documentation string: Determine whether or not to omit the XML declaration.
      ' VTable offset: 68
      ' Member identifier: 1391
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_put_omitXMLDeclaration ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pfomitXMLDeclaration AS INTEGER _                    ' [IN] VT_BOOL <INTEGER>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXWriter_put_omitXMLDeclaration ALIAS "IMXWriter_put_omitXMLDeclaration" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pfomitXMLDeclaration AS INTEGER _                    ' [IN] VT_BOOL <INTEGER>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          IF pfomitXMLDeclaration <> 0 THEN pfomitXMLDeclaration = -1
          CALL DWORD @@pthis[17] USING Proto_IMXWriter_put_omitXMLDeclaration(pthis, pfomitXMLDeclaration) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Get]omitXMLDeclaration property
      ' Interface name: IMXWriter
      ' Documentation string: Determine whether or not to omit the XML declaration.
      ' VTable offset: 72
      ' Member identifier: 1391
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_get_omitXMLDeclaration ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYREF pRetVal AS INTEGER _                                 ' [OUT] VT_BOOL <INTEGER>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      FUNCTION IMXWriter_get_omitXMLDeclaration ALIAS "IMXWriter_get_omitXMLDeclaration" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT AS INTEGER                                        ' VT_BOOL <INTEGER>
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
          DIM pRetVal AS INTEGER
          CALL DWORD @@pthis[18] USING Proto_IMXWriter_get_omitXMLDeclaration(pthis, pRetVal) TO SAX_ERROR_HRESULT
          FUNCTION = pRetVal
      
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Set]version property
      ' Interface name: IMXWriter
      ' Documentation string: Set or get the xml version info.
      ' VTable offset: 76
      ' Member identifier: 1392
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_put_version ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pbstrversion AS DWORD _                              ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXWriter_put_version ALIAS "IMXWriter_put_version" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pbstrversion AS STRING _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          pbstrversion = UCODE$(pbstrversion)
          CALL DWORD @@pthis[19] USING Proto_IMXWriter_put_version(pthis, STRPTR(pbstrversion)) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Get]version property
      ' Interface name: IMXWriter
      ' Documentation string: Set or get the xml version info.
      ' VTable offset: 80
      ' Member identifier: 1392
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_get_version ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      FUNCTION IMXWriter_get_version ALIAS "IMXWriter_get_version" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
          DIM pRetVal AS STRING
          CALL DWORD @@pthis[20] USING Proto_IMXWriter_get_version(pthis, pRetVal) TO SAX_ERROR_HRESULT
          FUNCTION = ACODE$(pRetVal)
      
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Set]disableOutputEscaping property
      ' Interface name: IMXWriter
      ' Documentation string: When enabled, the writer no longer escapes out its input when writing it out.
      ' VTable offset: 84
      ' Member identifier: 1393
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_put_disableOutputEscaping ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pfdisableOutputEscaping AS INTEGER _                 ' [IN] VT_BOOL <INTEGER>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXWriter_put_disableOutputEscaping ALIAS "IMXWriter_put_disableOutputEscaping" ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYVAL pfdisableOutputEscaping AS INTEGER _                 ' [IN] VT_BOOL <INTEGER>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          IF pfdisableOutputEscaping <> 0 THEN pfdisableOutputEscaping = -1
          CALL DWORD @@pthis[21] USING Proto_IMXWriter_put_disableOutputEscaping(pthis, pfdisableOutputEscaping) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' [Get]disableOutputEscaping property
      ' Interface name: IMXWriter
      ' Documentation string: When enabled, the writer no longer escapes out its input when writing it out.
      ' VTable offset: 88
      ' Member identifier: 1393
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_get_disableOutputEscaping ( _
          BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
          BYREF pRetVal AS INTEGER _                                 ' [OUT] VT_BOOL <INTEGER>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      FUNCTION IMXWriter_get_disableOutputEscaping ALIAS "IMXWriter_get_disableOutputEscaping" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT AS INTEGER                                        ' VT_BOOL <INTEGER>
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
          DIM pRetVal AS INTEGER
          CALL DWORD @@pthis[22] USING Proto_IMXWriter_get_disableOutputEscaping(pthis, pRetVal) TO SAX_ERROR_HRESULT
          FUNCTION = pRetVal
      
      END FUNCTION
      ' ********************************************************************************************
      
      ' ********************************************************************************************
      ' flush method
      ' Interface name: IMXWriter
      ' Documentation string: Flushes all writer buffers forcing the writer to write to the underlying output object
      ' VTable offset: 92
      ' Member identifier: 1394
      ' ********************************************************************************************
      DECLARE FUNCTION Proto_IMXWriter_flush ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) AS LONG                                                  ' VT_HRESULT <LONG>
      
      SUB IMXWriter_flush ALIAS "IMXWriter_flush" ( _
          BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
          ) EXPORT                                                   ' VT_VOID
      
          IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
          CALL DWORD @@pthis[23] USING Proto_IMXWriter_flush(pthis) TO SAX_ERROR_HRESULT
      
      END SUB
      ' ********************************************************************************************

      ------------------
      Forum: http://www.jose.it-berater.org/smfforum/index.php

      Comment


      • #4
        Paste after the code posted above

        Code:
        ' ********************************************************************************************
        ' IVBSAXAttributes interface
        ' Documentation string: IVBSAXAttributes interface
        ' IID: {10DC0586-132B-4CAC-8BB3-DB00AC8B7EE0}
        ' Interface flags: &H10C0 [Dual] [Nonextensible] [Dispatchable]
        ' Member identifier: 39
        ' Number of functions: 19
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Get]length property
        ' Interface name: IVBSAXAttributes
        ' Documentation string: Get the number of attributes in the list.
        ' VTable offset: 28
        ' Member identifier: 1344
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXAttributes_get_length ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF pRetVal AS LONG _                                    ' [OUT] VT_INT <LONG>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXAttributes_get_length ALIAS "IVBSAXAttributes_get_length" ( _
            BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
            ) EXPORT AS LONG                                           ' VT_INT <LONG>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS LONG
            CALL DWORD @@pthis[7] USING Proto_IVBSAXAttributes_get_length(pthis, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = pRetVal
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getURI method
        ' Interface name: IVBSAXAttributes
        ' Documentation string: Look up an attribute's Namespace URI by index.
        ' VTable offset: 32
        ' Member identifier: 1345
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXAttributes_getURI ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXAttributes_getURI ALIAS "IVBSAXAttributes_getURI" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[8] USING Proto_IVBSAXAttributes_getURI(pthis, nIndex, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getLocalName method
        ' Interface name: IVBSAXAttributes
        ' Documentation string: Look up an attribute's local name by index.
        ' VTable offset: 36
        ' Member identifier: 1346
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXAttributes_getLocalName ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXAttributes_getLocalName ALIAS "IVBSAXAttributes_getLocalName" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[9] USING Proto_IVBSAXAttributes_getLocalName(pthis, nIndex, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getQName method
        ' Interface name: IVBSAXAttributes
        ' Documentation string: Look up an attribute's XML 1.0 qualified name by index.
        ' VTable offset: 40
        ' Member identifier: 1347
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXAttributes_getQName ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXAttributes_getQName ALIAS "IVBSAXAttributes_getQName" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[10] USING Proto_IVBSAXAttributes_getQName(pthis, nIndex, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getIndexFromName method
        ' Interface name: IVBSAXAttributes
        ' Documentation string: Look up the index of an attribute by Namespace name.
        ' VTable offset: 44
        ' Member identifier: 1348
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXAttributes_getIndexFromName ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strURI AS DWORD, _                                   ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYVAL strLocalName AS DWORD, _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYREF pRetVal AS LONG _                                    ' [OUT] VT_INT <LONG>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXAttributes_getIndexFromName ALIAS "IVBSAXAttributes_getIndexFromName" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strURI AS STRING, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYVAL strLocalName AS STRING _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) EXPORT AS LONG                                           ' VT_INT <LONG>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            strURI = UCODE$(strURI) : strLocalName = UCODE$(strLocalName)
            DIM pRetVal AS LONG
            CALL DWORD @@pthis[11] USING Proto_IVBSAXAttributes_getIndexFromName(pthis, STRPTR(strURI), STRPTR(strLocalName), pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = pRetVal
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getIndexFromQName method
        ' Interface name: IVBSAXAttributes
        ' Documentation string: Look up the index of an attribute by XML 1.0 qualified name.
        ' VTable offset: 48
        ' Member identifier: 1349
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXAttributes_getIndexFromQName ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strQName AS DWORD, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYREF pRetVal AS LONG _                                    ' [OUT] VT_INT <LONG>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXAttributes_getIndexFromQName ALIAS "IVBSAXAttributes_getIndexFromQName" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strQName AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) EXPORT AS LONG                                           ' VT_INT <LONG>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            strQName = UCODE$(strQName)
            DIM pRetVal AS LONG
            CALL DWORD @@pthis[12] USING Proto_IVBSAXAttributes_getIndexFromQName(pthis, STRPTR(strQName), pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = pRetVal
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getType method
        ' Interface name: IVBSAXAttributes
        ' Documentation string: Look up an attribute's type by index.
        ' VTable offset: 52
        ' Member identifier: 1350
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXAttributes_getType ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXAttributes_getType ALIAS "IVBSAXAttributes_getType" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[13] USING Proto_IVBSAXAttributes_getType(pthis, nIndex, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getTypeFromName method
        ' Interface name: IVBSAXAttributes
        ' Documentation string: Look up an attribute's type by Namespace name.
        ' VTable offset: 56
        ' Member identifier: 1351
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXAttributes_getTypeFromName ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strURI AS DWORD, _                                   ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYVAL strLocalName AS DWORD, _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXAttributes_getTypeFromName ALIAS "IVBSAXAttributes_getTypeFromName" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strURI AS STRING, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYVAL strLocalName AS STRING _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            strURI = UCODE$(strURI) : strLocalName = UCODE$(strLocalName)
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[14] USING Proto_IVBSAXAttributes_getTypeFromName(pthis, STRPTR(strURI), STRPTR(strLocalName), pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getTypeFromQName method
        ' Interface name: IVBSAXAttributes
        ' Documentation string: Look up an attribute's type by XML 1.0 qualified name.
        ' VTable offset: 60
        ' Member identifier: 1352
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXAttributes_getTypeFromQName ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strQName AS DWORD, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXAttributes_getTypeFromQName ALIAS "IVBSAXAttributes_getTypeFromQName" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strQName AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            strQName = UCODE$(strQName)
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[15] USING Proto_IVBSAXAttributes_getTypeFromQName(pthis, STRPTR(strQName), pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getValue method
        ' Interface name: IVBSAXAttributes
        ' Documentation string: Look up an attribute's value by index.
        ' VTable offset: 64
        ' Member identifier: 1353
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXAttributes_getValue ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL nIndex AS LONG, _                                    ' [IN] VT_INT <LONG>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXAttributes_getValue ALIAS "IVBSAXAttributes_getValue" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL nIndex AS LONG _                                     ' [IN] VT_INT <LONG>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[16] USING Proto_IVBSAXAttributes_getValue(pthis, nIndex, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getValueFromName method
        ' Interface name: IVBSAXAttributes
        ' Documentation string: Look up an attribute's value by Namespace name.
        ' VTable offset: 68
        ' Member identifier: 1354
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXAttributes_getValueFromName ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strURI AS DWORD, _                                   ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYVAL strLocalName AS DWORD, _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXAttributes_getValueFromName ALIAS "IVBSAXAttributes_getValueFromName" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strURI AS STRING, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYVAL strLocalName AS STRING _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            strURI = UCODE$(strURI) : strLocalName = UCODE$(strLocalName)
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[17] USING Proto_IVBSAXAttributes_getValueFromName(pthis, STRPTR(strURI), STRPTR(strLocalName), pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getValueFromQName method
        ' Interface name: IVBSAXAttributes
        ' Documentation string: Look up an attribute's value by XML 1.0 qualified name.
        ' VTable offset: 72
        ' Member identifier: 1355
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXAttributes_getValueFromQName ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strQName AS DWORD, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXAttributes_getValueFromQName ALIAS "IVBSAXAttributes_getValueFromQName" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strQName AS STRING _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            strQName = UCODE$(strQName)
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[18] USING Proto_IVBSAXAttributes_getValueFromQName(pthis, STRPTR(strQName), pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' IVBSAXEntityResolver interface
        ' Documentation string: IVBSAXEntityResolver interface
        ' IID: {0C05D096-F45B-4ACA-AD1A-AA0BC25518DC}
        ' Interface flags: &H10C0 [Dual] [Nonextensible] [Dispatchable]
        ' Member identifier: 36
        ' Number of functions: 8
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' resolveEntity method
        ' Interface name: IVBSAXEntityResolver
        ' Documentation string: Allow the application to resolve external entities.
        ' VTable offset: 28
        ' Member identifier: 1319
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXEntityResolver_resolveEntity ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF strPublicId AS STRING, _                             ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
            BYREF strSystemId AS STRING, _                             ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
            BYREF pRetVal AS VARIANT _                                 ' [OUT] VT_VARIANT <VARIANT>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXEntityResolver_resolveEntity ALIAS "IVBSAXEntityResolver_resolveEntity" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF strPublicId AS STRING, _                             ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
            BYREF strSystemId AS STRING _                              ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
            ) EXPORT AS DWORD                                          ' VT_VARIANT <VARIANT>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS STATIC VARIANT  ' Declare it static and return is address as the result of the function
            pRetVal = EMPTY  ' Empty any previous contents
            CALL DWORD @@pthis[7] USING Proto_IVBSAXEntityResolver_resolveEntity(pthis, strPublicId, strSystemId, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = VARPTR(pRetVal)  ' Return the address of the variant as the result
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' IVBSAXLocator interface
        ' Documentation string: IVBSAXLocator interface
        ' IID: {796E7AC5-5AA2-4EFF-ACAD-3FAAF01A3288}
        ' Interface flags: &H10C0 [Dual] [Nonextensible] [Dispatchable]
        ' Member identifier: 38
        ' Number of functions: 11
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Get]columnNumber property
        ' Interface name: IVBSAXLocator
        ' Documentation string: Get the column number where the current document event ends.
        ' VTable offset: 28
        ' Member identifier: 1313
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXLocator_get_columnNumber ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF pRetVal AS LONG _                                    ' [OUT] VT_INT <LONG>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXLocator_get_columnNumber ALIAS "IVBSAXLocator_get_columnNumber" ( _
            BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
            ) EXPORT AS LONG                                           ' VT_INT <LONG>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS LONG
            CALL DWORD @@pthis[7] USING Proto_IVBSAXLocator_get_columnNumber(pthis, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = pRetVal
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Get]lineNumber property
        ' Interface name: IVBSAXLocator
        ' Documentation string: Get the line number where the current document event ends.
        ' VTable offset: 32
        ' Member identifier: 1314
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXLocator_get_lineNumber ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF pRetVal AS LONG _                                    ' [OUT] VT_INT <LONG>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXLocator_get_lineNumber ALIAS "IVBSAXLocator_get_lineNumber" ( _
            BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
            ) EXPORT AS LONG                                           ' VT_INT <LONG>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS LONG
            CALL DWORD @@pthis[8] USING Proto_IVBSAXLocator_get_lineNumber(pthis, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = pRetVal
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Get]publicId property
        ' Interface name: IVBSAXLocator
        ' Documentation string: Get the public identifier for the current document event.
        ' VTable offset: 36
        ' Member identifier: 1315
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXLocator_get_publicId ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXLocator_get_publicId ALIAS "IVBSAXLocator_get_publicId" ( _
            BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[9] USING Proto_IVBSAXLocator_get_publicId(pthis, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Get]systemId property
        ' Interface name: IVBSAXLocator
        ' Documentation string: Get the system identifier for the current document event.
        ' VTable offset: 40
        ' Member identifier: 1316
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXLocator_get_systemId ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXLocator_get_systemId ALIAS "IVBSAXLocator_get_systemId" ( _
            BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[10] USING Proto_IVBSAXLocator_get_systemId(pthis, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        
        ' ********************************************************************************************
        ' IVBSAXXMLFilter interface
        ' Documentation string: IVBSAXXMLFilter interface
        ' IID: {1299EB1B-5B88-433E-82DE-82CA75AD4E04}
        ' Interface flags: &H10C0 [Dual] [Nonextensible] [Dispatchable]
        ' Member identifier: 42
        ' Number of functions: 9
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Get]parent property
        ' Interface name: IVBSAXXMLFilter
        ' Documentation string: Set or get the parent reader
        ' VTable offset: 28
        ' Member identifier: 1309
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLFilter_get_parent ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF pRetVal AS DWORD _                                   ' [OUT] VT_PTR <*IVBSAXXMLReader>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXXMLFilter_get_parent ALIAS "IVBSAXXMLFilter_get_parent" ( _
            BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
            ) EXPORT AS DWORD                                          ' VT_PTR <*IVBSAXXMLReader>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS DWORD
            CALL DWORD @@pthis[7] USING Proto_IVBSAXXMLFilter_get_parent(pthis, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = pRetVal
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [PutRef]parent property
        ' Interface name: IVBSAXXMLFilter
        ' Documentation string: Set or get the parent reader
        ' VTable offset: 32
        ' Member identifier: 1309
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLFilter_putref_parent ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL prmparent AS DWORD _                                 ' [IN] <*IVBSAXXMLReader>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        SUB IVBSAXXMLFilter_putref_parent ALIAS "IVBSAXXMLFilter_putref_parent" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL prmparent AS DWORD _                                 ' [IN] <*IVBSAXXMLReader>
            ) EXPORT                                                   ' VT_VOID
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
            CALL DWORD @@pthis[8] USING Proto_IVBSAXXMLFilter_putref_parent(pthis, prmparent) TO SAX_ERROR_HRESULT
        
        END SUB
        ' ********************************************************************************************
        
        
        ' ********************************************************************************************
        ' IVBSAXXMLReader interface
        ' Documentation string: IVBSAXXMLReader interface
        ' IID: {8C033CAA-6CD6-4F73-B728-4531AF74945F}
        ' Interface flags: &H10C0 [Dual] [Nonextensible] [Dispatchable]
        ' Member identifier: 35
        ' Number of functions: 25
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' Features handled and recognized by SAXXMLReader are:
        '
        '    * "exhaustive-errors"
        '    * "http://xml.org/sax/features/external-general-entities"
        '    * "http://xml.org/sax/features/external-parameter-entities"
        '    * "http://xml.org/sax/features/lexical-handler/parameter-entities"
        '    * "http://xml.org/sax/features/namespaces"
        '    * "http://xml.org/sax/features/namespace-prefixes"
        '    * "preserve-system-identifiers"
        '    * "schema-validation"
        '    * "server-http-request"
        '
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' Properties handled and recognized by SAXXMLReader are:
        '
        '    * "http://xml.org/sax/properties/lexical-handler"
        '    * "http://xml.org/sax/properties/declaration-handler"
        '    * "http://xml.org/sax/properties/dom-node"
        '    * "schemas"
        '    * "schema-declaration-handler"
        '    * "charset"
        '    * "xmldecl-encoding"
        '    * "xmldecl-version"
        '    * "xmldecl-standalone"
        '
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getFeature method
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Look up the value of a feature.
        ' VTable offset: 28
        ' Member identifier: 1282
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_getFeature ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strName AS DWORD, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYREF pRetVal AS INTEGER _                                 ' [OUT] VT_BOOL <INTEGER>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXXMLReader_getFeature ALIAS "IVBSAXXMLReader_getFeature" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strName AS STRING _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) EXPORT AS INTEGER                                        ' VT_BOOL <INTEGER>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            strName = UCODE$(strName)
            DIM pRetVal AS INTEGER
            CALL DWORD @@pthis[7] USING Proto_IVBSAXXMLReader_getFeature(pthis, STRPTR(strName), pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = pRetVal
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' putFeature method
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Set the state of a feature.
        ' VTable offset: 32
        ' Member identifier: 1283
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_putFeature ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strName AS DWORD, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYVAL fValue AS INTEGER _                                  ' [IN] VT_BOOL <INTEGER>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        SUB IVBSAXXMLReader_putFeature ALIAS "IVBSAXXMLReader_putFeature" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strName AS STRING, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYVAL fValue AS INTEGER _                                  ' [IN] VT_BOOL <INTEGER>
            ) EXPORT                                                   ' VT_VOID
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
            strName = UCODE$(strName)
            IF fValue <> 0 THEN fValue = -1
            CALL DWORD @@pthis[8] USING Proto_IVBSAXXMLReader_putFeature(pthis, STRPTR(strName), fValue) TO SAX_ERROR_HRESULT
        
        END SUB
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' getProperty method
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Look up the value of a property.
        ' VTable offset: 36
        ' Member identifier: 1284
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_getProperty ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strName AS DWORD, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYREF pRetVal AS VARIANT _                                 ' [OUT] VT_VARIANT <VARIANT>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXXMLReader_getProperty ALIAS "IVBSAXXMLReader_getProperty" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strName AS STRING _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) EXPORT AS DWORD                                          ' VT_VARIANT <VARIANT>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            strName = UCODE$(strName)
            DIM pRetVal AS STATIC VARIANT  ' Declare it static and return is address as the result of the function
            pRetVal = EMPTY  ' Empty any previous contents
            CALL DWORD @@pthis[9] USING Proto_IVBSAXXMLReader_getProperty(pthis, STRPTR(strName), pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = VARPTR(pRetVal)  ' Return the address of the variant as the result
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' putProperty method
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Set the value of a property.
        ' VTable offset: 40
        ' Member identifier: 1285
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_putProperty ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strName AS DWORD, _                                  ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYVAL varValue AS VARIANT _                                ' [IN] VT_VARIANT <VARIANT>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        SUB IVBSAXXMLReader_putProperty ALIAS "IVBSAXXMLReader_putProperty" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strName AS STRING, _                                 ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            BYVAL varValue AS VARIANT _                                ' [IN] VT_VARIANT <VARIANT>
            ) EXPORT                                                   ' VT_VOID
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
            strName = UCODE$(strName)
            CALL DWORD @@pthis[10] USING Proto_IVBSAXXMLReader_putProperty(pthis, STRPTR(strName), varValue) TO SAX_ERROR_HRESULT
        
        END SUB
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Get]entityResolver property
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Allow an application to register an entity resolver or look up the current entity resolver.
        ' VTable offset: 44
        ' Member identifier: 1286
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_get_entityResolver ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF pRetVal AS DWORD _                                   ' [OUT] VT_PTR <*IVBSAXEntityResolver>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXXMLReader_get_entityResolver ALIAS "IVBSAXXMLReader_get_entityResolver" ( _
            BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
            ) EXPORT AS DWORD                                          ' VT_PTR <*IVBSAXEntityResolver>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS DWORD
            CALL DWORD @@pthis[11] USING Proto_IVBSAXXMLReader_get_entityResolver(pthis, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = pRetVal
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [PutRef]entityResolver property
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Allow an application to register an entity resolver or look up the current entity resolver.
        ' VTable offset: 48
        ' Member identifier: 1286
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_putref_entityResolver ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL prmentityResolver AS DWORD _                         ' [IN] <*IVBSAXEntityResolver>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        SUB IVBSAXXMLReader_putref_entityResolver ALIAS "IVBSAXXMLReader_putref_entityResolver" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL prmentityResolver AS DWORD _                         ' [IN] <*IVBSAXEntityResolver>
            ) EXPORT                                                   ' VT_VOID
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
            CALL DWORD @@pthis[12] USING Proto_IVBSAXXMLReader_putref_entityResolver(pthis, prmentityResolver) TO SAX_ERROR_HRESULT
        
        END SUB
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Get]contentHandler property
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Allow an application to register a content event handler or look up the current content event handler.
        ' VTable offset: 52
        ' Member identifier: 1287
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_get_contentHandler ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF pRetVal AS DWORD _                                   ' [OUT] VT_PTR <*IVBSAXContentHandler>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXXMLReader_get_contentHandler ALIAS "IVBSAXXMLReader_get_contentHandler" ( _
            BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
            ) EXPORT AS DWORD                                          ' VT_PTR <*IVBSAXContentHandler>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS DWORD
            CALL DWORD @@pthis[13] USING Proto_IVBSAXXMLReader_get_contentHandler(pthis, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = pRetVal
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [PutRef]contentHandler property
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Allow an application to register a content event handler or look up the current content event handler.
        ' VTable offset: 56
        ' Member identifier: 1287
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_putref_contentHandler ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL prmcontentHandler AS DWORD _                         ' [IN] <*IVBSAXContentHandler>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        SUB IVBSAXXMLReader_putref_contentHandler ALIAS "IVBSAXXMLReader_putref_contentHandler" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL prmcontentHandler AS DWORD _                         ' [IN] <*IVBSAXContentHandler>
            ) EXPORT                                                   ' VT_VOID
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
            CALL DWORD @@pthis[14] USING Proto_IVBSAXXMLReader_putref_contentHandler(pthis, prmcontentHandler) TO SAX_ERROR_HRESULT
        
        END SUB
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Get]dtdHandler property
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Allow an application to register a DTD event handler or look up the current DTD event handler.
        ' VTable offset: 60
        ' Member identifier: 1288
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_get_dtdHandler ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF pRetVal AS DWORD _                                   ' [OUT] VT_PTR <*IVBSAXDTDHandler>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXXMLReader_get_dtdHandler ALIAS "IVBSAXXMLReader_get_dtdHandler" ( _
            BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
            ) EXPORT AS DWORD                                          ' VT_PTR <*IVBSAXDTDHandler>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS DWORD
            CALL DWORD @@pthis[15] USING Proto_IVBSAXXMLReader_get_dtdHandler(pthis, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = pRetVal
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [PutRef]dtdHandler property
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Allow an application to register a DTD event handler or look up the current DTD event handler.
        ' VTable offset: 64
        ' Member identifier: 1288
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_putref_dtdHandler ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL prmdtdHandler AS DWORD _                             ' [IN] <*IVBSAXDTDHandler>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        SUB IVBSAXXMLReader_putref_dtdHandler ALIAS "IVBSAXXMLReader_putref_dtdHandler" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL prmdtdHandler AS DWORD _                             ' [IN] <*IVBSAXDTDHandler>
            ) EXPORT                                                   ' VT_VOID
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
            CALL DWORD @@pthis[16] USING Proto_IVBSAXXMLReader_putref_dtdHandler(pthis, prmdtdHandler) TO SAX_ERROR_HRESULT
        
        END SUB
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Get]errorHandler property
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Allow an application to register an error event handler or look up the current error event handler.
        ' VTable offset: 68
        ' Member identifier: 1289
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_get_errorHandler ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF pRetVal AS DWORD _                                   ' [OUT] VT_PTR <*IVBSAXErrorHandler>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXXMLReader_get_errorHandler ALIAS "IVBSAXXMLReader_get_errorHandler" ( _
            BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
            ) EXPORT AS DWORD                                          ' VT_PTR <*IVBSAXErrorHandler>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS DWORD
            CALL DWORD @@pthis[17] USING Proto_IVBSAXXMLReader_get_errorHandler(pthis, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = pRetVal
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [PutRef]errorHandler property
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Allow an application to register an error event handler or look up the current error event handler.
        ' VTable offset: 72
        ' Member identifier: 1289
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_putref_errorHandler ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL prmerrorHandler AS DWORD _                           ' [IN] <*IVBSAXErrorHandler>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        SUB IVBSAXXMLReader_putref_errorHandler ALIAS "IVBSAXXMLReader_putref_errorHandler" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL prmerrorHandler AS DWORD _                           ' [IN] <*IVBSAXErrorHandler>
            ) EXPORT                                                   ' VT_VOID
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
            CALL DWORD @@pthis[18] USING Proto_IVBSAXXMLReader_putref_errorHandler(pthis, prmerrorHandler) TO SAX_ERROR_HRESULT
        
        END SUB
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Get]baseURL property
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Set or get the base URL for the document.
        ' VTable offset: 76
        ' Member identifier: 1290
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_get_baseURL ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXXMLReader_get_baseURL ALIAS "IVBSAXXMLReader_get_baseURL" ( _
            BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[19] USING Proto_IVBSAXXMLReader_get_baseURL(pthis, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Set]baseURL property
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Set or get the base URL for the document.
        ' VTable offset: 80
        ' Member identifier: 1290
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_put_baseURL ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL pbstrbaseURL AS DWORD _                              ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        SUB IVBSAXXMLReader_put_baseURL ALIAS "IVBSAXXMLReader_put_baseURL" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL pbstrbaseURL AS STRING _                             ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) EXPORT                                                   ' VT_VOID
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
            pbstrbaseURL = UCODE$(pbstrbaseURL)
            CALL DWORD @@pthis[20] USING Proto_IVBSAXXMLReader_put_baseURL(pthis, STRPTR(pbstrbaseURL)) TO SAX_ERROR_HRESULT
        
        END SUB
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Get]secureBaseURL property
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Set or get the secure base URL for the document.
        ' VTable offset: 84
        ' Member identifier: 1291
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_get_secureBaseURL ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYREF pRetVal AS STRING _                                  ' [OUT] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        FUNCTION IVBSAXXMLReader_get_secureBaseURL ALIAS "IVBSAXXMLReader_get_secureBaseURL" ( _
            BYVAL pthis AS DWORD PTR _                                 ' VT_PTR <*VT_UNKNOWN>
            ) EXPORT AS STRING                                         ' VT_BSTR <DYNAMIC UNICODE STRING>
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT FUNCTION
            DIM pRetVal AS STRING
            CALL DWORD @@pthis[21] USING Proto_IVBSAXXMLReader_get_secureBaseURL(pthis, pRetVal) TO SAX_ERROR_HRESULT
            FUNCTION = ACODE$(pRetVal)
        
        END FUNCTION
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' [Set]secureBaseURL property
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Set or get the secure base URL for the document.
        ' VTable offset: 88
        ' Member identifier: 1291
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_put_secureBaseURL ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL pbstrsecureBaseURL AS DWORD _                        ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        SUB IVBSAXXMLReader_put_secureBaseURL ALIAS "IVBSAXXMLReader_put_secureBaseURL" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL pbstrsecureBaseURL AS STRING _                       ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) EXPORT                                                   ' VT_VOID
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
            pbstrsecureBaseURL = UCODE$(pbstrsecureBaseURL)
            CALL DWORD @@pthis[22] USING Proto_IVBSAXXMLReader_put_secureBaseURL(pthis, STRPTR(pbstrsecureBaseURL)) TO SAX_ERROR_HRESULT
        
        END SUB
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' parse method
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Parse an XML document.
        ' VTable offset: 92
        ' Member identifier: 1292
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_parse ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL varInput AS VARIANT _                                ' [IN] VT_VARIANT <VARIANT>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        SUB IVBSAXXMLReader_parse ALIAS "IVBSAXXMLReader_parse" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL varInput AS VARIANT _                                ' [IN] VT_VARIANT <VARIANT>
            ) EXPORT                                                   ' VT_VOID
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
            CALL DWORD @@pthis[23] USING Proto_IVBSAXXMLReader_parse(pthis, varInput) TO SAX_ERROR_HRESULT
        
        END SUB
        ' ********************************************************************************************
        
        ' ********************************************************************************************
        ' parseURL method
        ' Interface name: IVBSAXXMLReader
        ' Documentation string: Parse an XML document from a system identifier (URI).
        ' VTable offset: 96
        ' Member identifier: 1293
        ' ********************************************************************************************
        DECLARE FUNCTION Proto_IVBSAXXMLReader_parseURL ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strURL AS DWORD _                                    ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) AS LONG                                                  ' VT_HRESULT <LONG>
        
        SUB IVBSAXXMLReader_parseURL ALIAS "IVBSAXXMLReader_parseURL" ( _
            BYVAL pthis AS DWORD PTR, _                                ' VT_PTR <*VT_UNKNOWN>
            BYVAL strURL AS STRING _                                   ' [IN] VT_BSTR <DYNAMIC UNICODE STRING>
            ) EXPORT                                                   ' VT_VOID
        
            IF pthis = 0 THEN SAX_ERROR_HRESULT = -1 : EXIT SUB
            strURL = UCODE$(strURL)
            CALL DWORD @@pthis[24] USING Proto_IVBSAXXMLReader_parseURL(pthis, STRPTR(strURL)) TO SAX_ERROR_HRESULT
        
        END SUB
        ' ********************************************************************************************

        ------------------
        Forum: http://www.jose.it-berater.org/smfforum/index.php

        Comment


        • #5
          Implementation of the ContentHandler dispatch interface

          Code:
          ' ********************************************************************************************
          ' IVBSAXContentHandler interface
          ' Documentation string: IVBSAXContentHandler interface
          ' IID: {2ED7290A-4DD5-4B46-BB26-4E4155E77FAA}
          ' Interface flags: &H10C0 [Dual] [Nonextensible] [Dispatchable]
          ' Member identifier: 37
          ' Number of functions: 18
          ' ********************************************************************************************
          ' The ISAXContentHandler/IVBSAXContentHandler interface receives notification of the logical
          ' content of a document. This is the main interface implemented by most Simple API for XML
          ' (SAX) applications.
          ' Note: Only one ContentHandler can be registered at a time.
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' IDispatch virtual table
          ' ********************************************************************************************
          TYPE IVBSAXContentHandler_IDispatchVtbl
             QueryInterface AS DWORD
             AddRef AS DWORD
             Release AS DWORD
             GetTypeInfoCount AS DWORD
             GetTypeInfo AS DWORD
             GetIDsOfNames AS DWORD
             Invoke AS DWORD
             documentLocator AS DWORD
             startDocument AS DWORD
             endDocument AS DWORD
             startPrefixMapping AS DWORD
             endPrefixMapping AS DWORD
             startElement AS DWORD
             endElement AS DWORD
             characters AS DWORD
             ignorableWhitespace AS DWORD
             processingInstruction AS DWORD
             skippedEntity AS DWORD
          END TYPE
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' Builds the IDispatch Virtual Table
          ' ********************************************************************************************
          SUB IVBSAXContentHandler_BuildVtbl (Vtbl AS IVBSAXContentHandler_IDispatchVtbl)
             VTbl.QueryInterface        = CODEPTR(IVBSAXContentHandler_QueryInterface)
             VTbl.AddRef                = CODEPTR(IVBSAXContentHandler_AddRef)
             VTbl.Release               = CODEPTR(IVBSAXContentHandler_Release)
             VTbl.GetTypeInfoCount      = CODEPTR(IVBSAXContentHandler_GetTypeInfoCount)
             VTbl.GetTypeInfo           = CODEPTR(IVBSAXContentHandler_GetTypeInfo)
             VTbl.GetIDsOfNames         = CODEPTR(IVBSAXContentHandler_GetIDsOfNames)
             VTbl.Invoke                = CODEPTR(IVBSAXContentHandler_Invoke)
             VTbl.documentLocator       = CODEPTR(IVBSAXContentHandler_documentLocator)
             VTbl.startDocument         = CODEPTR(IVBSAXContentHandler_startDocument)
             VTbl.endDocument           = CODEPTR(IVBSAXContentHandler_endDocument)
             VTbl.startPrefixMapping    = CODEPTR(IVBSAXContentHandler_startPrefixMapping)
             VTbl.endPrefixMapping      = CODEPTR(IVBSAXContentHandler_endPrefixMapping)
             VTbl.startElement          = CODEPTR(IVBSAXContentHandler_startElement)
             VTbl.endElement            = CODEPTR(IVBSAXContentHandler_endElement)
             VTbl.characters            = CODEPTR(IVBSAXContentHandler_characters)
             VTbl.ignorableWhitespace   = CODEPTR(IVBSAXContentHandler_ignorableWhitespace)
             VTbl.processingInstruction = CODEPTR(IVBSAXContentHandler_processingInstruction)
             VTbl.skippedEntity         = CODEPTR(IVBSAXContentHandler_skippedEntity)
          END SUB
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' HRESULT QueryInterface([in] *GUID riid, [out] **VOID ppvObj)
          ' ********************************************************************************************
          FUNCTION IVBSAXContentHandler_QueryInterface (BYVAL pthis AS DWORD PTR, BYREF riid AS GUID, BYREF ppvObj AS DWORD) AS DWORD
             FUNCTION = %S_OK
          END FUNCTION
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' UI4 AddRef()
          ' ********************************************************************************************
          FUNCTION IVBSAXContentHandler_AddRef (BYVAL pthis AS DWORD PTR) AS DWORD
             FUNCTION = 1
          END FUNCTION
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' UI4 Release()
          ' ********************************************************************************************
          FUNCTION IVBSAXContentHandler_Release (BYVAL pthis AS DWORD PTR) AS DWORD
             FUNCTION = 1
          END FUNCTION
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' HRESULT GetTypeInfoCount([out] *UINT pctinfo)
          ' ********************************************************************************************
          FUNCTION IVBSAXContentHandler_GetTypeInfoCount (BYVAL pthis AS DWORD PTR, BYREF pctInfo AS DWORD) AS DWORD
             FUNCTION = %E_NOTIMPL
          END FUNCTION
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' HRESULT GetTypeInfo([in] UINT itinfo, [in] UI4 lcid, [out] **VOID pptinfo)
          ' ********************************************************************************************
          FUNCTION IVBSAXContentHandler_GetTypeInfo (BYVAL pthis AS DWORD PTR, BYVAL itinfo AS DWORD, BYVAL lcid AS DWORD, BYREF pptinfo AS DWORD) AS DWORD
             FUNCTION = %E_NOTIMPL
          END FUNCTION
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' HRESULT GetIDsOfNames([in] *GUID riid, [in] **I1 rgszNames, [in] UINT cNames, [in] UI4 lcid, [out] *I4 rgdispid)
          ' ********************************************************************************************
          FUNCTION IVBSAXContentHandler_GetIDsOfNames (BYVAL pthis AS DWORD PTR, BYREF riid AS GUID, BYVAL rgszNames AS DWORD, BYVAL cNames AS DWORD, BYVAL lcid AS DWORD, BYREF rgdispid AS LONG) AS DWORD
             FUNCTION = %E_NOTIMPL
          END FUNCTION
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' HRESULT Invoke([in] I4 dispidMember, [in] *GUID riid, [in] UI4 lcid, [in] UI2 wFlags, [in] *DISPPARAMS pdispparams, [out] *VARIANT pvarResult, [out] *EXCEPINFO pexcepinfo, [out] *UINT puArgErr)
          ' ********************************************************************************************
          FUNCTION IVBSAXContentHandler_Invoke (BYVAL pthis AS DWORD PTR, BYVAL dispidMember AS LONG, BYREF riid AS GUID, _
            BYVAL lcid AS DWORD, BYVAL wFlags AS WORD, BYREF pdispparams AS DISPPARAMS, BYREF pvarResult AS VARIANT, _
            BYREF pexcepinfo AS EXCEPINFO, BYREF puArgErr AS DWORD) AS DWORD
            FUNCTION = %S_OK
          END FUNCTION
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' Receives an interface pointer to the IVBSAXLocator interface, which provides methods for
          ' returning the column number, line number, public ID, or system ID for a current document event.
          ' The reader supplies a Locator object to the application by invoking this property before
          ' invoking any other methods in the IVBSAXContentHandler interface. This locator allows the
          ' application to determine the end position of any document-related event, even if the parser
          ' is not reporting an error. Typically, the application uses this information for reporting
          ' its own errors (for example, if the character content does not match the business rules
          ' of the application).
          ' ********************************************************************************************
          SUB IVBSAXContentHandler_documentLocator ( _
              BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
              BYVAL prmdocumentLocator AS DWORD _                        ' [IN] <*IVBSAXLocator>
              )                                                          ' VT_VOID
          END SUB
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' Receives notification of the beginning of a document. The reader invokes the startDocument
          ' method only once.
          ' The startDocument method is invoked before any other methods in the IVBSAXContentHandler
          ' interface or in the IVBSAXDTDHandler interface. Only the documentLocator property is invoked
          ' before the startDocument method.
          ' ********************************************************************************************
          SUB IVBSAXContentHandler_startDocument ( _
              BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
              )                                                          ' VT_VOID
          END SUB
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' Receives notification of the end of a document. The reader invokes the endDocument method
          ' only once. The endDocument method is the last method invoked during the parse. The reader
          ' does not invoke this method until it has either abandoned parsing upon encountering an
          ' unrecoverable error or has reached the end of the document.
          ' ********************************************************************************************
          SUB IVBSAXContentHandler_endDocument ( _
              BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
              )                                                          ' VT_VOID
          END SUB
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' Begins the scope of the prefix-URI namespace mapping.
          ' This method is always invoked before the corresponding startElement method.
          ' ********************************************************************************************
          SUB IVBSAXContentHandler_startPrefixMapping ( _
              BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
              BYREF strPrefix AS STRING, _                               ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              BYREF strURI AS STRING _                                   ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              )                                                          ' VT_VOID
          END SUB
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' Ends the scope of the prefix-URI namespace mapping.
          ' The reader calls this method after the corresponding endElement method.
          ' ********************************************************************************************
          SUB IVBSAXContentHandler_endPrefixMapping ( _
              BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
              BYREF strPrefix AS STRING _                                ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              )                                                          ' VT_VOID
          END SUB
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' Receives notification of the beginning of an element. The reader invokes the startElement
          ' method at the beginning of every element in the XML document.
          ' A corresponding endElement method is called for every startElement method, even when the
          ' element is empty.
          ' ********************************************************************************************
          SUB IVBSAXContentHandler_startElement ( _
              BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
              BYREF strNamespaceURI AS STRING, _                         ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              BYREF strLocalName AS STRING, _                            ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              BYREF strQName AS STRING, _                                ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              BYVAL oAttributes AS DWORD _                               ' [IN] <*IVBSAXAttributes>
              )                                                          ' VT_VOID
          
          END SUB
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' Receives notification of the end of an element. The reader invokes this method at the end of
          ' every element in the XML document.
          ' A corresponding startElement method is invoked for every endElement method, even when the
          ' element is empty.
          ' ********************************************************************************************
          SUB IVBSAXContentHandler_endElement ( _
              BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
              BYREF strNamespaceURI AS STRING, _                         ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              BYREF strLocalName AS STRING, _                            ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              BYREF strQName AS STRING _                                 ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              )                                                          ' VT_VOID
          
          END SUB
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' Receives notification of character data.
          ' The reader calls the characters method and passes it character data. The reader can pass all
          ' contiguous character data in a single chunk or split it into several chunks. All characters
          ' in a single event, however, must come from the same external entity, so that the Locator
          ' object provides useful information. The ContentHandler must not attempt to read from the
          ' array outside the specified range. The reader calls the characters method between the
          ' startElement and endElement methods. The reader passes strings to the characters method by
          ' reference (ByRef), not by value (ByVal). This improves performance and avoids extra string
          ' copying.
          ' ********************************************************************************************
          SUB IVBSAXContentHandler_characters ( _
              BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
              BYREF strChars AS STRING _                                 ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              )                                                          ' VT_VOID
          END SUB
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' This method is not called in the current implementation because the Simple API for XML (SAX2)
          ' implementation is nonvalidating.
          ' You can manually call the ignorableWhitespace method to pass white space characters such as
          ' space, carriage return (CR), tab, or line feed (LF) to the internal buffer of the
          ' MXXMLWriter object.
          ' ********************************************************************************************
          SUB IVBSAXContentHandler_ignorableWhitespace ( _
              BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
              BYREF strChars AS STRING _                                 ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              )                                                          ' VT_VOID
          END SUB
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' Receives notification of a processing instruction. The reader invokes the processingInstruction
          ' method once for each processing instruction found. Processing instructions can occur before
          ' or after the main document element.
          ' ********************************************************************************************
          SUB IVBSAXContentHandler_processingInstruction ( _
              BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
              BYREF strTarget AS STRING, _                               ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              BYREF strData AS STRING _                                  ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              )                                                          ' VT_VOID
          END SUB
          ' ********************************************************************************************
          
          ' ********************************************************************************************
          ' Receives notification of a skipped entity. The skippedEntity method is invoked for each
          ' entity skipped. The reader may skip entities if they have not been seen in the declarations.
          ' An example of this is when an entity is declared in an external DTD subset. The reader may
          ' skip external entities, depending on the values of the
          ' "http://xml.org/sax/features/external-general-entities" and
          ' "http://xml.org/sax/features/external-parameter-entities" features.
          ' The skippedEntity method is also called in the case of an external DTD declaration.
          ' ********************************************************************************************
          SUB IVBSAXContentHandler_skippedEntity ( _
              BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
              BYREF strName AS STRING _                                  ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
              )                                                          ' VT_VOID
          END SUB
          ' ********************************************************************************************

          ------------------
          Forum: http://www.jose.it-berater.org/smfforum/index.php

          Comment


          • #6
            Implementation of the ErrorHandler dispatch interface

            Code:
            ' ********************************************************************************************
            ' ISAXErrorHandler interface
            ' Documentation string: ISAXErrorHandler interface
            ' IID: {A60511C4-CCF5-479E-98A3-DC8DC545B7D0}
            ' Interface flags: &H10 [Hidden]
            ' Member identifier: 31
            ' Number of functions: 3
            ' ********************************************************************************************
            ' The ISAXErrorHandler/IVBSAXErrorHandler interface provides the basic interface for handling
            ' parsing errors.
            ' ********************************************************************************************
            
            ' ********************************************************************************************
            ' IDispatch virtual table
            ' ********************************************************************************************
            TYPE IVBSAXErrorHandler_IDispatchVtbl
               QueryInterface AS DWORD
               AddRef AS DWORD
               Release AS DWORD
               GetTypeInfoCount AS DWORD
               GetTypeInfo AS DWORD
               GetIDsOfNames AS DWORD
               Invoke AS DWORD
               pError AS DWORD
               fatalError AS DWORD
               ignorableWarning AS DWORD
            END TYPE
            ' ********************************************************************************************
            
            ' ********************************************************************************************
            ' Builds the IDispatch Virtual Table
            ' ********************************************************************************************
            SUB IVBSAXErrorHandler_BuildVtbl (Vtbl AS IVBSAXErrorHandler_IDispatchVtbl)
               VTbl.QueryInterface        = CODEPTR(IVBSAXErrorHandler_QueryInterface)
               VTbl.AddRef                = CODEPTR(IVBSAXErrorHandler_AddRef)
               VTbl.Release               = CODEPTR(IVBSAXErrorHandler_Release)
               VTbl.GetTypeInfoCount      = CODEPTR(IVBSAXErrorHandler_GetTypeInfoCount)
               VTbl.GetTypeInfo           = CODEPTR(IVBSAXErrorHandler_GetTypeInfo)
               VTbl.GetIDsOfNames         = CODEPTR(IVBSAXErrorHandler_GetIDsOfNames)
               VTbl.Invoke                = CODEPTR(IVBSAXErrorHandler_Invoke)
               VTbl.pError                = CODEPTR(IVBSAXErrorHandler_error)
               VTbl.fatalError            = CODEPTR(IVBSAXErrorHandler_fatalError)
               VTbl.ignorableWarning      = CODEPTR(IVBSAXErrorHandler_ignorableWarning)
            END SUB
            ' ********************************************************************************************
            
            ' ********************************************************************************************
            ' HRESULT QueryInterface([in] *GUID riid, [out] **VOID ppvObj)
            ' ********************************************************************************************
            FUNCTION IVBSAXErrorHandler_QueryInterface (BYVAL pthis AS DWORD PTR, BYREF riid AS GUID, BYREF ppvObj AS DWORD) AS DWORD
               FUNCTION = %S_OK
            END FUNCTION
            ' ********************************************************************************************
            
            ' ********************************************************************************************
            ' UI4 AddRef()
            ' ********************************************************************************************
            FUNCTION IVBSAXErrorHandler_AddRef (BYVAL pthis AS DWORD PTR) AS DWORD
               FUNCTION = 1
            END FUNCTION
            ' ********************************************************************************************
            
            ' ********************************************************************************************
            ' UI4 Release()
            ' ********************************************************************************************
            FUNCTION IVBSAXErrorHandler_Release (BYVAL pthis AS DWORD PTR) AS DWORD
               FUNCTION = 1
            END FUNCTION
            ' ********************************************************************************************
            
            ' ********************************************************************************************
            ' HRESULT GetTypeInfoCount([out] *UINT pctinfo)
            ' ********************************************************************************************
            FUNCTION IVBSAXErrorHandler_GetTypeInfoCount (BYVAL pthis AS DWORD PTR, BYREF pctInfo AS DWORD) AS DWORD
               FUNCTION = %E_NOTIMPL
            END FUNCTION
            ' ********************************************************************************************
            
            ' ********************************************************************************************
            ' HRESULT GetTypeInfo([in] UINT itinfo, [in] UI4 lcid, [out] **VOID pptinfo)
            ' ********************************************************************************************
            FUNCTION IVBSAXErrorHandler_GetTypeInfo (BYVAL pthis AS DWORD PTR, BYVAL itinfo AS DWORD, BYVAL lcid AS DWORD, BYREF pptinfo AS DWORD) AS DWORD
               FUNCTION = %E_NOTIMPL
            END FUNCTION
            ' ********************************************************************************************
            
            ' ********************************************************************************************
            ' HRESULT GetIDsOfNames([in] *GUID riid, [in] **I1 rgszNames, [in] UINT cNames, [in] UI4 lcid, [out] *I4 rgdispid)
            ' ********************************************************************************************
            FUNCTION IVBSAXErrorHandler_GetIDsOfNames (BYVAL pthis AS DWORD PTR, BYREF riid AS GUID, BYVAL rgszNames AS DWORD, BYVAL cNames AS DWORD, BYVAL lcid AS DWORD, BYREF rgdispid AS LONG) AS DWORD
               FUNCTION = %E_NOTIMPL
            END FUNCTION
            ' ********************************************************************************************
            
            ' ********************************************************************************************
            ' HRESULT Invoke([in] I4 dispidMember, [in] *GUID riid, [in] UI4 lcid, [in] UI2 wFlags, [in] *DISPPARAMS pdispparams, [out] *VARIANT pvarResult, [out] *EXCEPINFO pexcepinfo, [out] *UINT puArgErr)
            ' ********************************************************************************************
            FUNCTION IVBSAXErrorHandler_Invoke (BYVAL pthis AS DWORD PTR, BYVAL dispidMember AS LONG, BYREF riid AS GUID, _
              BYVAL lcid AS DWORD, BYVAL wFlags AS WORD, BYREF pdispparams AS DISPPARAMS, BYREF pvarResult AS VARIANT, _
              BYREF pexcepinfo AS EXCEPINFO, BYREF puArgErr AS DWORD) AS DWORD
              FUNCTION = %S_OK
            END FUNCTION
            ' ********************************************************************************************
            
            ' ********************************************************************************************
            ' Receives notification of a recoverable error.
            ' ********************************************************************************************
            SUB IVBSAXErrorHandler_error ( _
                BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                BYVAL oLocator AS DWORD, _                                 ' [IN] <*IVBSAXLocator>
                BYREF strErrorMessage AS STRING, _                         ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                BYVAL nErrorCode AS LONG _                                 ' [IN] VT_I4 <LONG>
                )                                                          ' VT_VOID
            END SUB
            ' ********************************************************************************************
            
            ' ********************************************************************************************
            ' Receives notification of a nonrecoverable error.
            ' ********************************************************************************************
            SUB IVBSAXErrorHandler_fatalError ( _
                BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                BYVAL oLocator AS DWORD, _                                 ' [IN] <*IVBSAXLocator>
                BYREF strErrorMessage AS STRING, _                         ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                BYVAL nErrorCode AS LONG _                                 ' [IN] VT_I4 <LONG>
                )                                                          ' VT_VOID
            END SUB
            ' ********************************************************************************************
            
            ' ********************************************************************************************
            ' Receives notification of a warning.
            ' Note: This method is not called in the current Simple API for XML (SAX2) implementation.
            ' ********************************************************************************************
            SUB IVBSAXErrorHandler_ignorableWarning ( _
                BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                BYVAL oLocator AS DWORD, _                                 ' [IN] <*IVBSAXLocator>
                BYREF strErrorMessage AS STRING, _                         ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                BYVAL nErrorCode AS LONG _                                 ' [IN] VT_I4 <LONG>
                )                                                          ' VT_VOID
            END SUB
            ' ********************************************************************************************

            ------------------
            Forum: http://www.jose.it-berater.org/smfforum/index.php

            Comment


            • #7
              Implementation of the DTDHandler interface

              Code:
              ' ********************************************************************************************
              ' ISAXDTDHandler interface
              ' Documentation string: ISAXDTDHandler interface
              ' IID: {E15C1BAF-AFB3-4D60-8C36-19A8C45DEFED}
              ' Interface flags: &H10 [Hidden]
              ' Member identifier: 30
              ' Number of functions: 2
              ' ********************************************************************************************
              
              ' ********************************************************************************************
              ' The ISAXDTDHandler/IVBSAXDTDHandler interface receives notification of basic document type
              ' definition (DTD)-related events.
              ' If a Simple API for XML (SAX) application requires information about notations and unparsed
              ' entities, the application implements this interface and registers an instance with the SAX2
              ' reader using the dtdHandler property. This DTDHandler instance reports notation and unparsed
              ' entity declarations to the application.
              ' The IVBSAXDTDHandler interface includes methods that are invoked by the reader during the
              ' parsing operation. The reader passes the appropriate information to the method's parameters.
              ' To perform some type of processing for a method, you simply add code to the method in the
              ' DTDHandler implementation. In general, it's rare that you would call these methods yourself
              ' from within the DTDHandler. As such, the syntax shown for the IVBSAXDTDHandler interface
              ' focuses on the implementation syntax, rather than usage syntax.
              '    Important   The SAX2 reader passes string values to IVBSAXDTDHandler methods by reference,
              '                rather than by value.
              ' If a Simple API for XML (SAX) application requires information about notations and unparsed
              ' entities, the application implements this interface and registers an instance with the SAX2
              ' reader using the putDTDHandler [IVBSAXXMLReader_putref_dtdHandler wrapper procedure] method.
              ' The instance of the DTDHandler reports notation and unparsed entity declarations to the
              ' application.
              '
              ' Remarks
              ' This interface includes only those DTD events that the XML recommendation requires processors
              ' to report: notation and unparsed entity declarations.
              ' The reader can report these events in any order, regardless of the order in which the
              ' notations and unparsed entities were declared. However, all DTD events must be reported
              ' after the ContentHandler's startDocument event, and before the first startElement event.
              ' It is up to the application to store the information for future use (perhaps in a hash table
              ' or object tree). If the application encounters attributes of type NOTATION, ENTITY, or
              ' ENTITIES, it can use the information that it obtained through this interface to find the
              ' entity or notation corresponding to the attribute value.
              ' ********************************************************************************************
              
              ' ********************************************************************************************
              ' IDispatch virtual table
              ' ********************************************************************************************
              TYPE IVBSAXDTDHandler_IDispatchVtbl
                 QueryInterface AS DWORD
                 AddRef AS DWORD
                 Release AS DWORD
                 GetTypeInfoCount AS DWORD
                 GetTypeInfo AS DWORD
                 GetIDsOfNames AS DWORD
                 Invoke AS DWORD
                 notationDecl AS DWORD
                 unparsedEntityDecl AS DWORD
              END TYPE
              ' ********************************************************************************************
              
              ' ********************************************************************************************
              ' Builds the IDispatch Virtual Table
              ' ********************************************************************************************
              SUB IVBSAXDTDHandler_BuildVtbl (Vtbl AS IVBSAXDTDHandler_IDispatchVtbl)
                 VTbl.QueryInterface        = CODEPTR(IVBSAXDTDHandler_QueryInterface)
                 VTbl.AddRef                = CODEPTR(IVBSAXDTDHandler_AddRef)
                 VTbl.Release               = CODEPTR(IVBSAXDTDHandler_Release)
                 VTbl.GetTypeInfoCount      = CODEPTR(IVBSAXDTDHandler_GetTypeInfoCount)
                 VTbl.GetTypeInfo           = CODEPTR(IVBSAXDTDHandler_GetTypeInfo)
                 VTbl.GetIDsOfNames         = CODEPTR(IVBSAXDTDHandler_GetIDsOfNames)
                 VTbl.Invoke                = CODEPTR(IVBSAXDTDHandler_Invoke)
                 VTbl.notationDecl          = CODEPTR(IVBSAXDTDHandler_notationDecl)
                 VTbl.unparsedEntityDecl    = CODEPTR(IVBSAXDTDHandler_unparsedEntityDecl)
              END SUB
              ' ********************************************************************************************
              
              ' ********************************************************************************************
              ' HRESULT QueryInterface([in] *GUID riid, [out] **VOID ppvObj)
              ' ********************************************************************************************
              FUNCTION IVBSAXDTDHandler_QueryInterface (BYVAL pthis AS DWORD PTR, BYREF riid AS GUID, BYREF ppvObj AS DWORD) AS DWORD
                 FUNCTION = %S_OK
              END FUNCTION
              ' ********************************************************************************************
              
              ' ********************************************************************************************
              ' UI4 AddRef()
              ' ********************************************************************************************
              FUNCTION IVBSAXDTDHandler_AddRef (BYVAL pthis AS DWORD PTR) AS DWORD
                 FUNCTION = 1
              END FUNCTION
              ' ********************************************************************************************
              
              ' ********************************************************************************************
              ' UI4 Release()
              ' ********************************************************************************************
              FUNCTION IVBSAXDTDHandler_Release (BYVAL pthis AS DWORD PTR) AS DWORD
                 FUNCTION = 1
              END FUNCTION
              ' ********************************************************************************************
              
              ' ********************************************************************************************
              ' HRESULT GetTypeInfoCount([out] *UINT pctinfo)
              ' ********************************************************************************************
              FUNCTION IVBSAXDTDHandler_GetTypeInfoCount (BYVAL pthis AS DWORD PTR, BYREF pctInfo AS DWORD) AS DWORD
                 FUNCTION = %E_NOTIMPL
              END FUNCTION
              ' ********************************************************************************************
              
              ' ********************************************************************************************
              ' HRESULT GetTypeInfo([in] UINT itinfo, [in] UI4 lcid, [out] **VOID pptinfo)
              ' ********************************************************************************************
              FUNCTION IVBSAXDTDHandler_GetTypeInfo (BYVAL pthis AS DWORD PTR, BYVAL itinfo AS DWORD, BYVAL lcid AS DWORD, BYREF pptinfo AS DWORD) AS DWORD
                 FUNCTION = %E_NOTIMPL
              END FUNCTION
              ' ********************************************************************************************
              
              ' ********************************************************************************************
              ' HRESULT GetIDsOfNames([in] *GUID riid, [in] **I1 rgszNames, [in] UINT cNames, [in] UI4 lcid, [out] *I4 rgdispid)
              ' ********************************************************************************************
              FUNCTION IVBSAXDTDHandler_GetIDsOfNames (BYVAL pthis AS DWORD PTR, BYREF riid AS GUID, BYVAL rgszNames AS DWORD, BYVAL cNames AS DWORD, BYVAL lcid AS DWORD, BYREF rgdispid AS LONG) AS DWORD
                 FUNCTION = %E_NOTIMPL
              END FUNCTION
              ' ********************************************************************************************
              
              ' ********************************************************************************************
              ' HRESULT Invoke([in] I4 dispidMember, [in] *GUID riid, [in] UI4 lcid, [in] UI2 wFlags, [in] *DISPPARAMS pdispparams, [out] *VARIANT pvarResult, [out] *EXCEPINFO pexcepinfo, [out] *UINT puArgErr)
              ' ********************************************************************************************
              FUNCTION IVBSAXDTDHandler_Invoke (BYVAL pthis AS DWORD PTR, BYVAL dispidMember AS LONG, BYREF riid AS GUID, _
                BYVAL lcid AS DWORD, BYVAL wFlags AS WORD, BYREF pdispparams AS DISPPARAMS, BYREF pvarResult AS VARIANT, _
                BYREF pexcepinfo AS EXCEPINFO, BYREF puArgErr AS DWORD) AS DWORD
                FUNCTION = %S_OK
              END FUNCTION
              ' ********************************************************************************************
              
              ' ********************************************************************************************
              ' Receives notification of a notation declaration event.
              ' If necessary, the application can record the notation for later reference. At least one of
              ' the PublicId or SystemId values must be available. If a system entity is present and it is
              ' a URL, the reader must resolve it before passing it to the application through the
              ' notationDecl method. There is no guarantee that the notation declaration will be reported
              ' before any unparsed entities that use it.
              ' ********************************************************************************************
              SUB IVBSAXDTDHandler_notationDecl ( _
                  BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                  BYREF strName AS STRING, _                                 ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                  BYREF strPublicId AS STRING, _                             ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                  BYREF strSystemId AS STRING _                              ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                  )                                                          ' VT_VOID
              END SUB
              ' ********************************************************************************************
              
              ' ********************************************************************************************
              ' Receives notification of an unparsed entity declaration event. The notation name corresponds
              ' to a notation reported by the notationDecl method or event. It is up to the application to
              ' record the entity for later reference, if necessary. If the system identifier is a URL, the
              ' reader must resolve it before passing it to the application.
              ' ********************************************************************************************
              SUB IVBSAXDTDHandler_unparsedEntityDecl ( _
                  BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                  BYREF strName AS STRING, _                                 ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                  BYREF strPublicId AS STRING, _                             ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                  BYREF strSystemId AS STRING, _                             ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                  BYREF strNotationName AS STRING _                          ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                  )                                                          ' VT_VOID
              END SUB
              ' ********************************************************************************************

              ------------------


              [This message has been edited by José Roca (edited August 15, 2004).]
              Forum: http://www.jose.it-berater.org/smfforum/index.php

              Comment


              • #8
                Shows how to connect the ConnectHandler interface to the SAX Reader

                Code:
                ' ********************************************************************************************
                ' SAX2. Test for the content handler interface
                ' SED_PBCC - Compile with PBCC
                ' ********************************************************************************************
                
                #DIM ALL
                #DEBUG ERROR ON
                #INCLUDE "DS_SAX2.INC"       ' SAX2 include file
                
                ' ********************************************************************************************
                ' IDispatch virtual table
                ' ********************************************************************************************
                TYPE IVBSAXContentHandler_IDispatchVtbl
                   QueryInterface AS DWORD
                   AddRef AS DWORD
                   Release AS DWORD
                   GetTypeInfoCount AS DWORD
                   GetTypeInfo AS DWORD
                   GetIDsOfNames AS DWORD
                   Invoke AS DWORD
                   documentLocator AS DWORD
                   startDocument AS DWORD
                   endDocument AS DWORD
                   startPrefixMapping AS DWORD
                   endPrefixMapping AS DWORD
                   startElement AS DWORD
                   endElement AS DWORD
                   characters AS DWORD
                   ignorableWhitespace AS DWORD
                   processingInstruction AS DWORD
                   skippedEntity AS DWORD
                END TYPE
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' Builds the IDispatch Virtual Table
                ' ********************************************************************************************
                SUB IVBSAXContentHandler_BuildVtbl (Vtbl AS IVBSAXContentHandler_IDispatchVtbl)
                   VTbl.QueryInterface        = CODEPTR(IVBSAXContentHandler_QueryInterface)
                   VTbl.AddRef                = CODEPTR(IVBSAXContentHandler_AddRef)
                   VTbl.Release               = CODEPTR(IVBSAXContentHandler_Release)
                   VTbl.GetTypeInfoCount      = CODEPTR(IVBSAXContentHandler_GetTypeInfoCount)
                   VTbl.GetTypeInfo           = CODEPTR(IVBSAXContentHandler_GetTypeInfo)
                   VTbl.GetIDsOfNames         = CODEPTR(IVBSAXContentHandler_GetIDsOfNames)
                   VTbl.Invoke                = CODEPTR(IVBSAXContentHandler_Invoke)
                   VTbl.documentLocator       = CODEPTR(IVBSAXContentHandler_documentLocator)
                   VTbl.startDocument         = CODEPTR(IVBSAXContentHandler_startDocument)
                   VTbl.endDocument           = CODEPTR(IVBSAXContentHandler_endDocument)
                   VTbl.startPrefixMapping    = CODEPTR(IVBSAXContentHandler_startPrefixMapping)
                   VTbl.endPrefixMapping      = CODEPTR(IVBSAXContentHandler_endPrefixMapping)
                   VTbl.startElement          = CODEPTR(IVBSAXContentHandler_startElement)
                   VTbl.endElement            = CODEPTR(IVBSAXContentHandler_endElement)
                   VTbl.characters            = CODEPTR(IVBSAXContentHandler_characters)
                   VTbl.ignorableWhitespace   = CODEPTR(IVBSAXContentHandler_ignorableWhitespace)
                   VTbl.processingInstruction = CODEPTR(IVBSAXContentHandler_processingInstruction)
                   VTbl.skippedEntity         = CODEPTR(IVBSAXContentHandler_skippedEntity)
                END SUB
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' HRESULT QueryInterface([in] *GUID riid, [out] **VOID ppvObj)
                ' ********************************************************************************************
                FUNCTION IVBSAXContentHandler_QueryInterface (BYVAL pthis AS DWORD PTR, BYREF riid AS GUID, BYREF ppvObj AS DWORD) AS DWORD
                   FUNCTION = %S_OK
                END FUNCTION
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' UI4 AddRef()
                ' ********************************************************************************************
                FUNCTION IVBSAXContentHandler_AddRef (BYVAL pthis AS DWORD PTR) AS DWORD
                   FUNCTION = 1
                END FUNCTION
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' UI4 Release()
                ' ********************************************************************************************
                FUNCTION IVBSAXContentHandler_Release (BYVAL pthis AS DWORD PTR) AS DWORD
                   FUNCTION = 1
                END FUNCTION
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' HRESULT GetTypeInfoCount([out] *UINT pctinfo)
                ' ********************************************************************************************
                FUNCTION IVBSAXContentHandler_GetTypeInfoCount (BYVAL pthis AS DWORD PTR, BYREF pctInfo AS DWORD) AS DWORD
                   FUNCTION = %E_NOTIMPL
                END FUNCTION
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' HRESULT GetTypeInfo([in] UINT itinfo, [in] UI4 lcid, [out] **VOID pptinfo)
                ' ********************************************************************************************
                FUNCTION IVBSAXContentHandler_GetTypeInfo (BYVAL pthis AS DWORD PTR, BYVAL itinfo AS DWORD, BYVAL lcid AS DWORD, BYREF pptinfo AS DWORD) AS DWORD
                   FUNCTION = %E_NOTIMPL
                END FUNCTION
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' HRESULT GetIDsOfNames([in] *GUID riid, [in] **I1 rgszNames, [in] UINT cNames, [in] UI4 lcid, [out] *I4 rgdispid)
                ' ********************************************************************************************
                FUNCTION IVBSAXContentHandler_GetIDsOfNames (BYVAL pthis AS DWORD PTR, BYREF riid AS GUID, BYVAL rgszNames AS DWORD, BYVAL cNames AS DWORD, BYVAL lcid AS DWORD, BYREF rgdispid AS LONG) AS DWORD
                   FUNCTION = %E_NOTIMPL
                END FUNCTION
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' HRESULT Invoke([in] I4 dispidMember, [in] *GUID riid, [in] UI4 lcid, [in] UI2 wFlags, [in] *DISPPARAMS pdispparams, [out] *VARIANT pvarResult, [out] *EXCEPINFO pexcepinfo, [out] *UINT puArgErr)
                ' ********************************************************************************************
                FUNCTION IVBSAXContentHandler_Invoke (BYVAL pthis AS DWORD PTR, BYVAL dispidMember AS LONG, BYREF riid AS GUID, _
                  BYVAL lcid AS DWORD, BYVAL wFlags AS WORD, BYREF pdispparams AS DISPPARAMS, BYREF pvarResult AS VARIANT, _
                  BYREF pexcepinfo AS EXCEPINFO, BYREF puArgErr AS DWORD) AS DWORD
                  FUNCTION = %S_OK
                END FUNCTION
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' documentLocator
                ' ********************************************************************************************
                SUB IVBSAXContentHandler_documentLocator ( _ 
                    BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                    BYVAL prmdocumentLocator AS DWORD _                        ' [IN] <*IVBSAXLocator>
                    )                                                          ' VT_VOID
                END SUB
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' startDocument
                ' ********************************************************************************************
                SUB IVBSAXContentHandler_startDocument ( _ 
                    BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
                    )                                                          ' VT_VOID
                PRINT "startdocument"
                END SUB
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' endDocument
                ' ********************************************************************************************
                SUB IVBSAXContentHandler_endDocument ( _ 
                    BYVAL pthis AS DWORD _                                     ' VT_PTR <*VT_DISPATCH>
                    )                                                          ' VT_VOID
                PRINT "enddocument"
                END SUB
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' startPrefixMapping
                ' ********************************************************************************************
                SUB IVBSAXContentHandler_startPrefixMapping ( _ 
                    BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                    BYREF strPrefix AS STRING, _                               ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    BYREF strURI AS STRING _                                   ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    )                                                          ' VT_VOID
                END SUB
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' endPrefixMapping
                ' ********************************************************************************************
                SUB IVBSAXContentHandler_endPrefixMapping ( _ 
                    BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                    BYREF strPrefix AS STRING _                                ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    )                                                          ' VT_VOID
                END SUB
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' startElement
                ' ********************************************************************************************
                SUB IVBSAXContentHandler_startElement ( _ 
                    BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                    BYREF strNamespaceURI AS STRING, _                         ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    BYREF strLocalName AS STRING, _                            ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    BYREF strQName AS STRING, _                                ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    BYVAL oAttributes AS DWORD _                               ' [IN] <*IVBSAXAttributes>
                    )                                                          ' VT_VOID
                
                END SUB
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' endElement
                ' ********************************************************************************************
                SUB IVBSAXContentHandler_endElement ( _ 
                    BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                    BYREF strNamespaceURI AS STRING, _                         ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    BYREF strLocalName AS STRING, _                            ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    BYREF strQName AS STRING _                                 ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    )                                                          ' VT_VOID
                
                END SUB
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' characters
                ' ********************************************************************************************
                SUB IVBSAXContentHandler_characters ( _ 
                    BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                    BYREF strChars AS STRING _                                 ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    )                                                          ' VT_VOID
                stdout ACODE$(strChars)
                END SUB
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' ignorableWhiteSpace
                ' ********************************************************************************************
                SUB IVBSAXContentHandler_ignorableWhitespace ( _ 
                    BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                    BYREF strChars AS STRING _                                 ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    )                                                          ' VT_VOID
                END SUB
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' processingInstruction
                ' ********************************************************************************************
                SUB IVBSAXContentHandler_processingInstruction ( _ 
                    BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                    BYREF strTarget AS STRING, _                               ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    BYREF strData AS STRING _                                  ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    )                                                          ' VT_VOID
                END SUB
                ' ********************************************************************************************
                
                ' ********************************************************************************************
                ' skippedEntity
                ' ********************************************************************************************
                SUB IVBSAXContentHandler_skippedEntity ( _ 
                    BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                    BYREF strName AS STRING _                                  ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                    )                                                          ' VT_VOID
                END SUB
                ' ********************************************************************************************
                
                
                ' ********************************************************************************************
                ' Main
                ' ********************************************************************************************
                FUNCTION PBMAIN
                
                   LOCAL lpReader AS DWORD
                   LOCAL lpContentHandler AS DWORD
                   LOCAL hr AS DWORD
                
                   ' =======================================================================
                   ' Create an instance of the SAX reader. Use MSXML 4.0
                   ' =======================================================================
                   lpReader = NewSAXXMLReader("Msxml2.SAXXMLReader.4.0")
                   IF ISFALSE lpReader THEN GOTO Terminate
                
                   ' =======================================================================
                   ' Register a ContentHandler dispatch interface
                   ' =======================================================================
                   STATIC lpContentHandlerSink AS DWORD
                   STATIC udtContentHandlerVtbl AS IVBSAXContentHandler_IDispatchVtbl
                   STATIC lpContentHandlerDispatch AS DWORD
                   IVBSAXContentHandler_BuildVtbl(udtContentHandlerVtbl)
                   lpContentHandlerSink = VARPTR(udtContentHandlerVtbl)
                   lpContentHandlerDispatch = VARPTR(lpContentHandlerSink)
                   IVBSAXXMLReader_putref_contentHandler lpReader, lpContentHandlerDispatch
                   ' =======================================================================
                
                   ' =======================================================================
                   ' Parse the document
                   ' =======================================================================
                   IVBSAXXMLReader_parseURL lpReader, "books.xml"   '<-- change as needed
                   ' =======================================================================
                   
                   ' =======================================================================
                   ' Release the SAX reader
                   ' =======================================================================
                   SAX_Release lpReader
                   ' =======================================================================
                
                Terminate:
                
                   waitkey$
                
                END FUNCTION
                ' ********************************************************************************************

                ------------------
                Forum: http://www.jose.it-berater.org/smfforum/index.php

                Comment


                • #9
                  Shows how to connect the ErrorHandler interface to the SAX Reader

                  Code:
                  ' ********************************************************************************************
                  ' SAX2. Test for the error handler interface
                  ' SED_PBCC - Compile with PBCC
                  ' ********************************************************************************************
                  
                  #DIM ALL
                  #DEBUG ERROR ON
                  #INCLUDE "DS_SAX2.INC"       ' SAX2 include file
                  
                  ' ********************************************************************************************
                  ' IDispatch virtual table
                  ' ********************************************************************************************
                  TYPE IVBSAXErrorHandler_IDispatchVtbl
                     QueryInterface AS DWORD
                     AddRef AS DWORD
                     Release AS DWORD
                     GetTypeInfoCount AS DWORD
                     GetTypeInfo AS DWORD
                     GetIDsOfNames AS DWORD
                     Invoke AS DWORD
                     pError AS DWORD
                     fatalError AS DWORD
                     ignorableWarning AS DWORD
                  END TYPE
                  ' ********************************************************************************************
                  
                  ' ********************************************************************************************
                  ' Builds the IDispatch Virtual Table
                  ' ********************************************************************************************
                  SUB IVBSAXErrorHandler_BuildVtbl (Vtbl AS IVBSAXErrorHandler_IDispatchVtbl)
                     VTbl.QueryInterface        = CODEPTR(IVBSAXErrorHandler_QueryInterface)
                     VTbl.AddRef                = CODEPTR(IVBSAXErrorHandler_AddRef)
                     VTbl.Release               = CODEPTR(IVBSAXErrorHandler_Release)
                     VTbl.GetTypeInfoCount      = CODEPTR(IVBSAXErrorHandler_GetTypeInfoCount)
                     VTbl.GetTypeInfo           = CODEPTR(IVBSAXErrorHandler_GetTypeInfo)
                     VTbl.GetIDsOfNames         = CODEPTR(IVBSAXErrorHandler_GetIDsOfNames)
                     VTbl.Invoke                = CODEPTR(IVBSAXErrorHandler_Invoke)
                     VTbl.pError                = CODEPTR(IVBSAXErrorHandler_error)
                     VTbl.fatalError            = CODEPTR(IVBSAXErrorHandler_fatalError)
                     VTbl.ignorableWarning      = CODEPTR(IVBSAXErrorHandler_ignorableWarning)
                  END SUB
                  ' ********************************************************************************************
                  
                  ' ********************************************************************************************
                  ' HRESULT QueryInterface([in] *GUID riid, [out] **VOID ppvObj)
                  ' ********************************************************************************************
                  FUNCTION IVBSAXErrorHandler_QueryInterface (BYVAL pthis AS DWORD PTR, BYREF riid AS GUID, BYREF ppvObj AS DWORD) AS DWORD
                     FUNCTION = %S_OK
                  END FUNCTION
                  ' ********************************************************************************************
                  
                  ' ********************************************************************************************
                  ' UI4 AddRef()
                  ' ********************************************************************************************
                  FUNCTION IVBSAXErrorHandler_AddRef (BYVAL pthis AS DWORD PTR) AS DWORD
                     FUNCTION = 1
                  END FUNCTION
                  ' ********************************************************************************************
                  
                  ' ********************************************************************************************
                  ' UI4 Release()
                  ' ********************************************************************************************
                  FUNCTION IVBSAXErrorHandler_Release (BYVAL pthis AS DWORD PTR) AS DWORD
                     FUNCTION = 1
                  END FUNCTION
                  ' ********************************************************************************************
                  
                  ' ********************************************************************************************
                  ' HRESULT GetTypeInfoCount([out] *UINT pctinfo)
                  ' ********************************************************************************************
                  FUNCTION IVBSAXErrorHandler_GetTypeInfoCount (BYVAL pthis AS DWORD PTR, BYREF pctInfo AS DWORD) AS DWORD
                     FUNCTION = %E_NOTIMPL
                  END FUNCTION
                  ' ********************************************************************************************
                  
                  ' ********************************************************************************************
                  ' HRESULT GetTypeInfo([in] UINT itinfo, [in] UI4 lcid, [out] **VOID pptinfo)
                  ' ********************************************************************************************
                  FUNCTION IVBSAXErrorHandler_GetTypeInfo (BYVAL pthis AS DWORD PTR, BYVAL itinfo AS DWORD, BYVAL lcid AS DWORD, BYREF pptinfo AS DWORD) AS DWORD
                     FUNCTION = %E_NOTIMPL
                  END FUNCTION
                  ' ********************************************************************************************
                  
                  ' ********************************************************************************************
                  ' HRESULT GetIDsOfNames([in] *GUID riid, [in] **I1 rgszNames, [in] UINT cNames, [in] UI4 lcid, [out] *I4 rgdispid)
                  ' ********************************************************************************************
                  FUNCTION IVBSAXErrorHandler_GetIDsOfNames (BYVAL pthis AS DWORD PTR, BYREF riid AS GUID, BYVAL rgszNames AS DWORD, BYVAL cNames AS DWORD, BYVAL lcid AS DWORD, BYREF rgdispid AS LONG) AS DWORD
                     FUNCTION = %E_NOTIMPL
                  END FUNCTION
                  ' ********************************************************************************************
                  
                  ' ********************************************************************************************
                  ' HRESULT Invoke([in] I4 dispidMember, [in] *GUID riid, [in] UI4 lcid, [in] UI2 wFlags, [in] *DISPPARAMS pdispparams, [out] *VARIANT pvarResult, [out] *EXCEPINFO pexcepinfo, [out] *UINT puArgErr)
                  ' ********************************************************************************************
                  FUNCTION IVBSAXErrorHandler_Invoke (BYVAL pthis AS DWORD PTR, BYVAL dispidMember AS LONG, BYREF riid AS GUID, _
                    BYVAL lcid AS DWORD, BYVAL wFlags AS WORD, BYREF pdispparams AS DISPPARAMS, BYREF pvarResult AS VARIANT, _
                    BYREF pexcepinfo AS EXCEPINFO, BYREF puArgErr AS DWORD) AS DWORD
                    FUNCTION = %S_OK
                  END FUNCTION
                  ' ********************************************************************************************
                  
                  ' ********************************************************************************************
                  ' Receives notification of a recoverable error.
                  ' ********************************************************************************************
                  SUB IVBSAXErrorHandler_error ( _
                      BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                      BYVAL oLocator AS DWORD, _                                 ' [IN] <*IVBSAXLocator>
                      BYREF strErrorMessage AS STRING, _                         ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                      BYVAL nErrorCode AS LONG _                                 ' [IN] VT_I4 <LONG>
                      )                                                          ' VT_VOID
                  stdout "Recoverable error: " & ACODE$(strErrorMessage)
                  END SUB
                  ' ********************************************************************************************
                  
                  ' ********************************************************************************************
                  ' Receives notification of a nonrecoverable error.
                  ' ********************************************************************************************
                  SUB IVBSAXErrorHandler_fatalError ( _
                      BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                      BYVAL oLocator AS DWORD, _                                 ' [IN] <*IVBSAXLocator>
                      BYREF strErrorMessage AS STRING, _                         ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                      BYVAL nErrorCode AS LONG _                                 ' [IN] VT_I4 <LONG>
                      )                                                          ' VT_VOID
                  stdout "Unrecoverable error: " & ACODE$(strErrorMessage)
                  END SUB
                  ' ********************************************************************************************
                  
                  ' ********************************************************************************************
                  ' Receives notification of a warning.
                  ' Note: This method is not called in the current Simple API for XML (SAX2) implementation.
                  ' ********************************************************************************************
                  SUB IVBSAXErrorHandler_ignorableWarning ( _
                      BYVAL pthis AS DWORD, _                                    ' VT_PTR <*VT_DISPATCH>
                      BYVAL oLocator AS DWORD, _                                 ' [IN] <*IVBSAXLocator>
                      BYREF strErrorMessage AS STRING, _                         ' [IN] [OUT] <*VT_BSTR <DYNAMIC UNICODE STRING>>
                      BYVAL nErrorCode AS LONG _                                 ' [IN] VT_I4 <LONG>
                      )                                                          ' VT_VOID
                  END SUB
                  ' ********************************************************************************************
                  
                  ' ********************************************************************************************
                  ' Main
                  ' ********************************************************************************************
                  FUNCTION PBMAIN
                  
                     LOCAL lpReader AS DWORD
                     LOCAL lpErrorHandler AS DWORD
                     LOCAL hr AS DWORD
                  
                     ' =======================================================================
                     ' Create an instance of the SAX reader. Use MSXML 4.0
                     ' =======================================================================
                     lpReader = NewSAXXMLReader("Msxml2.SAXXMLReader.4.0")
                     IF ISFALSE lpReader THEN GOTO Terminate
                  
                     ' =======================================================================
                     ' Register a ErrorHandler dispatch interface
                     ' =======================================================================
                     STATIC lpErrorHandlerSink AS DWORD
                     STATIC udtErrorHandlerVtbl AS IVBSAXErrorHandler_IDispatchVtbl
                     STATIC lpErrorHandlerDispatch AS DWORD
                     IVBSAXErrorHandler_BuildVtbl(udtErrorHandlerVtbl)
                     lpErrorHandlerSink = VARPTR(udtErrorHandlerVtbl)
                     lpErrorHandlerDispatch = VARPTR(lpErrorHandlerSink)
                     IVBSAXXMLReader_putref_errorHandler lpReader, lpErrorHandlerDispatch
                     ' =======================================================================
                  
                     ' =======================================================================
                     ' Parse the document
                     ' =======================================================================
                     IVBSAXXMLReader_parseURL lpReader, "bad.xml"  '<-- change as needed
                     ' =======================================================================
                     
                     ' =======================================================================
                     ' Release the SAX reader
                     ' =======================================================================
                     SAX_Release lpReader
                     ' =======================================================================
                  
                  Terminate:
                  
                     waitkey$
                  
                  END FUNCTION
                  ' ********************************************************************************************

                  ------------------
                  Forum: http://www.jose.it-berater.org/smfforum/index.php

                  Comment

                  Working...
                  X