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

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

#ifndef __RPCNDR_H_VERSION__
#error This stub requires an updated version of <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include "windows.h"
#include "ole2.h"
#endif

#ifndef __mshtml_h__
#define __mshtml_h__

#ifndef __IHTMLFiltersCollection_FWD_DEFINED__
#define __IHTMLFiltersCollection_FWD_DEFINED__
typedef interface IHTMLFiltersCollection IHTMLFiltersCollection;
#endif

#ifndef __IHTMLEventObj_FWD_DEFINED__
#define __IHTMLEventObj_FWD_DEFINED__
typedef interface IHTMLEventObj IHTMLEventObj;
#endif

#ifndef __IElementBehaviorSite_FWD_DEFINED__
#define __IElementBehaviorSite_FWD_DEFINED__
typedef interface IElementBehaviorSite IElementBehaviorSite;
#endif

#ifndef __IElementBehavior_FWD_DEFINED__
#define __IElementBehavior_FWD_DEFINED__
typedef interface IElementBehavior IElementBehavior;
#endif

#ifndef __IElementBehaviorFactory_FWD_DEFINED__
#define __IElementBehaviorFactory_FWD_DEFINED__
typedef interface IElementBehaviorFactory IElementBehaviorFactory;
#endif

#ifndef __IElementBehaviorSiteOM_FWD_DEFINED__
#define __IElementBehaviorSiteOM_FWD_DEFINED__
typedef interface IElementBehaviorSiteOM IElementBehaviorSiteOM;
#endif

#ifndef __IElementBehaviorRender_FWD_DEFINED__
#define __IElementBehaviorRender_FWD_DEFINED__
typedef interface IElementBehaviorRender IElementBehaviorRender;
#endif

#ifndef __IElementBehaviorSiteRender_FWD_DEFINED__
#define __IElementBehaviorSiteRender_FWD_DEFINED__
typedef interface IElementBehaviorSiteRender IElementBehaviorSiteRender;
#endif

#ifndef __IHTMLStyle_FWD_DEFINED__
#define __IHTMLStyle_FWD_DEFINED__
typedef interface IHTMLStyle IHTMLStyle;
#endif

#ifndef __IHTMLStyle2_FWD_DEFINED__
#define __IHTMLStyle2_FWD_DEFINED__
typedef interface IHTMLStyle2 IHTMLStyle2;
#endif

#ifndef __IHTMLStyle3_FWD_DEFINED__
#define __IHTMLStyle3_FWD_DEFINED__
typedef interface IHTMLStyle3 IHTMLStyle3;
#endif

#ifndef __IHTMLStyle4_FWD_DEFINED__
#define __IHTMLStyle4_FWD_DEFINED__
typedef interface IHTMLStyle4 IHTMLStyle4;
#endif

#ifndef __IHTMLRuleStyle_FWD_DEFINED__
#define __IHTMLRuleStyle_FWD_DEFINED__
typedef interface IHTMLRuleStyle IHTMLRuleStyle;
#endif

#ifndef __IHTMLRuleStyle2_FWD_DEFINED__
#define __IHTMLRuleStyle2_FWD_DEFINED__
typedef interface IHTMLRuleStyle2 IHTMLRuleStyle2;
#endif

#ifndef __IHTMLRuleStyle3_FWD_DEFINED__
#define __IHTMLRuleStyle3_FWD_DEFINED__
typedef interface IHTMLRuleStyle3 IHTMLRuleStyle3;
#endif

#ifndef __IHTMLRuleStyle4_FWD_DEFINED__
#define __IHTMLRuleStyle4_FWD_DEFINED__
typedef interface IHTMLRuleStyle4 IHTMLRuleStyle4;
#endif

#ifndef __DispHTMLStyle_FWD_DEFINED__
#define __DispHTMLStyle_FWD_DEFINED__
typedef interface DispHTMLStyle DispHTMLStyle;
#endif

#ifndef __HTMLStyle_FWD_DEFINED__
#define __HTMLStyle_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyle HTMLStyle;
#else
typedef struct HTMLStyle HTMLStyle;
#endif
#endif

#ifndef __DispHTMLRuleStyle_FWD_DEFINED__
#define __DispHTMLRuleStyle_FWD_DEFINED__
typedef interface DispHTMLRuleStyle DispHTMLRuleStyle;
#endif

#ifndef __HTMLRuleStyle_FWD_DEFINED__
#define __HTMLRuleStyle_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLRuleStyle HTMLRuleStyle;
#else
typedef struct HTMLRuleStyle HTMLRuleStyle;
#endif
#endif

#ifndef __IHTMLRenderStyle_FWD_DEFINED__
#define __IHTMLRenderStyle_FWD_DEFINED__
typedef interface IHTMLRenderStyle IHTMLRenderStyle;
#endif

#ifndef __DispHTMLRenderStyle_FWD_DEFINED__
#define __DispHTMLRenderStyle_FWD_DEFINED__
typedef interface DispHTMLRenderStyle DispHTMLRenderStyle;
#endif

#ifndef __HTMLRenderStyle_FWD_DEFINED__
#define __HTMLRenderStyle_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLRenderStyle HTMLRenderStyle;
#else
typedef struct HTMLRenderStyle HTMLRenderStyle;
#endif
#endif

#ifndef __IHTMLCurrentStyle_FWD_DEFINED__
#define __IHTMLCurrentStyle_FWD_DEFINED__
typedef interface IHTMLCurrentStyle IHTMLCurrentStyle;
#endif

#ifndef __IHTMLCurrentStyle2_FWD_DEFINED__
#define __IHTMLCurrentStyle2_FWD_DEFINED__
typedef interface IHTMLCurrentStyle2 IHTMLCurrentStyle2;
#endif

#ifndef __IHTMLCurrentStyle3_FWD_DEFINED__
#define __IHTMLCurrentStyle3_FWD_DEFINED__
typedef interface IHTMLCurrentStyle3 IHTMLCurrentStyle3;
#endif

#ifndef __DispHTMLCurrentStyle_FWD_DEFINED__
#define __DispHTMLCurrentStyle_FWD_DEFINED__
typedef interface DispHTMLCurrentStyle DispHTMLCurrentStyle;
#endif

#ifndef __HTMLCurrentStyle_FWD_DEFINED__
#define __HTMLCurrentStyle_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLCurrentStyle HTMLCurrentStyle;
#else
typedef struct HTMLCurrentStyle HTMLCurrentStyle;
#endif
#endif

#ifndef __IHTMLElement_FWD_DEFINED__
#define __IHTMLElement_FWD_DEFINED__
typedef interface IHTMLElement IHTMLElement;
#endif

#ifndef __IHTMLRect_FWD_DEFINED__
#define __IHTMLRect_FWD_DEFINED__
typedef interface IHTMLRect IHTMLRect;
#endif

#ifndef __IHTMLRectCollection_FWD_DEFINED__
#define __IHTMLRectCollection_FWD_DEFINED__
typedef interface IHTMLRectCollection IHTMLRectCollection;
#endif

#ifndef __IHTMLDOMNode_FWD_DEFINED__
#define __IHTMLDOMNode_FWD_DEFINED__
typedef interface IHTMLDOMNode IHTMLDOMNode;
#endif

#ifndef __IHTMLDOMNode2_FWD_DEFINED__
#define __IHTMLDOMNode2_FWD_DEFINED__
typedef interface IHTMLDOMNode2 IHTMLDOMNode2;
#endif

#ifndef __IHTMLDOMAttribute_FWD_DEFINED__
#define __IHTMLDOMAttribute_FWD_DEFINED__
typedef interface IHTMLDOMAttribute IHTMLDOMAttribute;
#endif

#ifndef __IHTMLDOMAttribute2_FWD_DEFINED__
#define __IHTMLDOMAttribute2_FWD_DEFINED__
typedef interface IHTMLDOMAttribute2 IHTMLDOMAttribute2;
#endif

#ifndef __IHTMLDOMTextNode_FWD_DEFINED__
#define __IHTMLDOMTextNode_FWD_DEFINED__
typedef interface IHTMLDOMTextNode IHTMLDOMTextNode;
#endif

#ifndef __IHTMLDOMTextNode2_FWD_DEFINED__
#define __IHTMLDOMTextNode2_FWD_DEFINED__
typedef interface IHTMLDOMTextNode2 IHTMLDOMTextNode2;
#endif

#ifndef __IHTMLDOMImplementation_FWD_DEFINED__
#define __IHTMLDOMImplementation_FWD_DEFINED__
typedef interface IHTMLDOMImplementation IHTMLDOMImplementation;
#endif

#ifndef __DispHTMLDOMAttribute_FWD_DEFINED__
#define __DispHTMLDOMAttribute_FWD_DEFINED__
typedef interface DispHTMLDOMAttribute DispHTMLDOMAttribute;
#endif

#ifndef __HTMLDOMAttribute_FWD_DEFINED__
#define __HTMLDOMAttribute_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDOMAttribute HTMLDOMAttribute;
#else
typedef struct HTMLDOMAttribute HTMLDOMAttribute;
#endif
#endif

#ifndef __DispHTMLDOMTextNode_FWD_DEFINED__
#define __DispHTMLDOMTextNode_FWD_DEFINED__
typedef interface DispHTMLDOMTextNode DispHTMLDOMTextNode;
#endif

#ifndef __HTMLDOMTextNode_FWD_DEFINED__
#define __HTMLDOMTextNode_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDOMTextNode HTMLDOMTextNode;
#else
typedef struct HTMLDOMTextNode HTMLDOMTextNode;
#endif
#endif

#ifndef __DispHTMLDOMImplementation_FWD_DEFINED__
#define __DispHTMLDOMImplementation_FWD_DEFINED__
typedef interface DispHTMLDOMImplementation DispHTMLDOMImplementation;
#endif

#ifndef __HTMLDOMImplementation_FWD_DEFINED__
#define __HTMLDOMImplementation_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDOMImplementation HTMLDOMImplementation;
#else
typedef struct HTMLDOMImplementation HTMLDOMImplementation;
#endif
#endif

#ifndef __IHTMLAttributeCollection_FWD_DEFINED__
#define __IHTMLAttributeCollection_FWD_DEFINED__
typedef interface IHTMLAttributeCollection IHTMLAttributeCollection;
#endif

#ifndef __IHTMLAttributeCollection2_FWD_DEFINED__
#define __IHTMLAttributeCollection2_FWD_DEFINED__
typedef interface IHTMLAttributeCollection2 IHTMLAttributeCollection2;
#endif

#ifndef __IHTMLDOMChildrenCollection_FWD_DEFINED__
#define __IHTMLDOMChildrenCollection_FWD_DEFINED__
typedef interface IHTMLDOMChildrenCollection IHTMLDOMChildrenCollection;
#endif

#ifndef __DispHTMLAttributeCollection_FWD_DEFINED__
#define __DispHTMLAttributeCollection_FWD_DEFINED__
typedef interface DispHTMLAttributeCollection DispHTMLAttributeCollection;
#endif

#ifndef __HTMLAttributeCollection_FWD_DEFINED__
#define __HTMLAttributeCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAttributeCollection HTMLAttributeCollection;
#else
typedef struct HTMLAttributeCollection HTMLAttributeCollection;
#endif
#endif

#ifndef __DispDOMChildrenCollection_FWD_DEFINED__
#define __DispDOMChildrenCollection_FWD_DEFINED__
typedef interface DispDOMChildrenCollection DispDOMChildrenCollection;
#endif

#ifndef __DOMChildrenCollection_FWD_DEFINED__
#define __DOMChildrenCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class DOMChildrenCollection DOMChildrenCollection;
#else
typedef struct DOMChildrenCollection DOMChildrenCollection;
#endif
#endif

#ifndef __HTMLElementEvents2_FWD_DEFINED__
#define __HTMLElementEvents2_FWD_DEFINED__
typedef interface HTMLElementEvents2 HTMLElementEvents2;
#endif

#ifndef __HTMLElementEvents_FWD_DEFINED__
#define __HTMLElementEvents_FWD_DEFINED__
typedef interface HTMLElementEvents HTMLElementEvents;
#endif

#ifndef __IHTMLElementCollection_FWD_DEFINED__
#define __IHTMLElementCollection_FWD_DEFINED__
typedef interface IHTMLElementCollection IHTMLElementCollection;
#endif

#ifndef __IHTMLFiltersCollection_FWD_DEFINED__
#define __IHTMLFiltersCollection_FWD_DEFINED__
typedef interface IHTMLFiltersCollection IHTMLFiltersCollection;
#endif

#ifndef __IHTMLElement2_FWD_DEFINED__
#define __IHTMLElement2_FWD_DEFINED__
typedef interface IHTMLElement2 IHTMLElement2;
#endif

#ifndef __IHTMLElement3_FWD_DEFINED__
#define __IHTMLElement3_FWD_DEFINED__
typedef interface IHTMLElement3 IHTMLElement3;
#endif

#ifndef __IHTMLElement4_FWD_DEFINED__
#define __IHTMLElement4_FWD_DEFINED__
typedef interface IHTMLElement4 IHTMLElement4;
#endif

#ifndef __IHTMLElementRender_FWD_DEFINED__
#define __IHTMLElementRender_FWD_DEFINED__
typedef interface IHTMLElementRender IHTMLElementRender;
#endif

#ifndef __IHTMLUniqueName_FWD_DEFINED__
#define __IHTMLUniqueName_FWD_DEFINED__
typedef interface IHTMLUniqueName IHTMLUniqueName;
#endif

#ifndef __IHTMLDatabinding_FWD_DEFINED__
#define __IHTMLDatabinding_FWD_DEFINED__
typedef interface IHTMLDatabinding IHTMLDatabinding;
#endif

#ifndef __IHTMLDocument_FWD_DEFINED__
#define __IHTMLDocument_FWD_DEFINED__
typedef interface IHTMLDocument IHTMLDocument;
#endif

#ifndef __IHTMLElementDefaults_FWD_DEFINED__
#define __IHTMLElementDefaults_FWD_DEFINED__
typedef interface IHTMLElementDefaults IHTMLElementDefaults;
#endif

#ifndef __DispHTMLDefaults_FWD_DEFINED__
#define __DispHTMLDefaults_FWD_DEFINED__
typedef interface DispHTMLDefaults DispHTMLDefaults;
#endif

#ifndef __HTMLDefaults_FWD_DEFINED__
#define __HTMLDefaults_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDefaults HTMLDefaults;
#else
typedef struct HTMLDefaults HTMLDefaults;
#endif
#endif

#ifndef __IHTCDefaultDispatch_FWD_DEFINED__
#define __IHTCDefaultDispatch_FWD_DEFINED__
typedef interface IHTCDefaultDispatch IHTCDefaultDispatch;
#endif

#ifndef __IHTCPropertyBehavior_FWD_DEFINED__
#define __IHTCPropertyBehavior_FWD_DEFINED__
typedef interface IHTCPropertyBehavior IHTCPropertyBehavior;
#endif

#ifndef __IHTCMethodBehavior_FWD_DEFINED__
#define __IHTCMethodBehavior_FWD_DEFINED__
typedef interface IHTCMethodBehavior IHTCMethodBehavior;
#endif

#ifndef __IHTCEventBehavior_FWD_DEFINED__
#define __IHTCEventBehavior_FWD_DEFINED__
typedef interface IHTCEventBehavior IHTCEventBehavior;
#endif

#ifndef __IHTCAttachBehavior_FWD_DEFINED__
#define __IHTCAttachBehavior_FWD_DEFINED__
typedef interface IHTCAttachBehavior IHTCAttachBehavior;
#endif

#ifndef __IHTCAttachBehavior2_FWD_DEFINED__
#define __IHTCAttachBehavior2_FWD_DEFINED__
typedef interface IHTCAttachBehavior2 IHTCAttachBehavior2;
#endif

#ifndef __IHTCDescBehavior_FWD_DEFINED__
#define __IHTCDescBehavior_FWD_DEFINED__
typedef interface IHTCDescBehavior IHTCDescBehavior;
#endif

#ifndef __DispHTCDefaultDispatch_FWD_DEFINED__
#define __DispHTCDefaultDispatch_FWD_DEFINED__
typedef interface DispHTCDefaultDispatch DispHTCDefaultDispatch;
#endif

#ifndef __HTCDefaultDispatch_FWD_DEFINED__
#define __HTCDefaultDispatch_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCDefaultDispatch HTCDefaultDispatch;
#else
typedef struct HTCDefaultDispatch HTCDefaultDispatch;
#endif
#endif

#ifndef __DispHTCPropertyBehavior_FWD_DEFINED__
#define __DispHTCPropertyBehavior_FWD_DEFINED__
typedef interface DispHTCPropertyBehavior DispHTCPropertyBehavior;
#endif

#ifndef __HTCPropertyBehavior_FWD_DEFINED__
#define __HTCPropertyBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCPropertyBehavior HTCPropertyBehavior;
#else
typedef struct HTCPropertyBehavior HTCPropertyBehavior;
#endif
#endif

#ifndef __DispHTCMethodBehavior_FWD_DEFINED__
#define __DispHTCMethodBehavior_FWD_DEFINED__
typedef interface DispHTCMethodBehavior DispHTCMethodBehavior;
#endif

#ifndef __HTCMethodBehavior_FWD_DEFINED__
#define __HTCMethodBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCMethodBehavior HTCMethodBehavior;
#else
typedef struct HTCMethodBehavior HTCMethodBehavior;
#endif
#endif

#ifndef __DispHTCEventBehavior_FWD_DEFINED__
#define __DispHTCEventBehavior_FWD_DEFINED__
typedef interface DispHTCEventBehavior DispHTCEventBehavior;
#endif

#ifndef __HTCEventBehavior_FWD_DEFINED__
#define __HTCEventBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCEventBehavior HTCEventBehavior;
#else
typedef struct HTCEventBehavior HTCEventBehavior;
#endif
#endif

#ifndef __DispHTCAttachBehavior_FWD_DEFINED__
#define __DispHTCAttachBehavior_FWD_DEFINED__
typedef interface DispHTCAttachBehavior DispHTCAttachBehavior;
#endif

#ifndef __HTCAttachBehavior_FWD_DEFINED__
#define __HTCAttachBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCAttachBehavior HTCAttachBehavior;
#else
typedef struct HTCAttachBehavior HTCAttachBehavior;
#endif
#endif

#ifndef __DispHTCDescBehavior_FWD_DEFINED__
#define __DispHTCDescBehavior_FWD_DEFINED__
typedef interface DispHTCDescBehavior DispHTCDescBehavior;
#endif

#ifndef __HTCDescBehavior_FWD_DEFINED__
#define __HTCDescBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTCDescBehavior HTCDescBehavior;
#else
typedef struct HTCDescBehavior HTCDescBehavior;
#endif
#endif

#ifndef __IHTMLUrnCollection_FWD_DEFINED__
#define __IHTMLUrnCollection_FWD_DEFINED__
typedef interface IHTMLUrnCollection IHTMLUrnCollection;
#endif

#ifndef __HTMLUrnCollection_FWD_DEFINED__
#define __HTMLUrnCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLUrnCollection HTMLUrnCollection;
#else
typedef struct HTMLUrnCollection HTMLUrnCollection;
#endif
#endif

#ifndef __IHTMLGenericElement_FWD_DEFINED__
#define __IHTMLGenericElement_FWD_DEFINED__
typedef interface IHTMLGenericElement IHTMLGenericElement;
#endif

#ifndef __DispHTMLGenericElement_FWD_DEFINED__
#define __DispHTMLGenericElement_FWD_DEFINED__
typedef interface DispHTMLGenericElement DispHTMLGenericElement;
#endif

#ifndef __HTMLGenericElement_FWD_DEFINED__
#define __HTMLGenericElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLGenericElement HTMLGenericElement;
#else
typedef struct HTMLGenericElement HTMLGenericElement;
#endif
#endif

#ifndef __IHTMLStyleSheetRule_FWD_DEFINED__
#define __IHTMLStyleSheetRule_FWD_DEFINED__
typedef interface IHTMLStyleSheetRule IHTMLStyleSheetRule;
#endif

#ifndef __IHTMLStyleSheetRulesCollection_FWD_DEFINED__
#define __IHTMLStyleSheetRulesCollection_FWD_DEFINED__
typedef interface IHTMLStyleSheetRulesCollection IHTMLStyleSheetRulesCollection;
#endif

#ifndef __HTMLStyleSheetRule_FWD_DEFINED__
#define __HTMLStyleSheetRule_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetRule HTMLStyleSheetRule;
#else
typedef struct HTMLStyleSheetRule HTMLStyleSheetRule;
#endif
#endif

#ifndef __HTMLStyleSheetRulesCollection_FWD_DEFINED__
#define __HTMLStyleSheetRulesCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetRulesCollection HTMLStyleSheetRulesCollection;
#else
typedef struct HTMLStyleSheetRulesCollection HTMLStyleSheetRulesCollection;
#endif
#endif

#ifndef __IHTMLStyleSheetPage_FWD_DEFINED__
#define __IHTMLStyleSheetPage_FWD_DEFINED__
typedef interface IHTMLStyleSheetPage IHTMLStyleSheetPage;
#endif

#ifndef __IHTMLStyleSheetPagesCollection_FWD_DEFINED__
#define __IHTMLStyleSheetPagesCollection_FWD_DEFINED__
typedef interface IHTMLStyleSheetPagesCollection IHTMLStyleSheetPagesCollection;
#endif

#ifndef __HTMLStyleSheetPage_FWD_DEFINED__
#define __HTMLStyleSheetPage_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetPage HTMLStyleSheetPage;
#else
typedef struct HTMLStyleSheetPage HTMLStyleSheetPage;
#endif
#endif

#ifndef __HTMLStyleSheetPagesCollection_FWD_DEFINED__
#define __HTMLStyleSheetPagesCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetPagesCollection HTMLStyleSheetPagesCollection;
#else
typedef struct HTMLStyleSheetPagesCollection HTMLStyleSheetPagesCollection;
#endif
#endif

#ifndef __IHTMLStyleSheetsCollection_FWD_DEFINED__
#define __IHTMLStyleSheetsCollection_FWD_DEFINED__
typedef interface IHTMLStyleSheetsCollection IHTMLStyleSheetsCollection;
#endif

#ifndef __IHTMLStyleSheet_FWD_DEFINED__
#define __IHTMLStyleSheet_FWD_DEFINED__
typedef interface IHTMLStyleSheet IHTMLStyleSheet;
#endif

#ifndef __IHTMLStyleSheet2_FWD_DEFINED__
#define __IHTMLStyleSheet2_FWD_DEFINED__
typedef interface IHTMLStyleSheet2 IHTMLStyleSheet2;
#endif

#ifndef __DispHTMLStyleSheet_FWD_DEFINED__
#define __DispHTMLStyleSheet_FWD_DEFINED__
typedef interface DispHTMLStyleSheet DispHTMLStyleSheet;
#endif

#ifndef __HTMLStyleSheet_FWD_DEFINED__
#define __HTMLStyleSheet_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheet HTMLStyleSheet;
#else
typedef struct HTMLStyleSheet HTMLStyleSheet;
#endif
#endif

#ifndef __HTMLStyleSheetsCollection_FWD_DEFINED__
#define __HTMLStyleSheetsCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleSheetsCollection HTMLStyleSheetsCollection;
#else
typedef struct HTMLStyleSheetsCollection HTMLStyleSheetsCollection;
#endif
#endif

#ifndef __HTMLLinkElementEvents2_FWD_DEFINED__
#define __HTMLLinkElementEvents2_FWD_DEFINED__
typedef interface HTMLLinkElementEvents2 HTMLLinkElementEvents2;
#endif

#ifndef __HTMLLinkElementEvents_FWD_DEFINED__
#define __HTMLLinkElementEvents_FWD_DEFINED__
typedef interface HTMLLinkElementEvents HTMLLinkElementEvents;
#endif

#ifndef __IHTMLLinkElement_FWD_DEFINED__
#define __IHTMLLinkElement_FWD_DEFINED__
typedef interface IHTMLLinkElement IHTMLLinkElement;
#endif

#ifndef __IHTMLLinkElement2_FWD_DEFINED__
#define __IHTMLLinkElement2_FWD_DEFINED__
typedef interface IHTMLLinkElement2 IHTMLLinkElement2;
#endif

#ifndef __IHTMLLinkElement3_FWD_DEFINED__
#define __IHTMLLinkElement3_FWD_DEFINED__
typedef interface IHTMLLinkElement3 IHTMLLinkElement3;
#endif

#ifndef __DispHTMLLinkElement_FWD_DEFINED__
#define __DispHTMLLinkElement_FWD_DEFINED__
typedef interface DispHTMLLinkElement DispHTMLLinkElement;
#endif

#ifndef __HTMLLinkElement_FWD_DEFINED__
#define __HTMLLinkElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLinkElement HTMLLinkElement;
#else
typedef struct HTMLLinkElement HTMLLinkElement;
#endif
#endif

#ifndef __IHTMLTxtRange_FWD_DEFINED__
#define __IHTMLTxtRange_FWD_DEFINED__
typedef interface IHTMLTxtRange IHTMLTxtRange;
#endif

#ifndef __IHTMLTextRangeMetrics_FWD_DEFINED__
#define __IHTMLTextRangeMetrics_FWD_DEFINED__
typedef interface IHTMLTextRangeMetrics IHTMLTextRangeMetrics;
#endif

#ifndef __IHTMLTextRangeMetrics2_FWD_DEFINED__
#define __IHTMLTextRangeMetrics2_FWD_DEFINED__
typedef interface IHTMLTextRangeMetrics2 IHTMLTextRangeMetrics2;
#endif

#ifndef __IHTMLTxtRangeCollection_FWD_DEFINED__
#define __IHTMLTxtRangeCollection_FWD_DEFINED__
typedef interface IHTMLTxtRangeCollection IHTMLTxtRangeCollection;
#endif

#ifndef __HTMLFormElementEvents2_FWD_DEFINED__
#define __HTMLFormElementEvents2_FWD_DEFINED__
typedef interface HTMLFormElementEvents2 HTMLFormElementEvents2;
#endif

#ifndef __HTMLFormElementEvents_FWD_DEFINED__
#define __HTMLFormElementEvents_FWD_DEFINED__
typedef interface HTMLFormElementEvents HTMLFormElementEvents;
#endif

#ifndef __IHTMLFormElement_FWD_DEFINED__
#define __IHTMLFormElement_FWD_DEFINED__
typedef interface IHTMLFormElement IHTMLFormElement;
#endif

#ifndef __IHTMLFormElement2_FWD_DEFINED__
#define __IHTMLFormElement2_FWD_DEFINED__
typedef interface IHTMLFormElement2 IHTMLFormElement2;
#endif

#ifndef __IHTMLFormElement3_FWD_DEFINED__
#define __IHTMLFormElement3_FWD_DEFINED__
typedef interface IHTMLFormElement3 IHTMLFormElement3;
#endif

#ifndef __IHTMLSubmitData_FWD_DEFINED__
#define __IHTMLSubmitData_FWD_DEFINED__
typedef interface IHTMLSubmitData IHTMLSubmitData;
#endif

#ifndef __DispHTMLFormElement_FWD_DEFINED__
#define __DispHTMLFormElement_FWD_DEFINED__
typedef interface DispHTMLFormElement DispHTMLFormElement;
#endif

#ifndef __HTMLFormElement_FWD_DEFINED__
#define __HTMLFormElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFormElement HTMLFormElement;
#else
typedef struct HTMLFormElement HTMLFormElement;
#endif
#endif

#ifndef __HTMLControlElementEvents2_FWD_DEFINED__
#define __HTMLControlElementEvents2_FWD_DEFINED__
typedef interface HTMLControlElementEvents2 HTMLControlElementEvents2;
#endif

#ifndef __HTMLControlElementEvents_FWD_DEFINED__
#define __HTMLControlElementEvents_FWD_DEFINED__
typedef interface HTMLControlElementEvents HTMLControlElementEvents;
#endif

#ifndef __IHTMLControlElement_FWD_DEFINED__
#define __IHTMLControlElement_FWD_DEFINED__
typedef interface IHTMLControlElement IHTMLControlElement;
#endif

#ifndef __IHTMLTextElement_FWD_DEFINED__
#define __IHTMLTextElement_FWD_DEFINED__
typedef interface IHTMLTextElement IHTMLTextElement;
#endif

#ifndef __DispHTMLTextElement_FWD_DEFINED__
#define __DispHTMLTextElement_FWD_DEFINED__
typedef interface DispHTMLTextElement DispHTMLTextElement;
#endif

#ifndef __HTMLTextElement_FWD_DEFINED__
#define __HTMLTextElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTextElement HTMLTextElement;
#else
typedef struct HTMLTextElement HTMLTextElement;
#endif
#endif

#ifndef __HTMLTextContainerEvents2_FWD_DEFINED__
#define __HTMLTextContainerEvents2_FWD_DEFINED__
typedef interface HTMLTextContainerEvents2 HTMLTextContainerEvents2;
#endif

#ifndef __HTMLTextContainerEvents_FWD_DEFINED__
#define __HTMLTextContainerEvents_FWD_DEFINED__
typedef interface HTMLTextContainerEvents HTMLTextContainerEvents;
#endif

#ifndef __IHTMLTextContainer_FWD_DEFINED__
#define __IHTMLTextContainer_FWD_DEFINED__
typedef interface IHTMLTextContainer IHTMLTextContainer;
#endif

#ifndef __IHTMLControlRange_FWD_DEFINED__
#define __IHTMLControlRange_FWD_DEFINED__
typedef interface IHTMLControlRange IHTMLControlRange;
#endif

#ifndef __IHTMLControlRange2_FWD_DEFINED__
#define __IHTMLControlRange2_FWD_DEFINED__
typedef interface IHTMLControlRange2 IHTMLControlRange2;
#endif

#ifndef __HTMLImgEvents2_FWD_DEFINED__
#define __HTMLImgEvents2_FWD_DEFINED__
typedef interface HTMLImgEvents2 HTMLImgEvents2;
#endif

#ifndef __HTMLImgEvents_FWD_DEFINED__
#define __HTMLImgEvents_FWD_DEFINED__
typedef interface HTMLImgEvents HTMLImgEvents;
#endif

#ifndef __IHTMLImgElement_FWD_DEFINED__
#define __IHTMLImgElement_FWD_DEFINED__
typedef interface IHTMLImgElement IHTMLImgElement;
#endif

#ifndef __IHTMLImgElement2_FWD_DEFINED__
#define __IHTMLImgElement2_FWD_DEFINED__
typedef interface IHTMLImgElement2 IHTMLImgElement2;
#endif

#ifndef __IHTMLImageElementFactory_FWD_DEFINED__
#define __IHTMLImageElementFactory_FWD_DEFINED__
typedef interface IHTMLImageElementFactory IHTMLImageElementFactory;
#endif

#ifndef __DispHTMLImg_FWD_DEFINED__
#define __DispHTMLImg_FWD_DEFINED__
typedef interface DispHTMLImg DispHTMLImg;
#endif

#ifndef __HTMLImg_FWD_DEFINED__
#define __HTMLImg_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLImg HTMLImg;
#else
typedef struct HTMLImg HTMLImg;
#endif
#endif

#ifndef __HTMLImageElementFactory_FWD_DEFINED__
#define __HTMLImageElementFactory_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLImageElementFactory HTMLImageElementFactory;
#else
typedef struct HTMLImageElementFactory HTMLImageElementFactory;
#endif
#endif

#ifndef __IHTMLBodyElement_FWD_DEFINED__
#define __IHTMLBodyElement_FWD_DEFINED__
typedef interface IHTMLBodyElement IHTMLBodyElement;
#endif

#ifndef __IHTMLBodyElement2_FWD_DEFINED__
#define __IHTMLBodyElement2_FWD_DEFINED__
typedef interface IHTMLBodyElement2 IHTMLBodyElement2;
#endif

#ifndef __DispHTMLBody_FWD_DEFINED__
#define __DispHTMLBody_FWD_DEFINED__
typedef interface DispHTMLBody DispHTMLBody;
#endif

#ifndef __HTMLBody_FWD_DEFINED__
#define __HTMLBody_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBody HTMLBody;
#else
typedef struct HTMLBody HTMLBody;
#endif
#endif

#ifndef __IHTMLFontElement_FWD_DEFINED__
#define __IHTMLFontElement_FWD_DEFINED__
typedef interface IHTMLFontElement IHTMLFontElement;
#endif

#ifndef __DispHTMLFontElement_FWD_DEFINED__
#define __DispHTMLFontElement_FWD_DEFINED__
typedef interface DispHTMLFontElement DispHTMLFontElement;
#endif

#ifndef __HTMLFontElement_FWD_DEFINED__
#define __HTMLFontElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFontElement HTMLFontElement;
#else
typedef struct HTMLFontElement HTMLFontElement;
#endif
#endif

#ifndef __HTMLAnchorEvents2_FWD_DEFINED__
#define __HTMLAnchorEvents2_FWD_DEFINED__
typedef interface HTMLAnchorEvents2 HTMLAnchorEvents2;
#endif

#ifndef __HTMLAnchorEvents_FWD_DEFINED__
#define __HTMLAnchorEvents_FWD_DEFINED__
typedef interface HTMLAnchorEvents HTMLAnchorEvents;
#endif

#ifndef __IHTMLAnchorElement_FWD_DEFINED__
#define __IHTMLAnchorElement_FWD_DEFINED__
typedef interface IHTMLAnchorElement IHTMLAnchorElement;
#endif

#ifndef __IHTMLAnchorElement2_FWD_DEFINED__
#define __IHTMLAnchorElement2_FWD_DEFINED__
typedef interface IHTMLAnchorElement2 IHTMLAnchorElement2;
#endif

#ifndef __DispHTMLAnchorElement_FWD_DEFINED__
#define __DispHTMLAnchorElement_FWD_DEFINED__
typedef interface DispHTMLAnchorElement DispHTMLAnchorElement;
#endif

#ifndef __HTMLAnchorElement_FWD_DEFINED__
#define __HTMLAnchorElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAnchorElement HTMLAnchorElement;
#else
typedef struct HTMLAnchorElement HTMLAnchorElement;
#endif
#endif

#ifndef __HTMLLabelEvents2_FWD_DEFINED__
#define __HTMLLabelEvents2_FWD_DEFINED__
typedef interface HTMLLabelEvents2 HTMLLabelEvents2;
#endif

#ifndef __HTMLLabelEvents_FWD_DEFINED__
#define __HTMLLabelEvents_FWD_DEFINED__
typedef interface HTMLLabelEvents HTMLLabelEvents;
#endif

#ifndef __IHTMLLabelElement_FWD_DEFINED__
#define __IHTMLLabelElement_FWD_DEFINED__
typedef interface IHTMLLabelElement IHTMLLabelElement;
#endif

#ifndef __IHTMLLabelElement2_FWD_DEFINED__
#define __IHTMLLabelElement2_FWD_DEFINED__
typedef interface IHTMLLabelElement2 IHTMLLabelElement2;
#endif

#ifndef __DispHTMLLabelElement_FWD_DEFINED__
#define __DispHTMLLabelElement_FWD_DEFINED__
typedef interface DispHTMLLabelElement DispHTMLLabelElement;
#endif

#ifndef __HTMLLabelElement_FWD_DEFINED__
#define __HTMLLabelElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLabelElement HTMLLabelElement;
#else
typedef struct HTMLLabelElement HTMLLabelElement;
#endif
#endif

#ifndef __IHTMLListElement_FWD_DEFINED__
#define __IHTMLListElement_FWD_DEFINED__
typedef interface IHTMLListElement IHTMLListElement;
#endif

#ifndef __IHTMLListElement2_FWD_DEFINED__
#define __IHTMLListElement2_FWD_DEFINED__
typedef interface IHTMLListElement2 IHTMLListElement2;
#endif

#ifndef __DispHTMLListElement_FWD_DEFINED__
#define __DispHTMLListElement_FWD_DEFINED__
typedef interface DispHTMLListElement DispHTMLListElement;
#endif

#ifndef __HTMLListElement_FWD_DEFINED__
#define __HTMLListElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLListElement HTMLListElement;
#else
typedef struct HTMLListElement HTMLListElement;
#endif
#endif

#ifndef __IHTMLUListElement_FWD_DEFINED__
#define __IHTMLUListElement_FWD_DEFINED__
typedef interface IHTMLUListElement IHTMLUListElement;
#endif

#ifndef __DispHTMLUListElement_FWD_DEFINED__
#define __DispHTMLUListElement_FWD_DEFINED__
typedef interface DispHTMLUListElement DispHTMLUListElement;
#endif

#ifndef __HTMLUListElement_FWD_DEFINED__
#define __HTMLUListElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLUListElement HTMLUListElement;
#else
typedef struct HTMLUListElement HTMLUListElement;
#endif
#endif

#ifndef __IHTMLOListElement_FWD_DEFINED__
#define __IHTMLOListElement_FWD_DEFINED__
typedef interface IHTMLOListElement IHTMLOListElement;
#endif

#ifndef __DispHTMLOListElement_FWD_DEFINED__
#define __DispHTMLOListElement_FWD_DEFINED__
typedef interface DispHTMLOListElement DispHTMLOListElement;
#endif

#ifndef __HTMLOListElement_FWD_DEFINED__
#define __HTMLOListElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLOListElement HTMLOListElement;
#else
typedef struct HTMLOListElement HTMLOListElement;
#endif
#endif

#ifndef __IHTMLLIElement_FWD_DEFINED__
#define __IHTMLLIElement_FWD_DEFINED__
typedef interface IHTMLLIElement IHTMLLIElement;
#endif

#ifndef __DispHTMLLIElement_FWD_DEFINED__
#define __DispHTMLLIElement_FWD_DEFINED__
typedef interface DispHTMLLIElement DispHTMLLIElement;
#endif

#ifndef __HTMLLIElement_FWD_DEFINED__
#define __HTMLLIElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLIElement HTMLLIElement;
#else
typedef struct HTMLLIElement HTMLLIElement;
#endif
#endif

#ifndef __IHTMLBlockElement_FWD_DEFINED__
#define __IHTMLBlockElement_FWD_DEFINED__
typedef interface IHTMLBlockElement IHTMLBlockElement;
#endif

#ifndef __IHTMLBlockElement2_FWD_DEFINED__
#define __IHTMLBlockElement2_FWD_DEFINED__
typedef interface IHTMLBlockElement2 IHTMLBlockElement2;
#endif

#ifndef __DispHTMLBlockElement_FWD_DEFINED__
#define __DispHTMLBlockElement_FWD_DEFINED__
typedef interface DispHTMLBlockElement DispHTMLBlockElement;
#endif

#ifndef __HTMLBlockElement_FWD_DEFINED__
#define __HTMLBlockElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBlockElement HTMLBlockElement;
#else
typedef struct HTMLBlockElement HTMLBlockElement;
#endif
#endif

#ifndef __IHTMLDivElement_FWD_DEFINED__
#define __IHTMLDivElement_FWD_DEFINED__
typedef interface IHTMLDivElement IHTMLDivElement;
#endif

#ifndef __DispHTMLDivElement_FWD_DEFINED__
#define __DispHTMLDivElement_FWD_DEFINED__
typedef interface DispHTMLDivElement DispHTMLDivElement;
#endif

#ifndef __HTMLDivElement_FWD_DEFINED__
#define __HTMLDivElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDivElement HTMLDivElement;
#else
typedef struct HTMLDivElement HTMLDivElement;
#endif
#endif

#ifndef __IHTMLDDElement_FWD_DEFINED__
#define __IHTMLDDElement_FWD_DEFINED__
typedef interface IHTMLDDElement IHTMLDDElement;
#endif

#ifndef __DispHTMLDDElement_FWD_DEFINED__
#define __DispHTMLDDElement_FWD_DEFINED__
typedef interface DispHTMLDDElement DispHTMLDDElement;
#endif

#ifndef __HTMLDDElement_FWD_DEFINED__
#define __HTMLDDElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDDElement HTMLDDElement;
#else
typedef struct HTMLDDElement HTMLDDElement;
#endif
#endif

#ifndef __IHTMLDTElement_FWD_DEFINED__
#define __IHTMLDTElement_FWD_DEFINED__
typedef interface IHTMLDTElement IHTMLDTElement;
#endif

#ifndef __DispHTMLDTElement_FWD_DEFINED__
#define __DispHTMLDTElement_FWD_DEFINED__
typedef interface DispHTMLDTElement DispHTMLDTElement;
#endif

#ifndef __HTMLDTElement_FWD_DEFINED__
#define __HTMLDTElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDTElement HTMLDTElement;
#else
typedef struct HTMLDTElement HTMLDTElement;
#endif
#endif

#ifndef __IHTMLBRElement_FWD_DEFINED__
#define __IHTMLBRElement_FWD_DEFINED__
typedef interface IHTMLBRElement IHTMLBRElement;
#endif

#ifndef __DispHTMLBRElement_FWD_DEFINED__
#define __DispHTMLBRElement_FWD_DEFINED__
typedef interface DispHTMLBRElement DispHTMLBRElement;
#endif

#ifndef __HTMLBRElement_FWD_DEFINED__
#define __HTMLBRElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBRElement HTMLBRElement;
#else
typedef struct HTMLBRElement HTMLBRElement;
#endif
#endif

#ifndef __IHTMLDListElement_FWD_DEFINED__
#define __IHTMLDListElement_FWD_DEFINED__
typedef interface IHTMLDListElement IHTMLDListElement;
#endif

#ifndef __DispHTMLDListElement_FWD_DEFINED__
#define __DispHTMLDListElement_FWD_DEFINED__
typedef interface DispHTMLDListElement DispHTMLDListElement;
#endif

#ifndef __HTMLDListElement_FWD_DEFINED__
#define __HTMLDListElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDListElement HTMLDListElement;
#else
typedef struct HTMLDListElement HTMLDListElement;
#endif
#endif

#ifndef __IHTMLHRElement_FWD_DEFINED__
#define __IHTMLHRElement_FWD_DEFINED__
typedef interface IHTMLHRElement IHTMLHRElement;
#endif

#ifndef __DispHTMLHRElement_FWD_DEFINED__
#define __DispHTMLHRElement_FWD_DEFINED__
typedef interface DispHTMLHRElement DispHTMLHRElement;
#endif

#ifndef __HTMLHRElement_FWD_DEFINED__
#define __HTMLHRElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHRElement HTMLHRElement;
#else
typedef struct HTMLHRElement HTMLHRElement;
#endif
#endif

#ifndef __IHTMLParaElement_FWD_DEFINED__
#define __IHTMLParaElement_FWD_DEFINED__
typedef interface IHTMLParaElement IHTMLParaElement;
#endif

#ifndef __DispHTMLParaElement_FWD_DEFINED__
#define __DispHTMLParaElement_FWD_DEFINED__
typedef interface DispHTMLParaElement DispHTMLParaElement;
#endif

#ifndef __HTMLParaElement_FWD_DEFINED__
#define __HTMLParaElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLParaElement HTMLParaElement;
#else
typedef struct HTMLParaElement HTMLParaElement;
#endif
#endif

#ifndef __IHTMLElementCollection2_FWD_DEFINED__
#define __IHTMLElementCollection2_FWD_DEFINED__
typedef interface IHTMLElementCollection2 IHTMLElementCollection2;
#endif

#ifndef __IHTMLElementCollection3_FWD_DEFINED__
#define __IHTMLElementCollection3_FWD_DEFINED__
typedef interface IHTMLElementCollection3 IHTMLElementCollection3;
#endif

#ifndef __DispHTMLElementCollection_FWD_DEFINED__
#define __DispHTMLElementCollection_FWD_DEFINED__
typedef interface DispHTMLElementCollection DispHTMLElementCollection;
#endif

#ifndef __HTMLElementCollection_FWD_DEFINED__
#define __HTMLElementCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLElementCollection HTMLElementCollection;
#else
typedef struct HTMLElementCollection HTMLElementCollection;
#endif
#endif

#ifndef __IHTMLHeaderElement_FWD_DEFINED__
#define __IHTMLHeaderElement_FWD_DEFINED__
typedef interface IHTMLHeaderElement IHTMLHeaderElement;
#endif

#ifndef __DispHTMLHeaderElement_FWD_DEFINED__
#define __DispHTMLHeaderElement_FWD_DEFINED__
typedef interface DispHTMLHeaderElement DispHTMLHeaderElement;
#endif

#ifndef __HTMLHeaderElement_FWD_DEFINED__
#define __HTMLHeaderElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHeaderElement HTMLHeaderElement;
#else
typedef struct HTMLHeaderElement HTMLHeaderElement;
#endif
#endif

#ifndef __HTMLSelectElementEvents2_FWD_DEFINED__
#define __HTMLSelectElementEvents2_FWD_DEFINED__
typedef interface HTMLSelectElementEvents2 HTMLSelectElementEvents2;
#endif

#ifndef __HTMLSelectElementEvents_FWD_DEFINED__
#define __HTMLSelectElementEvents_FWD_DEFINED__
typedef interface HTMLSelectElementEvents HTMLSelectElementEvents;
#endif

#ifndef __IHTMLSelectElement_FWD_DEFINED__
#define __IHTMLSelectElement_FWD_DEFINED__
typedef interface IHTMLSelectElement IHTMLSelectElement;
#endif

#ifndef __IHTMLSelectElement2_FWD_DEFINED__
#define __IHTMLSelectElement2_FWD_DEFINED__
typedef interface IHTMLSelectElement2 IHTMLSelectElement2;
#endif

#ifndef __IHTMLSelectElement4_FWD_DEFINED__
#define __IHTMLSelectElement4_FWD_DEFINED__
typedef interface IHTMLSelectElement4 IHTMLSelectElement4;
#endif

#ifndef __DispHTMLSelectElement_FWD_DEFINED__
#define __DispHTMLSelectElement_FWD_DEFINED__
typedef interface DispHTMLSelectElement DispHTMLSelectElement;
#endif

#ifndef __HTMLSelectElement_FWD_DEFINED__
#define __HTMLSelectElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLSelectElement HTMLSelectElement;
#else
typedef struct HTMLSelectElement HTMLSelectElement;
#endif
#endif

#ifndef __IHTMLSelectionObject_FWD_DEFINED__
#define __IHTMLSelectionObject_FWD_DEFINED__
typedef interface IHTMLSelectionObject IHTMLSelectionObject;
#endif

#ifndef __IHTMLSelectionObject2_FWD_DEFINED__
#define __IHTMLSelectionObject2_FWD_DEFINED__
typedef interface IHTMLSelectionObject2 IHTMLSelectionObject2;
#endif

#ifndef __IHTMLOptionElement_FWD_DEFINED__
#define __IHTMLOptionElement_FWD_DEFINED__
typedef interface IHTMLOptionElement IHTMLOptionElement;
#endif

#ifndef __IHTMLOptionElement3_FWD_DEFINED__
#define __IHTMLOptionElement3_FWD_DEFINED__
typedef interface IHTMLOptionElement3 IHTMLOptionElement3;
#endif

#ifndef __IHTMLOptionElementFactory_FWD_DEFINED__
#define __IHTMLOptionElementFactory_FWD_DEFINED__
typedef interface IHTMLOptionElementFactory IHTMLOptionElementFactory;
#endif

#ifndef __DispHTMLOptionElement_FWD_DEFINED__
#define __DispHTMLOptionElement_FWD_DEFINED__
typedef interface DispHTMLOptionElement DispHTMLOptionElement;
#endif

#ifndef __HTMLOptionElement_FWD_DEFINED__
#define __HTMLOptionElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLOptionElement HTMLOptionElement;
#else
typedef struct HTMLOptionElement HTMLOptionElement;
#endif
#endif

#ifndef __HTMLOptionElementFactory_FWD_DEFINED__
#define __HTMLOptionElementFactory_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLOptionElementFactory HTMLOptionElementFactory;
#else
typedef struct HTMLOptionElementFactory HTMLOptionElementFactory;
#endif
#endif

#ifndef __HTMLButtonElementEvents2_FWD_DEFINED__
#define __HTMLButtonElementEvents2_FWD_DEFINED__
typedef interface HTMLButtonElementEvents2 HTMLButtonElementEvents2;
#endif

#ifndef __HTMLButtonElementEvents_FWD_DEFINED__
#define __HTMLButtonElementEvents_FWD_DEFINED__
typedef interface HTMLButtonElementEvents HTMLButtonElementEvents;
#endif

#ifndef __HTMLInputTextElementEvents2_FWD_DEFINED__
#define __HTMLInputTextElementEvents2_FWD_DEFINED__
typedef interface HTMLInputTextElementEvents2 HTMLInputTextElementEvents2;
#endif

#ifndef __HTMLOptionButtonElementEvents2_FWD_DEFINED__
#define __HTMLOptionButtonElementEvents2_FWD_DEFINED__
typedef interface HTMLOptionButtonElementEvents2 HTMLOptionButtonElementEvents2;
#endif

#ifndef __HTMLInputFileElementEvents2_FWD_DEFINED__
#define __HTMLInputFileElementEvents2_FWD_DEFINED__
typedef interface HTMLInputFileElementEvents2 HTMLInputFileElementEvents2;
#endif

#ifndef __HTMLInputImageEvents2_FWD_DEFINED__
#define __HTMLInputImageEvents2_FWD_DEFINED__
typedef interface HTMLInputImageEvents2 HTMLInputImageEvents2;
#endif

#ifndef __HTMLInputTextElementEvents_FWD_DEFINED__
#define __HTMLInputTextElementEvents_FWD_DEFINED__
typedef interface HTMLInputTextElementEvents HTMLInputTextElementEvents;
#endif

#ifndef __HTMLOptionButtonElementEvents_FWD_DEFINED__
#define __HTMLOptionButtonElementEvents_FWD_DEFINED__
typedef interface HTMLOptionButtonElementEvents HTMLOptionButtonElementEvents;
#endif

#ifndef __HTMLInputFileElementEvents_FWD_DEFINED__
#define __HTMLInputFileElementEvents_FWD_DEFINED__
typedef interface HTMLInputFileElementEvents HTMLInputFileElementEvents;
#endif

#ifndef __HTMLInputImageEvents_FWD_DEFINED__
#define __HTMLInputImageEvents_FWD_DEFINED__
typedef interface HTMLInputImageEvents HTMLInputImageEvents;
#endif

#ifndef __IHTMLInputElement_FWD_DEFINED__
#define __IHTMLInputElement_FWD_DEFINED__
typedef interface IHTMLInputElement IHTMLInputElement;
#endif

#ifndef __IHTMLInputElement2_FWD_DEFINED__
#define __IHTMLInputElement2_FWD_DEFINED__
typedef interface IHTMLInputElement2 IHTMLInputElement2;
#endif

#ifndef __IHTMLInputButtonElement_FWD_DEFINED__
#define __IHTMLInputButtonElement_FWD_DEFINED__
typedef interface IHTMLInputButtonElement IHTMLInputButtonElement;
#endif

#ifndef __IHTMLInputHiddenElement_FWD_DEFINED__
#define __IHTMLInputHiddenElement_FWD_DEFINED__
typedef interface IHTMLInputHiddenElement IHTMLInputHiddenElement;
#endif

#ifndef __IHTMLInputTextElement_FWD_DEFINED__
#define __IHTMLInputTextElement_FWD_DEFINED__
typedef interface IHTMLInputTextElement IHTMLInputTextElement;
#endif

#ifndef __IHTMLInputFileElement_FWD_DEFINED__
#define __IHTMLInputFileElement_FWD_DEFINED__
typedef interface IHTMLInputFileElement IHTMLInputFileElement;
#endif

#ifndef __IHTMLOptionButtonElement_FWD_DEFINED__
#define __IHTMLOptionButtonElement_FWD_DEFINED__
typedef interface IHTMLOptionButtonElement IHTMLOptionButtonElement;
#endif

#ifndef __IHTMLInputImage_FWD_DEFINED__
#define __IHTMLInputImage_FWD_DEFINED__
typedef interface IHTMLInputImage IHTMLInputImage;
#endif

#ifndef __DispHTMLInputElement_FWD_DEFINED__
#define __DispHTMLInputElement_FWD_DEFINED__
typedef interface DispHTMLInputElement DispHTMLInputElement;
#endif

#ifndef __HTMLInputElement_FWD_DEFINED__
#define __HTMLInputElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputElement HTMLInputElement;
#else
typedef struct HTMLInputElement HTMLInputElement;
#endif
#endif

#ifndef __IHTMLTextAreaElement_FWD_DEFINED__
#define __IHTMLTextAreaElement_FWD_DEFINED__
typedef interface IHTMLTextAreaElement IHTMLTextAreaElement;
#endif

#ifndef __DispHTMLTextAreaElement_FWD_DEFINED__
#define __DispHTMLTextAreaElement_FWD_DEFINED__
typedef interface DispHTMLTextAreaElement DispHTMLTextAreaElement;
#endif

#ifndef __HTMLTextAreaElement_FWD_DEFINED__
#define __HTMLTextAreaElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTextAreaElement HTMLTextAreaElement;
#else
typedef struct HTMLTextAreaElement HTMLTextAreaElement;
#endif
#endif

#ifndef __DispHTMLRichtextElement_FWD_DEFINED__
#define __DispHTMLRichtextElement_FWD_DEFINED__
typedef interface DispHTMLRichtextElement DispHTMLRichtextElement;
#endif

#ifndef __HTMLRichtextElement_FWD_DEFINED__
#define __HTMLRichtextElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLRichtextElement HTMLRichtextElement;
#else
typedef struct HTMLRichtextElement HTMLRichtextElement;
#endif
#endif

#ifndef __IHTMLButtonElement_FWD_DEFINED__
#define __IHTMLButtonElement_FWD_DEFINED__
typedef interface IHTMLButtonElement IHTMLButtonElement;
#endif

#ifndef __DispHTMLButtonElement_FWD_DEFINED__
#define __DispHTMLButtonElement_FWD_DEFINED__
typedef interface DispHTMLButtonElement DispHTMLButtonElement;
#endif

#ifndef __HTMLButtonElement_FWD_DEFINED__
#define __HTMLButtonElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLButtonElement HTMLButtonElement;
#else
typedef struct HTMLButtonElement HTMLButtonElement;
#endif
#endif

#ifndef __HTMLMarqueeElementEvents2_FWD_DEFINED__
#define __HTMLMarqueeElementEvents2_FWD_DEFINED__
typedef interface HTMLMarqueeElementEvents2 HTMLMarqueeElementEvents2;
#endif

#ifndef __HTMLMarqueeElementEvents_FWD_DEFINED__
#define __HTMLMarqueeElementEvents_FWD_DEFINED__
typedef interface HTMLMarqueeElementEvents HTMLMarqueeElementEvents;
#endif

#ifndef __IHTMLMarqueeElement_FWD_DEFINED__
#define __IHTMLMarqueeElement_FWD_DEFINED__
typedef interface IHTMLMarqueeElement IHTMLMarqueeElement;
#endif

#ifndef __DispHTMLMarqueeElement_FWD_DEFINED__
#define __DispHTMLMarqueeElement_FWD_DEFINED__
typedef interface DispHTMLMarqueeElement DispHTMLMarqueeElement;
#endif

#ifndef __HTMLMarqueeElement_FWD_DEFINED__
#define __HTMLMarqueeElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLMarqueeElement HTMLMarqueeElement;
#else
typedef struct HTMLMarqueeElement HTMLMarqueeElement;
#endif
#endif

#ifndef __IHTMLHtmlElement_FWD_DEFINED__
#define __IHTMLHtmlElement_FWD_DEFINED__
typedef interface IHTMLHtmlElement IHTMLHtmlElement;
#endif

#ifndef __IHTMLHeadElement_FWD_DEFINED__
#define __IHTMLHeadElement_FWD_DEFINED__
typedef interface IHTMLHeadElement IHTMLHeadElement;
#endif

#ifndef __IHTMLTitleElement_FWD_DEFINED__
#define __IHTMLTitleElement_FWD_DEFINED__
typedef interface IHTMLTitleElement IHTMLTitleElement;
#endif

#ifndef __IHTMLMetaElement_FWD_DEFINED__
#define __IHTMLMetaElement_FWD_DEFINED__
typedef interface IHTMLMetaElement IHTMLMetaElement;
#endif

#ifndef __IHTMLMetaElement2_FWD_DEFINED__
#define __IHTMLMetaElement2_FWD_DEFINED__
typedef interface IHTMLMetaElement2 IHTMLMetaElement2;
#endif

#ifndef __IHTMLBaseElement_FWD_DEFINED__
#define __IHTMLBaseElement_FWD_DEFINED__
typedef interface IHTMLBaseElement IHTMLBaseElement;
#endif

#ifndef __IHTMLIsIndexElement_FWD_DEFINED__
#define __IHTMLIsIndexElement_FWD_DEFINED__
typedef interface IHTMLIsIndexElement IHTMLIsIndexElement;
#endif

#ifndef __IHTMLIsIndexElement2_FWD_DEFINED__
#define __IHTMLIsIndexElement2_FWD_DEFINED__
typedef interface IHTMLIsIndexElement2 IHTMLIsIndexElement2;
#endif

#ifndef __IHTMLNextIdElement_FWD_DEFINED__
#define __IHTMLNextIdElement_FWD_DEFINED__
typedef interface IHTMLNextIdElement IHTMLNextIdElement;
#endif

#ifndef __DispHTMLHtmlElement_FWD_DEFINED__
#define __DispHTMLHtmlElement_FWD_DEFINED__
typedef interface DispHTMLHtmlElement DispHTMLHtmlElement;
#endif

#ifndef __HTMLHtmlElement_FWD_DEFINED__
#define __HTMLHtmlElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHtmlElement HTMLHtmlElement;
#else
typedef struct HTMLHtmlElement HTMLHtmlElement;
#endif
#endif

#ifndef __DispHTMLHeadElement_FWD_DEFINED__
#define __DispHTMLHeadElement_FWD_DEFINED__
typedef interface DispHTMLHeadElement DispHTMLHeadElement;
#endif

#ifndef __HTMLHeadElement_FWD_DEFINED__
#define __HTMLHeadElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHeadElement HTMLHeadElement;
#else
typedef struct HTMLHeadElement HTMLHeadElement;
#endif
#endif

#ifndef __DispHTMLTitleElement_FWD_DEFINED__
#define __DispHTMLTitleElement_FWD_DEFINED__
typedef interface DispHTMLTitleElement DispHTMLTitleElement;
#endif

#ifndef __HTMLTitleElement_FWD_DEFINED__
#define __HTMLTitleElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTitleElement HTMLTitleElement;
#else
typedef struct HTMLTitleElement HTMLTitleElement;
#endif
#endif

#ifndef __DispHTMLMetaElement_FWD_DEFINED__
#define __DispHTMLMetaElement_FWD_DEFINED__
typedef interface DispHTMLMetaElement DispHTMLMetaElement;
#endif

#ifndef __HTMLMetaElement_FWD_DEFINED__
#define __HTMLMetaElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLMetaElement HTMLMetaElement;
#else
typedef struct HTMLMetaElement HTMLMetaElement;
#endif
#endif

#ifndef __DispHTMLBaseElement_FWD_DEFINED__
#define __DispHTMLBaseElement_FWD_DEFINED__
typedef interface DispHTMLBaseElement DispHTMLBaseElement;
#endif

#ifndef __HTMLBaseElement_FWD_DEFINED__
#define __HTMLBaseElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBaseElement HTMLBaseElement;
#else
typedef struct HTMLBaseElement HTMLBaseElement;
#endif
#endif

#ifndef __DispHTMLIsIndexElement_FWD_DEFINED__
#define __DispHTMLIsIndexElement_FWD_DEFINED__
typedef interface DispHTMLIsIndexElement DispHTMLIsIndexElement;
#endif

#ifndef __HTMLIsIndexElement_FWD_DEFINED__
#define __HTMLIsIndexElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLIsIndexElement HTMLIsIndexElement;
#else
typedef struct HTMLIsIndexElement HTMLIsIndexElement;
#endif
#endif

#ifndef __DispHTMLNextIdElement_FWD_DEFINED__
#define __DispHTMLNextIdElement_FWD_DEFINED__
typedef interface DispHTMLNextIdElement DispHTMLNextIdElement;
#endif

#ifndef __HTMLNextIdElement_FWD_DEFINED__
#define __HTMLNextIdElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNextIdElement HTMLNextIdElement;
#else
typedef struct HTMLNextIdElement HTMLNextIdElement;
#endif
#endif

#ifndef __IHTMLBaseFontElement_FWD_DEFINED__
#define __IHTMLBaseFontElement_FWD_DEFINED__
typedef interface IHTMLBaseFontElement IHTMLBaseFontElement;
#endif

#ifndef __DispHTMLBaseFontElement_FWD_DEFINED__
#define __DispHTMLBaseFontElement_FWD_DEFINED__
typedef interface DispHTMLBaseFontElement DispHTMLBaseFontElement;
#endif

#ifndef __HTMLBaseFontElement_FWD_DEFINED__
#define __HTMLBaseFontElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBaseFontElement HTMLBaseFontElement;
#else
typedef struct HTMLBaseFontElement HTMLBaseFontElement;
#endif
#endif

#ifndef __IHTMLUnknownElement_FWD_DEFINED__
#define __IHTMLUnknownElement_FWD_DEFINED__
typedef interface IHTMLUnknownElement IHTMLUnknownElement;
#endif

#ifndef __DispHTMLUnknownElement_FWD_DEFINED__
#define __DispHTMLUnknownElement_FWD_DEFINED__
typedef interface DispHTMLUnknownElement DispHTMLUnknownElement;
#endif

#ifndef __HTMLUnknownElement_FWD_DEFINED__
#define __HTMLUnknownElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLUnknownElement HTMLUnknownElement;
#else
typedef struct HTMLUnknownElement HTMLUnknownElement;
#endif
#endif

#ifndef __IOmHistory_FWD_DEFINED__
#define __IOmHistory_FWD_DEFINED__
typedef interface IOmHistory IOmHistory;
#endif

#ifndef __IHTMLMimeTypesCollection_FWD_DEFINED__
#define __IHTMLMimeTypesCollection_FWD_DEFINED__
typedef interface IHTMLMimeTypesCollection IHTMLMimeTypesCollection;
#endif

#ifndef __IHTMLPluginsCollection_FWD_DEFINED__
#define __IHTMLPluginsCollection_FWD_DEFINED__
typedef interface IHTMLPluginsCollection IHTMLPluginsCollection;
#endif

#ifndef __IHTMLOpsProfile_FWD_DEFINED__
#define __IHTMLOpsProfile_FWD_DEFINED__
typedef interface IHTMLOpsProfile IHTMLOpsProfile;
#endif

#ifndef __IOmNavigator_FWD_DEFINED__
#define __IOmNavigator_FWD_DEFINED__
typedef interface IOmNavigator IOmNavigator;
#endif

#ifndef __IHTMLLocation_FWD_DEFINED__
#define __IHTMLLocation_FWD_DEFINED__
typedef interface IHTMLLocation IHTMLLocation;
#endif

#ifndef __HTMLHistory_FWD_DEFINED__
#define __HTMLHistory_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLHistory HTMLHistory;
#else
typedef struct HTMLHistory HTMLHistory;
#endif
#endif

#ifndef __CMimeTypes_FWD_DEFINED__
#define __CMimeTypes_FWD_DEFINED__
#ifdef __cplusplus
typedef class CMimeTypes CMimeTypes;
#else
typedef struct CMimeTypes CMimeTypes;
#endif
#endif

#ifndef __CPlugins_FWD_DEFINED__
#define __CPlugins_FWD_DEFINED__
#ifdef __cplusplus
typedef class CPlugins CPlugins;
#else
typedef struct CPlugins CPlugins;
#endif
#endif

#ifndef __COpsProfile_FWD_DEFINED__
#define __COpsProfile_FWD_DEFINED__
#ifdef __cplusplus
typedef class COpsProfile COpsProfile;
#else
typedef struct COpsProfile COpsProfile;
#endif
#endif

#ifndef __HTMLNavigator_FWD_DEFINED__
#define __HTMLNavigator_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNavigator HTMLNavigator;
#else
typedef struct HTMLNavigator HTMLNavigator;
#endif
#endif

#ifndef __HTMLLocation_FWD_DEFINED__
#define __HTMLLocation_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLocation HTMLLocation;
#else
typedef struct HTMLLocation HTMLLocation;
#endif
#endif

#ifndef __IHTMLBookmarkCollection_FWD_DEFINED__
#define __IHTMLBookmarkCollection_FWD_DEFINED__
typedef interface IHTMLBookmarkCollection IHTMLBookmarkCollection;
#endif

#ifndef __IHTMLDataTransfer_FWD_DEFINED__
#define __IHTMLDataTransfer_FWD_DEFINED__
typedef interface IHTMLDataTransfer IHTMLDataTransfer;
#endif

#ifndef __IHTMLEventObj2_FWD_DEFINED__
#define __IHTMLEventObj2_FWD_DEFINED__
typedef interface IHTMLEventObj2 IHTMLEventObj2;
#endif

#ifndef __IHTMLEventObj3_FWD_DEFINED__
#define __IHTMLEventObj3_FWD_DEFINED__
typedef interface IHTMLEventObj3 IHTMLEventObj3;
#endif

#ifndef __IHTMLEventObj4_FWD_DEFINED__
#define __IHTMLEventObj4_FWD_DEFINED__
typedef interface IHTMLEventObj4 IHTMLEventObj4;
#endif

#ifndef __DispCEventObj_FWD_DEFINED__
#define __DispCEventObj_FWD_DEFINED__
typedef interface DispCEventObj DispCEventObj;
#endif

#ifndef __CEventObj_FWD_DEFINED__
#define __CEventObj_FWD_DEFINED__
#ifdef __cplusplus
typedef class CEventObj CEventObj;
#else
typedef struct CEventObj CEventObj;
#endif
#endif

#ifndef __HTMLWindowEvents2_FWD_DEFINED__
#define __HTMLWindowEvents2_FWD_DEFINED__
typedef interface HTMLWindowEvents2 HTMLWindowEvents2;
#endif

#ifndef __HTMLWindowEvents_FWD_DEFINED__
#define __HTMLWindowEvents_FWD_DEFINED__
typedef interface HTMLWindowEvents HTMLWindowEvents;
#endif

#ifndef __IHTMLDocument2_FWD_DEFINED__
#define __IHTMLDocument2_FWD_DEFINED__
typedef interface IHTMLDocument2 IHTMLDocument2;
#endif

#ifndef __IHTMLFramesCollection2_FWD_DEFINED__
#define __IHTMLFramesCollection2_FWD_DEFINED__
typedef interface IHTMLFramesCollection2 IHTMLFramesCollection2;
#endif

#ifndef __IHTMLWindow2_FWD_DEFINED__
#define __IHTMLWindow2_FWD_DEFINED__
typedef interface IHTMLWindow2 IHTMLWindow2;
#endif

#ifndef __IHTMLWindow3_FWD_DEFINED__
#define __IHTMLWindow3_FWD_DEFINED__
typedef interface IHTMLWindow3 IHTMLWindow3;
#endif

#ifndef __IHTMLFrameBase_FWD_DEFINED__
#define __IHTMLFrameBase_FWD_DEFINED__
typedef interface IHTMLFrameBase IHTMLFrameBase;
#endif

#ifndef __IHTMLScreen_FWD_DEFINED__
#define __IHTMLScreen_FWD_DEFINED__
typedef interface IHTMLScreen IHTMLScreen;
#endif

#ifndef __IHTMLScreen2_FWD_DEFINED__
#define __IHTMLScreen2_FWD_DEFINED__
typedef interface IHTMLScreen2 IHTMLScreen2;
#endif

#ifndef __IHTMLWindow4_FWD_DEFINED__
#define __IHTMLWindow4_FWD_DEFINED__
typedef interface IHTMLWindow4 IHTMLWindow4;
#endif

#ifndef __FramesCollection_FWD_DEFINED__
#define __FramesCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class FramesCollection FramesCollection;
#else
typedef struct FramesCollection FramesCollection;
#endif
#endif

#ifndef __DispHTMLScreen_FWD_DEFINED__
#define __DispHTMLScreen_FWD_DEFINED__
typedef interface DispHTMLScreen DispHTMLScreen;
#endif

#ifndef __HTMLScreen_FWD_DEFINED__
#define __HTMLScreen_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLScreen HTMLScreen;
#else
typedef struct HTMLScreen HTMLScreen;
#endif
#endif

#ifndef __DispHTMLWindow2_FWD_DEFINED__
#define __DispHTMLWindow2_FWD_DEFINED__
typedef interface DispHTMLWindow2 DispHTMLWindow2;
#endif

#ifndef __HTMLWindow2_FWD_DEFINED__
#define __HTMLWindow2_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLWindow2 HTMLWindow2;
#else
typedef struct HTMLWindow2 HTMLWindow2;
#endif
#endif

#ifndef __DispHTMLWindowProxy_FWD_DEFINED__
#define __DispHTMLWindowProxy_FWD_DEFINED__
typedef interface DispHTMLWindowProxy DispHTMLWindowProxy;
#endif

#ifndef __HTMLWindowProxy_FWD_DEFINED__
#define __HTMLWindowProxy_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLWindowProxy HTMLWindowProxy;
#else
typedef struct HTMLWindowProxy HTMLWindowProxy;
#endif
#endif

#ifndef __HTMLDocumentEvents2_FWD_DEFINED__
#define __HTMLDocumentEvents2_FWD_DEFINED__
typedef interface HTMLDocumentEvents2 HTMLDocumentEvents2;
#endif

#ifndef __HTMLDocumentEvents_FWD_DEFINED__
#define __HTMLDocumentEvents_FWD_DEFINED__
typedef interface HTMLDocumentEvents HTMLDocumentEvents;
#endif

#ifndef __IHTMLDocument3_FWD_DEFINED__
#define __IHTMLDocument3_FWD_DEFINED__
typedef interface IHTMLDocument3 IHTMLDocument3;
#endif

#ifndef __IHTMLDocument4_FWD_DEFINED__
#define __IHTMLDocument4_FWD_DEFINED__
typedef interface IHTMLDocument4 IHTMLDocument4;
#endif

#ifndef __IHTMLDocument5_FWD_DEFINED__
#define __IHTMLDocument5_FWD_DEFINED__
typedef interface IHTMLDocument5 IHTMLDocument5;
#endif

#ifndef __DispHTMLDocument_FWD_DEFINED__
#define __DispHTMLDocument_FWD_DEFINED__
typedef interface DispHTMLDocument DispHTMLDocument;
#endif

#ifndef __HTMLDocument_FWD_DEFINED__
#define __HTMLDocument_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDocument HTMLDocument;
#else
typedef struct HTMLDocument HTMLDocument;
#endif
#endif

#ifndef __DWebBridgeEvents_FWD_DEFINED__
#define __DWebBridgeEvents_FWD_DEFINED__
typedef interface DWebBridgeEvents DWebBridgeEvents;
#endif

#ifndef __IWebBridge_FWD_DEFINED__
#define __IWebBridge_FWD_DEFINED__
typedef interface IWebBridge IWebBridge;
#endif

#ifndef __IWBScriptControl_FWD_DEFINED__
#define __IWBScriptControl_FWD_DEFINED__
typedef interface IWBScriptControl IWBScriptControl;
#endif

#ifndef __Scriptlet_FWD_DEFINED__
#define __Scriptlet_FWD_DEFINED__
#ifdef __cplusplus
typedef class Scriptlet Scriptlet;
#else
typedef struct Scriptlet Scriptlet;
#endif
#endif

#ifndef __IHTMLEmbedElement_FWD_DEFINED__
#define __IHTMLEmbedElement_FWD_DEFINED__
typedef interface IHTMLEmbedElement IHTMLEmbedElement;
#endif

#ifndef __DispHTMLEmbed_FWD_DEFINED__
#define __DispHTMLEmbed_FWD_DEFINED__
typedef interface DispHTMLEmbed DispHTMLEmbed;
#endif

#ifndef __HTMLEmbed_FWD_DEFINED__
#define __HTMLEmbed_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLEmbed HTMLEmbed;
#else
typedef struct HTMLEmbed HTMLEmbed;
#endif
#endif

#ifndef __HTMLMapEvents2_FWD_DEFINED__
#define __HTMLMapEvents2_FWD_DEFINED__
typedef interface HTMLMapEvents2 HTMLMapEvents2;
#endif

#ifndef __HTMLMapEvents_FWD_DEFINED__
#define __HTMLMapEvents_FWD_DEFINED__
typedef interface HTMLMapEvents HTMLMapEvents;
#endif

#ifndef __IHTMLAreasCollection_FWD_DEFINED__
#define __IHTMLAreasCollection_FWD_DEFINED__
typedef interface IHTMLAreasCollection IHTMLAreasCollection;
#endif

#ifndef __IHTMLAreasCollection2_FWD_DEFINED__
#define __IHTMLAreasCollection2_FWD_DEFINED__
typedef interface IHTMLAreasCollection2 IHTMLAreasCollection2;
#endif

#ifndef __IHTMLAreasCollection3_FWD_DEFINED__
#define __IHTMLAreasCollection3_FWD_DEFINED__
typedef interface IHTMLAreasCollection3 IHTMLAreasCollection3;
#endif

#ifndef __IHTMLMapElement_FWD_DEFINED__
#define __IHTMLMapElement_FWD_DEFINED__
typedef interface IHTMLMapElement IHTMLMapElement;
#endif

#ifndef __DispHTMLAreasCollection_FWD_DEFINED__
#define __DispHTMLAreasCollection_FWD_DEFINED__
typedef interface DispHTMLAreasCollection DispHTMLAreasCollection;
#endif

#ifndef __HTMLAreasCollection_FWD_DEFINED__
#define __HTMLAreasCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAreasCollection HTMLAreasCollection;
#else
typedef struct HTMLAreasCollection HTMLAreasCollection;
#endif
#endif

#ifndef __DispHTMLMapElement_FWD_DEFINED__
#define __DispHTMLMapElement_FWD_DEFINED__
typedef interface DispHTMLMapElement DispHTMLMapElement;
#endif

#ifndef __HTMLMapElement_FWD_DEFINED__
#define __HTMLMapElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLMapElement HTMLMapElement;
#else
typedef struct HTMLMapElement HTMLMapElement;
#endif
#endif

#ifndef __HTMLAreaEvents2_FWD_DEFINED__
#define __HTMLAreaEvents2_FWD_DEFINED__
typedef interface HTMLAreaEvents2 HTMLAreaEvents2;
#endif

#ifndef __HTMLAreaEvents_FWD_DEFINED__
#define __HTMLAreaEvents_FWD_DEFINED__
typedef interface HTMLAreaEvents HTMLAreaEvents;
#endif

#ifndef __IHTMLAreaElement_FWD_DEFINED__
#define __IHTMLAreaElement_FWD_DEFINED__
typedef interface IHTMLAreaElement IHTMLAreaElement;
#endif

#ifndef __DispHTMLAreaElement_FWD_DEFINED__
#define __DispHTMLAreaElement_FWD_DEFINED__
typedef interface DispHTMLAreaElement DispHTMLAreaElement;
#endif

#ifndef __HTMLAreaElement_FWD_DEFINED__
#define __HTMLAreaElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAreaElement HTMLAreaElement;
#else
typedef struct HTMLAreaElement HTMLAreaElement;
#endif
#endif

#ifndef __IHTMLTableCaption_FWD_DEFINED__
#define __IHTMLTableCaption_FWD_DEFINED__
typedef interface IHTMLTableCaption IHTMLTableCaption;
#endif

#ifndef __DispHTMLTableCaption_FWD_DEFINED__
#define __DispHTMLTableCaption_FWD_DEFINED__
typedef interface DispHTMLTableCaption DispHTMLTableCaption;
#endif

#ifndef __HTMLTableCaption_FWD_DEFINED__
#define __HTMLTableCaption_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableCaption HTMLTableCaption;
#else
typedef struct HTMLTableCaption HTMLTableCaption;
#endif
#endif

#ifndef __IHTMLCommentElement_FWD_DEFINED__
#define __IHTMLCommentElement_FWD_DEFINED__
typedef interface IHTMLCommentElement IHTMLCommentElement;
#endif

#ifndef __IHTMLCommentElement2_FWD_DEFINED__
#define __IHTMLCommentElement2_FWD_DEFINED__
typedef interface IHTMLCommentElement2 IHTMLCommentElement2;
#endif

#ifndef __DispHTMLCommentElement_FWD_DEFINED__
#define __DispHTMLCommentElement_FWD_DEFINED__
typedef interface DispHTMLCommentElement DispHTMLCommentElement;
#endif

#ifndef __HTMLCommentElement_FWD_DEFINED__
#define __HTMLCommentElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLCommentElement HTMLCommentElement;
#else
typedef struct HTMLCommentElement HTMLCommentElement;
#endif
#endif

#ifndef __IHTMLPhraseElement_FWD_DEFINED__
#define __IHTMLPhraseElement_FWD_DEFINED__
typedef interface IHTMLPhraseElement IHTMLPhraseElement;
#endif

#ifndef __IHTMLPhraseElement2_FWD_DEFINED__
#define __IHTMLPhraseElement2_FWD_DEFINED__
typedef interface IHTMLPhraseElement2 IHTMLPhraseElement2;
#endif

#ifndef __IHTMLSpanElement_FWD_DEFINED__
#define __IHTMLSpanElement_FWD_DEFINED__
typedef interface IHTMLSpanElement IHTMLSpanElement;
#endif

#ifndef __DispHTMLPhraseElement_FWD_DEFINED__
#define __DispHTMLPhraseElement_FWD_DEFINED__
typedef interface DispHTMLPhraseElement DispHTMLPhraseElement;
#endif

#ifndef __HTMLPhraseElement_FWD_DEFINED__
#define __HTMLPhraseElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLPhraseElement HTMLPhraseElement;
#else
typedef struct HTMLPhraseElement HTMLPhraseElement;
#endif
#endif

#ifndef __DispHTMLSpanElement_FWD_DEFINED__
#define __DispHTMLSpanElement_FWD_DEFINED__
typedef interface DispHTMLSpanElement DispHTMLSpanElement;
#endif

#ifndef __HTMLSpanElement_FWD_DEFINED__
#define __HTMLSpanElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLSpanElement HTMLSpanElement;
#else
typedef struct HTMLSpanElement HTMLSpanElement;
#endif
#endif

#ifndef __HTMLTableEvents2_FWD_DEFINED__
#define __HTMLTableEvents2_FWD_DEFINED__
typedef interface HTMLTableEvents2 HTMLTableEvents2;
#endif

#ifndef __HTMLTableEvents_FWD_DEFINED__
#define __HTMLTableEvents_FWD_DEFINED__
typedef interface HTMLTableEvents HTMLTableEvents;
#endif

#ifndef __IHTMLTableSection_FWD_DEFINED__
#define __IHTMLTableSection_FWD_DEFINED__
typedef interface IHTMLTableSection IHTMLTableSection;
#endif

#ifndef __IHTMLTable_FWD_DEFINED__
#define __IHTMLTable_FWD_DEFINED__
typedef interface IHTMLTable IHTMLTable;
#endif

#ifndef __IHTMLTable2_FWD_DEFINED__
#define __IHTMLTable2_FWD_DEFINED__
typedef interface IHTMLTable2 IHTMLTable2;
#endif

#ifndef __IHTMLTable3_FWD_DEFINED__
#define __IHTMLTable3_FWD_DEFINED__
typedef interface IHTMLTable3 IHTMLTable3;
#endif

#ifndef __IHTMLTableCol_FWD_DEFINED__
#define __IHTMLTableCol_FWD_DEFINED__
typedef interface IHTMLTableCol IHTMLTableCol;
#endif

#ifndef __IHTMLTableCol2_FWD_DEFINED__
#define __IHTMLTableCol2_FWD_DEFINED__
typedef interface IHTMLTableCol2 IHTMLTableCol2;
#endif

#ifndef __IHTMLTableSection2_FWD_DEFINED__
#define __IHTMLTableSection2_FWD_DEFINED__
typedef interface IHTMLTableSection2 IHTMLTableSection2;
#endif

#ifndef __IHTMLTableSection3_FWD_DEFINED__
#define __IHTMLTableSection3_FWD_DEFINED__
typedef interface IHTMLTableSection3 IHTMLTableSection3;
#endif

#ifndef __IHTMLTableRow_FWD_DEFINED__
#define __IHTMLTableRow_FWD_DEFINED__
typedef interface IHTMLTableRow IHTMLTableRow;
#endif

#ifndef __IHTMLTableRow2_FWD_DEFINED__
#define __IHTMLTableRow2_FWD_DEFINED__
typedef interface IHTMLTableRow2 IHTMLTableRow2;
#endif

#ifndef __IHTMLTableRow3_FWD_DEFINED__
#define __IHTMLTableRow3_FWD_DEFINED__
typedef interface IHTMLTableRow3 IHTMLTableRow3;
#endif

#ifndef __IHTMLTableRowMetrics_FWD_DEFINED__
#define __IHTMLTableRowMetrics_FWD_DEFINED__
typedef interface IHTMLTableRowMetrics IHTMLTableRowMetrics;
#endif

#ifndef __IHTMLTableCell_FWD_DEFINED__
#define __IHTMLTableCell_FWD_DEFINED__
typedef interface IHTMLTableCell IHTMLTableCell;
#endif

#ifndef __IHTMLTableCell2_FWD_DEFINED__
#define __IHTMLTableCell2_FWD_DEFINED__
typedef interface IHTMLTableCell2 IHTMLTableCell2;
#endif

#ifndef __DispHTMLTable_FWD_DEFINED__
#define __DispHTMLTable_FWD_DEFINED__
typedef interface DispHTMLTable DispHTMLTable;
#endif

#ifndef __HTMLTable_FWD_DEFINED__
#define __HTMLTable_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTable HTMLTable;
#else
typedef struct HTMLTable HTMLTable;
#endif
#endif

#ifndef __DispHTMLTableCol_FWD_DEFINED__
#define __DispHTMLTableCol_FWD_DEFINED__
typedef interface DispHTMLTableCol DispHTMLTableCol;
#endif

#ifndef __HTMLTableCol_FWD_DEFINED__
#define __HTMLTableCol_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableCol HTMLTableCol;
#else
typedef struct HTMLTableCol HTMLTableCol;
#endif
#endif

#ifndef __DispHTMLTableSection_FWD_DEFINED__
#define __DispHTMLTableSection_FWD_DEFINED__
typedef interface DispHTMLTableSection DispHTMLTableSection;
#endif

#ifndef __HTMLTableSection_FWD_DEFINED__
#define __HTMLTableSection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableSection HTMLTableSection;
#else
typedef struct HTMLTableSection HTMLTableSection;
#endif
#endif

#ifndef __DispHTMLTableRow_FWD_DEFINED__
#define __DispHTMLTableRow_FWD_DEFINED__
typedef interface DispHTMLTableRow DispHTMLTableRow;
#endif

#ifndef __HTMLTableRow_FWD_DEFINED__
#define __HTMLTableRow_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableRow HTMLTableRow;
#else
typedef struct HTMLTableRow HTMLTableRow;
#endif
#endif

#ifndef __DispHTMLTableCell_FWD_DEFINED__
#define __DispHTMLTableCell_FWD_DEFINED__
typedef interface DispHTMLTableCell DispHTMLTableCell;
#endif

#ifndef __HTMLTableCell_FWD_DEFINED__
#define __HTMLTableCell_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLTableCell HTMLTableCell;
#else
typedef struct HTMLTableCell HTMLTableCell;
#endif
#endif

#ifndef __HTMLScriptEvents2_FWD_DEFINED__
#define __HTMLScriptEvents2_FWD_DEFINED__
typedef interface HTMLScriptEvents2 HTMLScriptEvents2;
#endif

#ifndef __HTMLScriptEvents_FWD_DEFINED__
#define __HTMLScriptEvents_FWD_DEFINED__
typedef interface HTMLScriptEvents HTMLScriptEvents;
#endif

#ifndef __IHTMLScriptElement_FWD_DEFINED__
#define __IHTMLScriptElement_FWD_DEFINED__
typedef interface IHTMLScriptElement IHTMLScriptElement;
#endif

#ifndef __IHTMLScriptElement2_FWD_DEFINED__
#define __IHTMLScriptElement2_FWD_DEFINED__
typedef interface IHTMLScriptElement2 IHTMLScriptElement2;
#endif

#ifndef __DispHTMLScriptElement_FWD_DEFINED__
#define __DispHTMLScriptElement_FWD_DEFINED__
typedef interface DispHTMLScriptElement DispHTMLScriptElement;
#endif

#ifndef __HTMLScriptElement_FWD_DEFINED__
#define __HTMLScriptElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLScriptElement HTMLScriptElement;
#else
typedef struct HTMLScriptElement HTMLScriptElement;
#endif
#endif

#ifndef __IHTMLNoShowElement_FWD_DEFINED__
#define __IHTMLNoShowElement_FWD_DEFINED__
typedef interface IHTMLNoShowElement IHTMLNoShowElement;
#endif

#ifndef __DispHTMLNoShowElement_FWD_DEFINED__
#define __DispHTMLNoShowElement_FWD_DEFINED__
typedef interface DispHTMLNoShowElement DispHTMLNoShowElement;
#endif

#ifndef __HTMLNoShowElement_FWD_DEFINED__
#define __HTMLNoShowElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNoShowElement HTMLNoShowElement;
#else
typedef struct HTMLNoShowElement HTMLNoShowElement;
#endif
#endif

#ifndef __HTMLObjectElementEvents2_FWD_DEFINED__
#define __HTMLObjectElementEvents2_FWD_DEFINED__
typedef interface HTMLObjectElementEvents2 HTMLObjectElementEvents2;
#endif

#ifndef __HTMLObjectElementEvents_FWD_DEFINED__
#define __HTMLObjectElementEvents_FWD_DEFINED__
typedef interface HTMLObjectElementEvents HTMLObjectElementEvents;
#endif

#ifndef __IHTMLObjectElement_FWD_DEFINED__
#define __IHTMLObjectElement_FWD_DEFINED__
typedef interface IHTMLObjectElement IHTMLObjectElement;
#endif

#ifndef __IHTMLObjectElement2_FWD_DEFINED__
#define __IHTMLObjectElement2_FWD_DEFINED__
typedef interface IHTMLObjectElement2 IHTMLObjectElement2;
#endif

#ifndef __IHTMLObjectElement3_FWD_DEFINED__
#define __IHTMLObjectElement3_FWD_DEFINED__
typedef interface IHTMLObjectElement3 IHTMLObjectElement3;
#endif

#ifndef __IHTMLParamElement_FWD_DEFINED__
#define __IHTMLParamElement_FWD_DEFINED__
typedef interface IHTMLParamElement IHTMLParamElement;
#endif

#ifndef __DispHTMLObjectElement_FWD_DEFINED__
#define __DispHTMLObjectElement_FWD_DEFINED__
typedef interface DispHTMLObjectElement DispHTMLObjectElement;
#endif

#ifndef __HTMLObjectElement_FWD_DEFINED__
#define __HTMLObjectElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLObjectElement HTMLObjectElement;
#else
typedef struct HTMLObjectElement HTMLObjectElement;
#endif
#endif

#ifndef __DispHTMLParamElement_FWD_DEFINED__
#define __DispHTMLParamElement_FWD_DEFINED__
typedef interface DispHTMLParamElement DispHTMLParamElement;
#endif

#ifndef __HTMLParamElement_FWD_DEFINED__
#define __HTMLParamElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLParamElement HTMLParamElement;
#else
typedef struct HTMLParamElement HTMLParamElement;
#endif
#endif

#ifndef __HTMLFrameSiteEvents2_FWD_DEFINED__
#define __HTMLFrameSiteEvents2_FWD_DEFINED__
typedef interface HTMLFrameSiteEvents2 HTMLFrameSiteEvents2;
#endif

#ifndef __HTMLFrameSiteEvents_FWD_DEFINED__
#define __HTMLFrameSiteEvents_FWD_DEFINED__
typedef interface HTMLFrameSiteEvents HTMLFrameSiteEvents;
#endif

#ifndef __IHTMLFrameBase2_FWD_DEFINED__
#define __IHTMLFrameBase2_FWD_DEFINED__
typedef interface IHTMLFrameBase2 IHTMLFrameBase2;
#endif

#ifndef __IHTMLFrameBase3_FWD_DEFINED__
#define __IHTMLFrameBase3_FWD_DEFINED__
typedef interface IHTMLFrameBase3 IHTMLFrameBase3;
#endif

#ifndef __DispHTMLFrameBase_FWD_DEFINED__
#define __DispHTMLFrameBase_FWD_DEFINED__
typedef interface DispHTMLFrameBase DispHTMLFrameBase;
#endif

#ifndef __HTMLFrameBase_FWD_DEFINED__
#define __HTMLFrameBase_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFrameBase HTMLFrameBase;
#else
typedef struct HTMLFrameBase HTMLFrameBase;
#endif
#endif

#ifndef __IHTMLFrameElement_FWD_DEFINED__
#define __IHTMLFrameElement_FWD_DEFINED__
typedef interface IHTMLFrameElement IHTMLFrameElement;
#endif

#ifndef __IHTMLFrameElement2_FWD_DEFINED__
#define __IHTMLFrameElement2_FWD_DEFINED__
typedef interface IHTMLFrameElement2 IHTMLFrameElement2;
#endif

#ifndef __DispHTMLFrameElement_FWD_DEFINED__
#define __DispHTMLFrameElement_FWD_DEFINED__
typedef interface DispHTMLFrameElement DispHTMLFrameElement;
#endif

#ifndef __HTMLFrameElement_FWD_DEFINED__
#define __HTMLFrameElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFrameElement HTMLFrameElement;
#else
typedef struct HTMLFrameElement HTMLFrameElement;
#endif
#endif

#ifndef __IHTMLIFrameElement_FWD_DEFINED__
#define __IHTMLIFrameElement_FWD_DEFINED__
typedef interface IHTMLIFrameElement IHTMLIFrameElement;
#endif

#ifndef __IHTMLIFrameElement2_FWD_DEFINED__
#define __IHTMLIFrameElement2_FWD_DEFINED__
typedef interface IHTMLIFrameElement2 IHTMLIFrameElement2;
#endif

#ifndef __DispHTMLIFrame_FWD_DEFINED__
#define __DispHTMLIFrame_FWD_DEFINED__
typedef interface DispHTMLIFrame DispHTMLIFrame;
#endif

#ifndef __HTMLIFrame_FWD_DEFINED__
#define __HTMLIFrame_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLIFrame HTMLIFrame;
#else
typedef struct HTMLIFrame HTMLIFrame;
#endif
#endif

#ifndef __IHTMLDivPosition_FWD_DEFINED__
#define __IHTMLDivPosition_FWD_DEFINED__
typedef interface IHTMLDivPosition IHTMLDivPosition;
#endif

#ifndef __IHTMLFieldSetElement_FWD_DEFINED__
#define __IHTMLFieldSetElement_FWD_DEFINED__
typedef interface IHTMLFieldSetElement IHTMLFieldSetElement;
#endif

#ifndef __IHTMLFieldSetElement2_FWD_DEFINED__
#define __IHTMLFieldSetElement2_FWD_DEFINED__
typedef interface IHTMLFieldSetElement2 IHTMLFieldSetElement2;
#endif

#ifndef __IHTMLLegendElement_FWD_DEFINED__
#define __IHTMLLegendElement_FWD_DEFINED__
typedef interface IHTMLLegendElement IHTMLLegendElement;
#endif

#ifndef __IHTMLLegendElement2_FWD_DEFINED__
#define __IHTMLLegendElement2_FWD_DEFINED__
typedef interface IHTMLLegendElement2 IHTMLLegendElement2;
#endif

#ifndef __DispHTMLDivPosition_FWD_DEFINED__
#define __DispHTMLDivPosition_FWD_DEFINED__
typedef interface DispHTMLDivPosition DispHTMLDivPosition;
#endif

#ifndef __HTMLDivPosition_FWD_DEFINED__
#define __HTMLDivPosition_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDivPosition HTMLDivPosition;
#else
typedef struct HTMLDivPosition HTMLDivPosition;
#endif
#endif

#ifndef __DispHTMLFieldSetElement_FWD_DEFINED__
#define __DispHTMLFieldSetElement_FWD_DEFINED__
typedef interface DispHTMLFieldSetElement DispHTMLFieldSetElement;
#endif

#ifndef __HTMLFieldSetElement_FWD_DEFINED__
#define __HTMLFieldSetElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFieldSetElement HTMLFieldSetElement;
#else
typedef struct HTMLFieldSetElement HTMLFieldSetElement;
#endif
#endif

#ifndef __DispHTMLLegendElement_FWD_DEFINED__
#define __DispHTMLLegendElement_FWD_DEFINED__
typedef interface DispHTMLLegendElement DispHTMLLegendElement;
#endif

#ifndef __HTMLLegendElement_FWD_DEFINED__
#define __HTMLLegendElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLLegendElement HTMLLegendElement;
#else
typedef struct HTMLLegendElement HTMLLegendElement;
#endif
#endif

#ifndef __IHTMLSpanFlow_FWD_DEFINED__
#define __IHTMLSpanFlow_FWD_DEFINED__
typedef interface IHTMLSpanFlow IHTMLSpanFlow;
#endif

#ifndef __DispHTMLSpanFlow_FWD_DEFINED__
#define __DispHTMLSpanFlow_FWD_DEFINED__
typedef interface DispHTMLSpanFlow DispHTMLSpanFlow;
#endif

#ifndef __HTMLSpanFlow_FWD_DEFINED__
#define __HTMLSpanFlow_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLSpanFlow HTMLSpanFlow;
#else
typedef struct HTMLSpanFlow HTMLSpanFlow;
#endif
#endif

#ifndef __IHTMLFrameSetElement_FWD_DEFINED__
#define __IHTMLFrameSetElement_FWD_DEFINED__
typedef interface IHTMLFrameSetElement IHTMLFrameSetElement;
#endif

#ifndef __IHTMLFrameSetElement2_FWD_DEFINED__
#define __IHTMLFrameSetElement2_FWD_DEFINED__
typedef interface IHTMLFrameSetElement2 IHTMLFrameSetElement2;
#endif

#ifndef __DispHTMLFrameSetSite_FWD_DEFINED__
#define __DispHTMLFrameSetSite_FWD_DEFINED__
typedef interface DispHTMLFrameSetSite DispHTMLFrameSetSite;
#endif

#ifndef __HTMLFrameSetSite_FWD_DEFINED__
#define __HTMLFrameSetSite_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLFrameSetSite HTMLFrameSetSite;
#else
typedef struct HTMLFrameSetSite HTMLFrameSetSite;
#endif
#endif

#ifndef __IHTMLBGsound_FWD_DEFINED__
#define __IHTMLBGsound_FWD_DEFINED__
typedef interface IHTMLBGsound IHTMLBGsound;
#endif

#ifndef __DispHTMLBGsound_FWD_DEFINED__
#define __DispHTMLBGsound_FWD_DEFINED__
typedef interface DispHTMLBGsound DispHTMLBGsound;
#endif

#ifndef __HTMLBGsound_FWD_DEFINED__
#define __HTMLBGsound_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLBGsound HTMLBGsound;
#else
typedef struct HTMLBGsound HTMLBGsound;
#endif
#endif

#ifndef __IHTMLFontNamesCollection_FWD_DEFINED__
#define __IHTMLFontNamesCollection_FWD_DEFINED__
typedef interface IHTMLFontNamesCollection IHTMLFontNamesCollection;
#endif

#ifndef __IHTMLFontSizesCollection_FWD_DEFINED__
#define __IHTMLFontSizesCollection_FWD_DEFINED__
typedef interface IHTMLFontSizesCollection IHTMLFontSizesCollection;
#endif

#ifndef __IHTMLOptionsHolder_FWD_DEFINED__
#define __IHTMLOptionsHolder_FWD_DEFINED__
typedef interface IHTMLOptionsHolder IHTMLOptionsHolder;
#endif

#ifndef __HTMLStyleElementEvents2_FWD_DEFINED__
#define __HTMLStyleElementEvents2_FWD_DEFINED__
typedef interface HTMLStyleElementEvents2 HTMLStyleElementEvents2;
#endif

#ifndef __HTMLStyleElementEvents_FWD_DEFINED__
#define __HTMLStyleElementEvents_FWD_DEFINED__
typedef interface HTMLStyleElementEvents HTMLStyleElementEvents;
#endif

#ifndef __IHTMLStyleElement_FWD_DEFINED__
#define __IHTMLStyleElement_FWD_DEFINED__
typedef interface IHTMLStyleElement IHTMLStyleElement;
#endif

#ifndef __DispHTMLStyleElement_FWD_DEFINED__
#define __DispHTMLStyleElement_FWD_DEFINED__
typedef interface DispHTMLStyleElement DispHTMLStyleElement;
#endif

#ifndef __HTMLStyleElement_FWD_DEFINED__
#define __HTMLStyleElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleElement HTMLStyleElement;
#else
typedef struct HTMLStyleElement HTMLStyleElement;
#endif
#endif

#ifndef __IHTMLStyleFontFace_FWD_DEFINED__
#define __IHTMLStyleFontFace_FWD_DEFINED__
typedef interface IHTMLStyleFontFace IHTMLStyleFontFace;
#endif

#ifndef __HTMLStyleFontFace_FWD_DEFINED__
#define __HTMLStyleFontFace_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLStyleFontFace HTMLStyleFontFace;
#else
typedef struct HTMLStyleFontFace HTMLStyleFontFace;
#endif
#endif

#ifndef __ICSSFilterSite_FWD_DEFINED__
#define __ICSSFilterSite_FWD_DEFINED__
typedef interface ICSSFilterSite ICSSFilterSite;
#endif

#ifndef __IMarkupPointer_FWD_DEFINED__
#define __IMarkupPointer_FWD_DEFINED__
typedef interface IMarkupPointer IMarkupPointer;
#endif

#ifndef __IMarkupContainer_FWD_DEFINED__
#define __IMarkupContainer_FWD_DEFINED__
typedef interface IMarkupContainer IMarkupContainer;
#endif

#ifndef __IMarkupContainer2_FWD_DEFINED__
#define __IMarkupContainer2_FWD_DEFINED__
typedef interface IMarkupContainer2 IMarkupContainer2;
#endif

#ifndef __IHTMLChangeLog_FWD_DEFINED__
#define __IHTMLChangeLog_FWD_DEFINED__
typedef interface IHTMLChangeLog IHTMLChangeLog;
#endif

#ifndef __IHTMLChangeSink_FWD_DEFINED__
#define __IHTMLChangeSink_FWD_DEFINED__
typedef interface IHTMLChangeSink IHTMLChangeSink;
#endif

#ifndef __IActiveIMMApp_FWD_DEFINED__
#define __IActiveIMMApp_FWD_DEFINED__
typedef interface IActiveIMMApp IActiveIMMApp;
#endif

#ifndef __ISegmentList_FWD_DEFINED__
#define __ISegmentList_FWD_DEFINED__
typedef interface ISegmentList ISegmentList;
#endif

#ifndef __ISegmentListIterator_FWD_DEFINED__
#define __ISegmentListIterator_FWD_DEFINED__
typedef interface ISegmentListIterator ISegmentListIterator;
#endif

#ifndef __IHTMLCaret_FWD_DEFINED__
#define __IHTMLCaret_FWD_DEFINED__
typedef interface IHTMLCaret IHTMLCaret;
#endif

#ifndef __ISegment_FWD_DEFINED__
#define __ISegment_FWD_DEFINED__
typedef interface ISegment ISegment;
#endif

#ifndef __IElementSegment_FWD_DEFINED__
#define __IElementSegment_FWD_DEFINED__
typedef interface IElementSegment IElementSegment;
#endif

#ifndef __IHighlightSegment_FWD_DEFINED__
#define __IHighlightSegment_FWD_DEFINED__
typedef interface IHighlightSegment IHighlightSegment;
#endif

#ifndef __IHighlightRenderingServices_FWD_DEFINED__
#define __IHighlightRenderingServices_FWD_DEFINED__
typedef interface IHighlightRenderingServices IHighlightRenderingServices;
#endif

#ifndef __ILineInfo_FWD_DEFINED__
#define __ILineInfo_FWD_DEFINED__
typedef interface ILineInfo ILineInfo;
#endif

#ifndef __IDisplayPointer_FWD_DEFINED__
#define __IDisplayPointer_FWD_DEFINED__
typedef interface IDisplayPointer IDisplayPointer;
#endif

#ifndef __IDisplayServices_FWD_DEFINED__
#define __IDisplayServices_FWD_DEFINED__
typedef interface IDisplayServices IDisplayServices;
#endif

#ifndef __IHtmlDlgSafeHelper_FWD_DEFINED__
#define __IHtmlDlgSafeHelper_FWD_DEFINED__
typedef interface IHtmlDlgSafeHelper IHtmlDlgSafeHelper;
#endif

#ifndef __IBlockFormats_FWD_DEFINED__
#define __IBlockFormats_FWD_DEFINED__
typedef interface IBlockFormats IBlockFormats;
#endif

#ifndef __IFontNames_FWD_DEFINED__
#define __IFontNames_FWD_DEFINED__
typedef interface IFontNames IFontNames;
#endif

#ifndef __ICSSFilter_FWD_DEFINED__
#define __ICSSFilter_FWD_DEFINED__
typedef interface ICSSFilter ICSSFilter;
#endif

#ifndef __ISecureUrlHost_FWD_DEFINED__
#define __ISecureUrlHost_FWD_DEFINED__
typedef interface ISecureUrlHost ISecureUrlHost;
#endif

#ifndef __IMarkupServices_FWD_DEFINED__
#define __IMarkupServices_FWD_DEFINED__
typedef interface IMarkupServices IMarkupServices;
#endif

#ifndef __IMarkupServices2_FWD_DEFINED__
#define __IMarkupServices2_FWD_DEFINED__
typedef interface IMarkupServices2 IMarkupServices2;
#endif

#ifndef __IHTMLChangePlayback_FWD_DEFINED__
#define __IHTMLChangePlayback_FWD_DEFINED__
typedef interface IHTMLChangePlayback IHTMLChangePlayback;
#endif

#ifndef __IMarkupPointer2_FWD_DEFINED__
#define __IMarkupPointer2_FWD_DEFINED__
typedef interface IMarkupPointer2 IMarkupPointer2;
#endif

#ifndef __IMarkupTextFrags_FWD_DEFINED__
#define __IMarkupTextFrags_FWD_DEFINED__
typedef interface IMarkupTextFrags IMarkupTextFrags;
#endif

#ifndef __IXMLGenericParse_FWD_DEFINED__
#define __IXMLGenericParse_FWD_DEFINED__
typedef interface IXMLGenericParse IXMLGenericParse;
#endif

#ifndef __IHTMLEditHost_FWD_DEFINED__
#define __IHTMLEditHost_FWD_DEFINED__
typedef interface IHTMLEditHost IHTMLEditHost;
#endif

#ifndef __IHTMLEditHost2_FWD_DEFINED__
#define __IHTMLEditHost2_FWD_DEFINED__
typedef interface IHTMLEditHost2 IHTMLEditHost2;
#endif

#ifndef __ISequenceNumber_FWD_DEFINED__
#define __ISequenceNumber_FWD_DEFINED__
typedef interface ISequenceNumber ISequenceNumber;
#endif

#ifndef __IIMEServices_FWD_DEFINED__
#define __IIMEServices_FWD_DEFINED__
typedef interface IIMEServices IIMEServices;
#endif

#ifndef __ISelectionServicesListener_FWD_DEFINED__
#define __ISelectionServicesListener_FWD_DEFINED__
typedef interface ISelectionServicesListener ISelectionServicesListener;
#endif

#ifndef __ISelectionServices_FWD_DEFINED__
#define __ISelectionServices_FWD_DEFINED__
typedef interface ISelectionServices ISelectionServices;
#endif

#ifndef __IHTMLEditDesigner_FWD_DEFINED__
#define __IHTMLEditDesigner_FWD_DEFINED__
typedef interface IHTMLEditDesigner IHTMLEditDesigner;
#endif

#ifndef __IHTMLEditServices_FWD_DEFINED__
#define __IHTMLEditServices_FWD_DEFINED__
typedef interface IHTMLEditServices IHTMLEditServices;
#endif

#ifndef __IHTMLEditServices2_FWD_DEFINED__
#define __IHTMLEditServices2_FWD_DEFINED__
typedef interface IHTMLEditServices2 IHTMLEditServices2;
#endif

#ifndef __IHTMLComputedStyle_FWD_DEFINED__
#define __IHTMLComputedStyle_FWD_DEFINED__
typedef interface IHTMLComputedStyle IHTMLComputedStyle;
#endif

#ifndef __HtmlDlgSafeHelper_FWD_DEFINED__
#define __HtmlDlgSafeHelper_FWD_DEFINED__
#ifdef __cplusplus
typedef class HtmlDlgSafeHelper HtmlDlgSafeHelper;
#else
typedef struct HtmlDlgSafeHelper HtmlDlgSafeHelper;
#endif
#endif

#ifndef __BlockFormats_FWD_DEFINED__
#define __BlockFormats_FWD_DEFINED__
#ifdef __cplusplus
typedef class BlockFormats BlockFormats;
#else
typedef struct BlockFormats BlockFormats;
#endif
#endif

#ifndef __FontNames_FWD_DEFINED__
#define __FontNames_FWD_DEFINED__
#ifdef __cplusplus
typedef class FontNames FontNames;
#else
typedef struct FontNames FontNames;
#endif
#endif

#ifndef __HTMLNamespaceEvents_FWD_DEFINED__
#define __HTMLNamespaceEvents_FWD_DEFINED__
typedef interface HTMLNamespaceEvents HTMLNamespaceEvents;
#endif

#ifndef __IHTMLNamespace_FWD_DEFINED__
#define __IHTMLNamespace_FWD_DEFINED__
typedef interface IHTMLNamespace IHTMLNamespace;
#endif

#ifndef __IHTMLNamespaceCollection_FWD_DEFINED__
#define __IHTMLNamespaceCollection_FWD_DEFINED__
typedef interface IHTMLNamespaceCollection IHTMLNamespaceCollection;
#endif

#ifndef __HTMLNamespace_FWD_DEFINED__
#define __HTMLNamespace_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNamespace HTMLNamespace;
#else
typedef struct HTMLNamespace HTMLNamespace;
#endif
#endif

#ifndef __HTMLNamespaceCollection_FWD_DEFINED__
#define __HTMLNamespaceCollection_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLNamespaceCollection HTMLNamespaceCollection;
#else
typedef struct HTMLNamespaceCollection HTMLNamespaceCollection;
#endif
#endif

#ifndef __IHTMLPainter_FWD_DEFINED__
#define __IHTMLPainter_FWD_DEFINED__
typedef interface IHTMLPainter IHTMLPainter;
#endif

#ifndef __IHTMLPaintSite_FWD_DEFINED__
#define __IHTMLPaintSite_FWD_DEFINED__
typedef interface IHTMLPaintSite IHTMLPaintSite;
#endif

#ifndef __IHTMLPainterEventInfo_FWD_DEFINED__
#define __IHTMLPainterEventInfo_FWD_DEFINED__
typedef interface IHTMLPainterEventInfo IHTMLPainterEventInfo;
#endif

#ifndef __IHTMLPainterOverlay_FWD_DEFINED__
#define __IHTMLPainterOverlay_FWD_DEFINED__
typedef interface IHTMLPainterOverlay IHTMLPainterOverlay;
#endif

#ifndef __IHTMLIPrintCollection_FWD_DEFINED__
#define __IHTMLIPrintCollection_FWD_DEFINED__
typedef interface IHTMLIPrintCollection IHTMLIPrintCollection;
#endif

#ifndef __IEnumPrivacyRecords_FWD_DEFINED__
#define __IEnumPrivacyRecords_FWD_DEFINED__
typedef interface IEnumPrivacyRecords IEnumPrivacyRecords;
#endif

#ifndef __IHTMLDialog_FWD_DEFINED__
#define __IHTMLDialog_FWD_DEFINED__
typedef interface IHTMLDialog IHTMLDialog;
#endif

#ifndef __IHTMLDialog2_FWD_DEFINED__
#define __IHTMLDialog2_FWD_DEFINED__
typedef interface IHTMLDialog2 IHTMLDialog2;
#endif

#ifndef __IHTMLDialog3_FWD_DEFINED__
#define __IHTMLDialog3_FWD_DEFINED__
typedef interface IHTMLDialog3 IHTMLDialog3;
#endif

#ifndef __IHTMLModelessInit_FWD_DEFINED__
#define __IHTMLModelessInit_FWD_DEFINED__
typedef interface IHTMLModelessInit IHTMLModelessInit;
#endif

#ifndef __ThreadDialogProcParam_FWD_DEFINED__
#define __ThreadDialogProcParam_FWD_DEFINED__
#ifdef __cplusplus
typedef class ThreadDialogProcParam ThreadDialogProcParam;
#else
typedef struct ThreadDialogProcParam ThreadDialogProcParam;
#endif
#endif

#ifndef __HTMLDialog_FWD_DEFINED__
#define __HTMLDialog_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLDialog HTMLDialog;
#else
typedef struct HTMLDialog HTMLDialog;
#endif
#endif

#ifndef __IHTMLPopup_FWD_DEFINED__
#define __IHTMLPopup_FWD_DEFINED__
typedef interface IHTMLPopup IHTMLPopup;
#endif

#ifndef __DispHTMLPopup_FWD_DEFINED__
#define __DispHTMLPopup_FWD_DEFINED__
typedef interface DispHTMLPopup DispHTMLPopup;
#endif

#ifndef __HTMLPopup_FWD_DEFINED__
#define __HTMLPopup_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLPopup HTMLPopup;
#else
typedef struct HTMLPopup HTMLPopup;
#endif
#endif

#ifndef __IHTMLAppBehavior_FWD_DEFINED__
#define __IHTMLAppBehavior_FWD_DEFINED__
typedef interface IHTMLAppBehavior IHTMLAppBehavior;
#endif

#ifndef __IHTMLAppBehavior2_FWD_DEFINED__
#define __IHTMLAppBehavior2_FWD_DEFINED__
typedef interface IHTMLAppBehavior2 IHTMLAppBehavior2;
#endif

#ifndef __IHTMLAppBehavior3_FWD_DEFINED__
#define __IHTMLAppBehavior3_FWD_DEFINED__
typedef interface IHTMLAppBehavior3 IHTMLAppBehavior3;
#endif

#ifndef __DispHTMLAppBehavior_FWD_DEFINED__
#define __DispHTMLAppBehavior_FWD_DEFINED__
typedef interface DispHTMLAppBehavior DispHTMLAppBehavior;
#endif

#ifndef __HTMLAppBehavior_FWD_DEFINED__
#define __HTMLAppBehavior_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLAppBehavior HTMLAppBehavior;
#else
typedef struct HTMLAppBehavior HTMLAppBehavior;
#endif
#endif

#ifndef __OldHTMLDocument_FWD_DEFINED__
#define __OldHTMLDocument_FWD_DEFINED__
#ifdef __cplusplus
typedef class OldHTMLDocument OldHTMLDocument;
#else
typedef struct OldHTMLDocument OldHTMLDocument;
#endif
#endif

#ifndef __OldHTMLFormElement_FWD_DEFINED__
#define __OldHTMLFormElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class OldHTMLFormElement OldHTMLFormElement;
#else
typedef struct OldHTMLFormElement OldHTMLFormElement;
#endif
#endif

#ifndef __DispIHTMLInputButtonElement_FWD_DEFINED__
#define __DispIHTMLInputButtonElement_FWD_DEFINED__
typedef interface DispIHTMLInputButtonElement DispIHTMLInputButtonElement;
#endif

#ifndef __HTMLInputButtonElement_FWD_DEFINED__
#define __HTMLInputButtonElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputButtonElement HTMLInputButtonElement;
#else
typedef struct HTMLInputButtonElement HTMLInputButtonElement;
#endif
#endif

#ifndef __DispIHTMLInputTextElement_FWD_DEFINED__
#define __DispIHTMLInputTextElement_FWD_DEFINED__
typedef interface DispIHTMLInputTextElement DispIHTMLInputTextElement;
#endif

#ifndef __HTMLInputTextElement_FWD_DEFINED__
#define __HTMLInputTextElement_FWD_DEFINED__
#ifdef __cplusplus
typedef class HTMLInputTextElement HTMLInputTextElement;
#else
typedef struct HTMLInputTextElement HTMLInputTextElement;
#endif
#endif

#ifndef __DispIHTMLInputFileElement_FWD_DEFINED__
#define __DispIHTMLInputFileElement_FWD_DEFINED__
typedef interface DispIHTMLInputFileElement DispIHTMLInputFileElement;
#endif

#ifndef __HTMLInputFileElement_FWD_DEFINED__
#define __HTMLInputFileElement_FWD_DEFINED__

#ifdef __cplusplus
typedef class HTMLInputFileElement HTMLInputFileElement;
#else
typedef struct HTMLInputFileElement HTMLInputFileElement;
#endif
#endif

#ifndef __DispIHTMLOptionButtonElement_FWD_DEFINED__
#define __DispIHTMLOptionButtonElement_FWD_DEFINED__
typedef interface DispIHTMLOptionButtonElement DispIHTMLOptionButtonElement;
#endif

#ifndef __HTMLOptionButtonElement_FWD_DEFINED__
#define __HTMLOptionButtonElement_FWD_DEFINED__

#ifdef __cplusplus
typedef class HTMLOptionButtonElement HTMLOptionButtonElement;
#else
typedef struct HTMLOptionButtonElement HTMLOptionButtonElement;
#endif
#endif

#ifndef __DispIHTMLInputImage_FWD_DEFINED__
#define __DispIHTMLInputImage_FWD_DEFINED__
typedef interface DispIHTMLInputImage DispIHTMLInputImage;
#endif

#ifndef __HTMLInputImage_FWD_DEFINED__
#define __HTMLInputImage_FWD_DEFINED__

#ifdef __cplusplus
typedef class HTMLInputImage HTMLInputImage;
#else
typedef struct HTMLInputImage HTMLInputImage;
#endif
#endif

#ifndef __IElementNamespace_FWD_DEFINED__
#define __IElementNamespace_FWD_DEFINED__
typedef interface IElementNamespace IElementNamespace;
#endif

#ifndef __IElementNamespaceTable_FWD_DEFINED__
#define __IElementNamespaceTable_FWD_DEFINED__
typedef interface IElementNamespaceTable IElementNamespaceTable;
#endif

#ifndef __IElementNamespaceFactory_FWD_DEFINED__
#define __IElementNamespaceFactory_FWD_DEFINED__
typedef interface IElementNamespaceFactory IElementNamespaceFactory;
#endif

#ifndef __IElementNamespaceFactory2_FWD_DEFINED__
#define __IElementNamespaceFactory2_FWD_DEFINED__
typedef interface IElementNamespaceFactory2 IElementNamespaceFactory2;
#endif

#ifndef __IElementNamespaceFactoryCallback_FWD_DEFINED__
#define __IElementNamespaceFactoryCallback_FWD_DEFINED__
typedef interface IElementNamespaceFactoryCallback IElementNamespaceFactoryCallback;
#endif

#ifndef __IElementBehaviorSiteOM2_FWD_DEFINED__
#define __IElementBehaviorSiteOM2_FWD_DEFINED__
typedef interface IElementBehaviorSiteOM2 IElementBehaviorSiteOM2;
#endif

#ifndef __IElementBehaviorCategory_FWD_DEFINED__
#define __IElementBehaviorCategory_FWD_DEFINED__
typedef interface IElementBehaviorCategory IElementBehaviorCategory;
#endif

#ifndef __IElementBehaviorSiteCategory_FWD_DEFINED__
#define __IElementBehaviorSiteCategory_FWD_DEFINED__
typedef interface IElementBehaviorSiteCategory IElementBehaviorSiteCategory;
#endif

#ifndef __IElementBehaviorSubmit_FWD_DEFINED__
#define __IElementBehaviorSubmit_FWD_DEFINED__
typedef interface IElementBehaviorSubmit IElementBehaviorSubmit;
#endif

#ifndef __IElementBehaviorFocus_FWD_DEFINED__
#define __IElementBehaviorFocus_FWD_DEFINED__
typedef interface IElementBehaviorFocus IElementBehaviorFocus;
#endif

#ifndef __IElementBehaviorLayout_FWD_DEFINED__
#define __IElementBehaviorLayout_FWD_DEFINED__
typedef interface IElementBehaviorLayout IElementBehaviorLayout;
#endif

#ifndef __IElementBehaviorLayout2_FWD_DEFINED__
#define __IElementBehaviorLayout2_FWD_DEFINED__
typedef interface IElementBehaviorLayout2 IElementBehaviorLayout2;
#endif

#ifndef __IElementBehaviorSiteLayout_FWD_DEFINED__
#define __IElementBehaviorSiteLayout_FWD_DEFINED__
typedef interface IElementBehaviorSiteLayout IElementBehaviorSiteLayout;
#endif

#ifndef __IElementBehaviorSiteLayout2_FWD_DEFINED__
#define __IElementBehaviorSiteLayout2_FWD_DEFINED__
typedef interface IElementBehaviorSiteLayout2 IElementBehaviorSiteLayout2;
#endif

#ifndef __IHostBehaviorInit_FWD_DEFINED__
#define __IHostBehaviorInit_FWD_DEFINED__
typedef interface IHostBehaviorInit IHostBehaviorInit;
#endif

#include "ocidl.h"
#include "dimm.h"

#ifdef __cplusplus
extern "C"{
#endif

  void *__RPC_API MIDL_user_allocate(size_t);
  void __RPC_API MIDL_user_free(void *);

#include <olectl.h>
  EXTERN_C const GUID CMDSETID_Forms3;
  EXTERN_C const GUID CLSID_MHTMLDocument;
  EXTERN_C const GUID CLSID_HTADocument;
  EXTERN_C const GUID CLSID_HTMLApplication;
  EXTERN_C const GUID CLSID_HTMLPluginDocument;
  DEFINE_GUID(SID_SEditCommandTarget,0x3050f4b5,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
  DEFINE_GUID(CGID_EditStateCommands,0x3050f4b6,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
  DEFINE_GUID(SID_SHTMLEditHost,0x3050f6a0,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
  DEFINE_GUID(SID_SHTMLEditServices,0x3050f7f9,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);
#define SID_SHTMLWindow IID_IHTMLWindow2
#define SID_SElementBehaviorFactory IID_IElementBehaviorFactory
#define COOKIEACTION_NONE 0x00000000
#define COOKIEACTION_ACCEPT 0x00000001
#define COOKIEACTION_REJECT 0x00000002
#define COOKIEACTION_DOWNGRADE 0x00000004
#define COOKIEACTION_LEASH 0x00000008
#define COOKIEACTION_SUPPRESS 0x00000010
#define COOKIEACTION_READ 0x00000020
#define PRIVACY_URLISTOPLEVEL 0x00010000
#define PRIVACY_URLHASCOMPACTPOLICY 0x00020000
#define PRIVACY_URLHASPOSTDATA 0x00080000
#define PRIVACY_URLHASPOLICYREFLINK 0x00100000
#define PRIVACY_URLHASPOLICYREFHEADER 0x00200000
#define PRIVACY_URLHASP3PHEADER 0x00400000
#ifndef _WINGDI_
  typedef struct tagLOGFONTA {
    LONG lfHeight;
    LONG lfWidth;
    LONG lfEscapement;
    LONG lfOrientation;
    LONG lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    BYTE lfCharSet;
    BYTE lfOutPrecision;
    BYTE lfClipPrecision;
    BYTE lfQuality;
    BYTE lfPitchAndFamily;
    CHAR lfFaceName[32 ];
  } LOGFONTA;

  typedef struct tagLOGFONTW {
    LONG lfHeight;
    LONG lfWidth;
    LONG lfEscapement;
    LONG lfOrientation;
    LONG lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    BYTE lfCharSet;
    BYTE lfOutPrecision;
    BYTE lfClipPrecision;
    BYTE lfQuality;
    BYTE lfPitchAndFamily;
    WCHAR lfFaceName[32 ];
  } LOGFONTW;

  typedef LOGFONTA LOGFONT;
#endif

  extern RPC_IF_HANDLE __MIDL_itf_mshtml_0000_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_mshtml_0000_v0_0_s_ifspec;

#ifndef __IHTMLFiltersCollection_INTERFACE_DEFINED__
#define __IHTMLFiltersCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFiltersCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFiltersCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
  };
#else
  typedef struct IHTMLFiltersCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFiltersCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFiltersCollection *This);
      ULONG (WINAPI *Release)(IHTMLFiltersCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFiltersCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFiltersCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFiltersCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFiltersCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLFiltersCollection *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLFiltersCollection *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLFiltersCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
    END_INTERFACE
  } IHTMLFiltersCollectionVtbl;
  interface IHTMLFiltersCollection {
    CONST_VTBL struct IHTMLFiltersCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFiltersCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFiltersCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFiltersCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFiltersCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFiltersCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFiltersCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFiltersCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFiltersCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLFiltersCollection_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLFiltersCollection_item(This,pvarIndex,pvarResult) (This)->lpVtbl->item(This,pvarIndex,pvarResult)
#endif
#endif
  HRESULT WINAPI IHTMLFiltersCollection_get_length_Proxy(IHTMLFiltersCollection *This,long *p);
  void __RPC_STUB IHTMLFiltersCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFiltersCollection_get__newEnum_Proxy(IHTMLFiltersCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLFiltersCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFiltersCollection_item_Proxy(IHTMLFiltersCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLFiltersCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __MSHTML_LIBRARY_DEFINED__
#define __MSHTML_LIBRARY_DEFINED__
  typedef enum _htmlDesignMode {
    htmlDesignModeInherit = -2,htmlDesignModeOn = -1,htmlDesignModeOff = 0,htmlDesignMode_Max = 2147483647L
  } htmlDesignMode;

  typedef enum _htmlZOrder {
    htmlZOrderFront = 0,htmlZOrderBack = 1,htmlZOrder_Max = 2147483647L
  } htmlZOrder;

  typedef enum _htmlClear {
    htmlClearNotSet = 0,htmlClearAll = 1,htmlClearLeft = 2,htmlClearRight = 3,htmlClearBoth = 4,htmlClearNone = 5,htmlClear_Max = 2147483647L
  } htmlClear;

  typedef enum _htmlControlAlign {
    htmlControlAlignNotSet = 0,htmlControlAlignLeft = 1,htmlControlAlignCenter = 2,htmlControlAlignRight = 3,htmlControlAlignTextTop = 4,htmlControlAlignAbsMiddle = 5,htmlControlAlignBaseline = 6,htmlControlAlignAbsBottom = 7,htmlControlAlignBottom = 8,htmlControlAlignMiddle = 9,htmlControlAlignTop = 10,htmlControlAlign_Max = 2147483647L
  } htmlControlAlign;

  typedef enum _htmlBlockAlign {
    htmlBlockAlignNotSet = 0,htmlBlockAlignLeft = 1,htmlBlockAlignCenter = 2,htmlBlockAlignRight = 3,htmlBlockAlignJustify = 4,htmlBlockAlign_Max = 2147483647L
  } htmlBlockAlign;

  typedef enum _htmlReadyState {
    htmlReadyStateuninitialized = 0,htmlReadyStateloading = 1,htmlReadyStateloaded = 2,htmlReadyStateinteractive = 3,htmlReadyStatecomplete = 4,htmlReadyState_Max = 2147483647L
  } htmlReadyState;

  typedef enum _htmlLoop {
    htmlLoopLoopInfinite = -1,htmlLoop_Max = 2147483647L
  } htmlLoop;

  typedef enum _mediaType {
    mediaTypeNotSet = 0,mediaTypeAll = 511,mediaTypeAural = 1,mediaTypeBraille = 2,mediaTypeEmbossed = 4,mediaTypeHandheld = 8,mediaTypePrint = 16,mediaTypeProjection = 32,mediaTypeScreen = 64,mediaTypeTty = 128,mediaTypeTv = 256,mediaType_Max = 2147483647L
  } mediaType;

  typedef enum _styleTextTransform {
    styleTextTransformNotSet = 0,styleTextTransformCapitalize = 1,styleTextTransformLowercase = 2,styleTextTransformUppercase = 3,styleTextTransformNone = 4,styleTextTransform_Max = 2147483647L
  } styleTextTransform;

  typedef enum _styleDataRepeat {
    styleDataRepeatNone = 0,styleDataRepeatInner = 1,styleDataRepeat_Max = 2147483647L
  } styleDataRepeat;

  typedef enum _styleOverflow {
    styleOverflowNotSet = 0,styleOverflowAuto = 1,styleOverflowHidden = 2,styleOverflowVisible = 3,styleOverflowScroll = 4,styleOverflow_Max = 2147483647L
  } styleOverflow;

  typedef enum _styleTableLayout {
    styleTableLayoutNotSet = 0,styleTableLayoutAuto = 1,styleTableLayoutFixed = 2,styleTableLayout_Max = 2147483647L
  } styleTableLayout;

  typedef enum _styleBorderCollapse {
    styleBorderCollapseNotSet = 0,styleBorderCollapseSeparate = 1,styleBorderCollapseCollapse = 2,styleBorderCollapse_Max = 2147483647L
  } styleBorderCollapse;

  typedef enum _styleFontStyle {
    styleFontStyleNotSet = 0,styleFontStyleItalic = 1,styleFontStyleOblique = 2,styleFontStyleNormal = 3,styleFontStyle_Max = 2147483647L
  } styleFontStyle;

  typedef enum _styleFontVariant {
    styleFontVariantNotSet = 0,styleFontVariantSmallCaps = 1,styleFontVariantNormal = 2,styleFontVariant_Max = 2147483647L
  } styleFontVariant;

  typedef enum _styleBackgroundRepeat {
    styleBackgroundRepeatRepeat = 0,styleBackgroundRepeatRepeatX = 1,styleBackgroundRepeatRepeatY = 2,styleBackgroundRepeatNoRepeat = 3,styleBackgroundRepeatNotSet = 4,styleBackgroundRepeat_Max = 2147483647L
  } styleBackgroundRepeat;

  typedef enum _styleBackgroundAttachment {
    styleBackgroundAttachmentFixed = 0,styleBackgroundAttachmentScroll = 1,styleBackgroundAttachmentNotSet = 2,styleBackgroundAttachment_Max = 2147483647L
  } styleBackgroundAttachment;

  typedef enum _styleVerticalAlign {
    styleVerticalAlignAuto = 0,styleVerticalAlignBaseline = 1,styleVerticalAlignSub = 2,styleVerticalAlignSuper = 3,styleVerticalAlignTop = 4,styleVerticalAlignTextTop = 5,styleVerticalAlignMiddle = 6,styleVerticalAlignBottom = 7,styleVerticalAlignTextBottom = 8,styleVerticalAlignInherit = 9,styleVerticalAlignNotSet = 10,styleVerticalAlign_Max = 2147483647L
  } styleVerticalAlign;

  typedef enum _styleFontWeight {
    styleFontWeightNotSet = 0,styleFontWeight100 = 1,styleFontWeight200 = 2,styleFontWeight300 = 3,styleFontWeight400 = 4,styleFontWeight500 = 5,styleFontWeight600 = 6,styleFontWeight700 = 7,styleFontWeight800 = 8,styleFontWeight900 = 9,styleFontWeightNormal = 10,styleFontWeightBold = 11,styleFontWeightBolder = 12,styleFontWeightLighter = 13,styleFontWeight_Max = 2147483647L
  } styleFontWeight;

  typedef enum _styleBackgroundPositionX {
    styleBackgroundPositionXNotSet = 0,styleBackgroundPositionXLeft = 1,styleBackgroundPositionXCenter = 2,styleBackgroundPositionXRight = 3,styleBackgroundPositionX_Max = 2147483647L
  } styleBackgroundPositionX;

  typedef enum _styleBackgroundPositionY {
    styleBackgroundPositionYNotSet = 0,styleBackgroundPositionYTop = 1,styleBackgroundPositionYCenter = 2,styleBackgroundPositionYBottom = 3,styleBackgroundPositionY_Max = 2147483647L
  } styleBackgroundPositionY;

  typedef enum _styleFontSize {
    styleFontSizeXXSmall = 0,styleFontSizeXSmall = 1,styleFontSizeSmall = 2,styleFontSizeMedium = 3,styleFontSizeLarge = 4,styleFontSizeXLarge = 5,styleFontSizeXXLarge = 6,styleFontSizeSmaller = 7,styleFontSizeLarger = 8,styleFontSize_Max = 2147483647L
  } styleFontSize;

  typedef enum _styleAuto {
    styleAutoAuto = 0,styleAuto_Max = 2147483647L
  } styleAuto;

  typedef enum _styleNormal {
    styleNormalNormal = 0,styleNormal_Max = 2147483647L
  } styleNormal;

  typedef enum _styleBorderWidth {
    styleBorderWidthThin = 0,styleBorderWidthMedium = 1,styleBorderWidthThick = 2,styleBorderWidth_Max = 2147483647L
  } styleBorderWidth;

  typedef enum _stylePosition {
    stylePositionNotSet = 0,stylePositionstatic = 1,stylePositionrelative = 2,stylePositionabsolute = 3,stylePositionfixed = 4,stylePosition_Max = 2147483647L
  } stylePosition;

  typedef enum _styleBorderStyle {
    styleBorderStyleNotSet = 0,styleBorderStyleDotted = 1,styleBorderStyleDashed = 2,styleBorderStyleSolid = 3,styleBorderStyleDouble = 4,styleBorderStyleGroove = 5,styleBorderStyleRidge = 6,styleBorderStyleInset = 7,styleBorderStyleOutset = 8,styleBorderStyleWindowInset = 9,styleBorderStyleNone = 10,styleBorderStyle_Max = 2147483647L
  } styleBorderStyle;

  typedef enum _styleStyleFloat {
    styleStyleFloatNotSet = 0,styleStyleFloatLeft = 1,styleStyleFloatRight = 2,styleStyleFloatNone = 3,styleStyleFloat_Max = 2147483647L
  } styleStyleFloat;

  typedef enum _styleDisplay {
    styleDisplayNotSet = 0,styleDisplayBlock = 1,styleDisplayInline = 2,styleDisplayListItem = 3,styleDisplayNone = 4,styleDisplayTableHeaderGroup = 5,styleDisplayTableFooterGroup = 6,styleDisplayInlineBlock = 7,styleDisplay_Max = 2147483647L
  } styleDisplay;

  typedef enum _styleVisibility {
    styleVisibilityNotSet = 0,styleVisibilityInherit = 1,styleVisibilityVisible = 2,styleVisibilityHidden = 3,styleVisibility_Max = 2147483647L
  } styleVisibility;

  typedef enum _styleListStyleType {
    styleListStyleTypeNotSet = 0,styleListStyleTypeDisc = 1,styleListStyleTypeCircle = 2,styleListStyleTypeSquare = 3,styleListStyleTypeDecimal = 4,styleListStyleTypeLowerRoman = 5,styleListStyleTypeUpperRoman = 6,styleListStyleTypeLowerAlpha = 7,styleListStyleTypeUpperAlpha = 8,styleListStyleTypeNone = 9,styleListStyleType_Max = 2147483647L
  } styleListStyleType;

  typedef enum _styleListStylePosition {
    styleListStylePositionNotSet = 0,styleListStylePositionInside = 1,styleListStylePositionOutSide = 2,styleListStylePosition_Max = 2147483647L
  } styleListStylePosition;

  typedef enum _styleWhiteSpace {
    styleWhiteSpaceNotSet = 0,styleWhiteSpaceNormal = 1,styleWhiteSpacePre = 2,styleWhiteSpaceNowrap = 3,styleWhiteSpace_Max = 2147483647L
  } styleWhiteSpace;

  typedef enum _stylePageBreak {
    stylePageBreakNotSet = 0,stylePageBreakAuto = 1,stylePageBreakAlways = 2,stylePageBreakLeft = 3,stylePageBreakRight = 4,stylePageBreak_Max = 2147483647L
  } stylePageBreak;

  typedef enum _styleCursor {
    styleCursorAuto = 0,styleCursorCrosshair = 1,styleCursorDefault = 2,styleCursorHand = 3,styleCursorMove = 4,styleCursorE_resize = 5,styleCursorNe_resize = 6,styleCursorNw_resize = 7,styleCursorN_resize = 8,styleCursorSe_resize = 9,styleCursorSw_resize = 10,styleCursorS_resize = 11,styleCursorW_resize = 12,styleCursorText = 13,styleCursorWait = 14,styleCursorHelp = 15,styleCursorPointer = 16,styleCursorProgress = 17,styleCursorNot_allowed = 18,styleCursorNo_drop = 19,styleCursorVertical_text = 20,styleCursorall_scroll = 21,styleCursorcol_resize = 22,styleCursorrow_resize = 23,styleCursorcustom = 24,styleCursorNotSet = 25,styleCursor_Max = 2147483647L
  } styleCursor;

  typedef enum _styleDir {
    styleDirNotSet = 0,styleDirLeftToRight = 1,styleDirRightToLeft = 2,styleDirInherit = 3,styleDir_Max = 2147483647L
  } styleDir;

  typedef enum _styleBidi {
    styleBidiNotSet = 0,styleBidiNormal = 1,styleBidiEmbed = 2,styleBidiOverride = 3,styleBidiInherit = 4,styleBidi_Max = 2147483647L
  } styleBidi;

  typedef enum _styleImeMode {
    styleImeModeAuto = 0,styleImeModeActive = 1,styleImeModeInactive = 2,styleImeModeDisabled = 3,styleImeModeNotSet = 4,styleImeMode_Max = 2147483647L
  } styleImeMode;

  typedef enum _styleRubyAlign {
    styleRubyAlignNotSet = 0,styleRubyAlignAuto = 1,styleRubyAlignLeft = 2,styleRubyAlignCenter = 3,styleRubyAlignRight = 4,styleRubyAlignDistributeLetter = 5,styleRubyAlignDistributeSpace = 6,styleRubyAlignLineEdge = 7,styleRubyAlign_Max = 2147483647L
  } styleRubyAlign;

  typedef enum _styleRubyPosition {
    styleRubyPositionNotSet = 0,styleRubyPositionAbove = 1,styleRubyPositionInline = 2,styleRubyPosition_Max = 2147483647L
  } styleRubyPosition;

  typedef enum _styleRubyOverhang {
    styleRubyOverhangNotSet = 0,styleRubyOverhangAuto = 1,styleRubyOverhangWhitespace = 2,styleRubyOverhangNone = 3,styleRubyOverhang_Max = 2147483647L
  } styleRubyOverhang;

  typedef enum _styleLayoutGridChar {
    styleLayoutGridCharNotSet = 0,styleLayoutGridCharAuto = 1,styleLayoutGridCharNone = 2,styleLayoutGridChar_Max = 2147483647L
  } styleLayoutGridChar;

  typedef enum _styleLayoutGridLine {
    styleLayoutGridLineNotSet = 0,styleLayoutGridLineAuto = 1,styleLayoutGridLineNone = 2,styleLayoutGridLine_Max = 2147483647L
  } styleLayoutGridLine;

  typedef enum _styleLayoutGridMode {
    styleLayoutGridModeNotSet = 0,styleLayoutGridModeChar = 1,styleLayoutGridModeLine = 2,styleLayoutGridModeBoth = 3,styleLayoutGridModeNone = 4,styleLayoutGridMode_Max = 2147483647L
  } styleLayoutGridMode;

  typedef enum _styleLayoutGridType {
    styleLayoutGridTypeNotSet = 0,styleLayoutGridTypeLoose = 1,styleLayoutGridTypeStrict = 2,styleLayoutGridTypeFixed = 3,styleLayoutGridType_Max = 2147483647L
  } styleLayoutGridType;

  typedef enum _styleLineBreak {
    styleLineBreakNotSet = 0,styleLineBreakNormal = 1,styleLineBreakStrict = 2,styleLineBreak_Max = 2147483647L
  } styleLineBreak;

  typedef enum _styleWordBreak {
    styleWordBreakNotSet = 0,styleWordBreakNormal = 1,styleWordBreakBreakAll = 2,styleWordBreakKeepAll = 3,styleWordBreak_Max = 2147483647L
  } styleWordBreak;

  typedef enum _styleWordWrap {
    styleWordWrapNotSet = 0,styleWordWrapOff = 1,styleWordWrapOn = 2,styleWordWrap_Max = 2147483647L
  } styleWordWrap;

  typedef enum _styleTextJustify {
    styleTextJustifyNotSet = 0,styleTextJustifyInterWord = 1,styleTextJustifyNewspaper = 2,styleTextJustifyDistribute = 3,styleTextJustifyDistributeAllLines = 4,styleTextJustifyInterIdeograph = 5,styleTextJustifyInterCluster = 6,styleTextJustifyKashida = 7,styleTextJustifyAuto = 8,styleTextJustify_Max = 2147483647L
  } styleTextJustify;

  typedef enum _styleTextAlignLast {
    styleTextAlignLastNotSet = 0,styleTextAlignLastLeft = 1,styleTextAlignLastCenter = 2,styleTextAlignLastRight = 3,styleTextAlignLastJustify = 4,styleTextAlignLastAuto = 5,styleTextAlignLast_Max = 2147483647L
  } styleTextAlignLast;

  typedef enum _styleTextJustifyTrim {
    styleTextJustifyTrimNotSet = 0,styleTextJustifyTrimNone = 1,styleTextJustifyTrimPunctuation = 2,styleTextJustifyTrimPunctAndKana = 3,styleTextJustifyTrim_Max = 2147483647L
  } styleTextJustifyTrim;

  typedef enum _styleAccelerator {
    styleAcceleratorFalse = 0,styleAcceleratorTrue = 1,styleAccelerator_Max = 2147483647L
  } styleAccelerator;

  typedef enum _styleLayoutFlow {
    styleLayoutFlowHorizontal = 0,styleLayoutFlowVerticalIdeographic = 1,styleLayoutFlowNotSet = 2,styleLayoutFlow_Max = 2147483647L
  } styleLayoutFlow;

  typedef enum _styleWritingMode {
    styleWritingModeLrtb = 0,styleWritingModeTbrl = 1,styleWritingModeNotSet = 2,styleWritingMode_Max = 2147483647L
  } styleWritingMode;

  typedef enum _styleBool {
    styleBoolFalse = 0,styleBoolTrue = 1,styleBool_Max = 2147483647L
  } styleBool;

  typedef enum _styleTextUnderlinePosition {
    styleTextUnderlinePositionBelow = 0,styleTextUnderlinePositionAbove = 1,styleTextUnderlinePositionAuto = 2,styleTextUnderlinePositionNotSet = 3,styleTextUnderlinePosition_Max = 2147483647L
  } styleTextUnderlinePosition;

  typedef enum _styleTextOverflow {
    styleTextOverflowClip = 0,styleTextOverflowEllipsis = 1,styleTextOverflowNotSet = 2,styleTextOverflow_Max = 2147483647L
  } styleTextOverflow;

  EXTERN_C const GUID CLSID_CStyle;
  EXTERN_C const GUID CLSID_CRuleStyle;

  typedef enum _styleTextLineThroughStyle {
    styleTextLineThroughStyleUndefined = 0,styleTextLineThroughStyleSingle = 1,styleTextLineThroughStyleDouble = 2,styleTextLineThroughStyle_Max = 2147483647L
  } styleTextLineThroughStyle;

  typedef enum _styleTextUnderlineStyle {
    styleTextUnderlineStyleUndefined = 0,styleTextUnderlineStyleSingle = 1,styleTextUnderlineStyleDouble = 2,styleTextUnderlineStyleWords = 3,styleTextUnderlineStyleDotted = 4,styleTextUnderlineStyleThick = 5,styleTextUnderlineStyleDash = 6,styleTextUnderlineStyleDotDash = 7,styleTextUnderlineStyleDotDotDash = 8,styleTextUnderlineStyleWave = 9,styleTextUnderlineStyleSingleAccounting = 10,styleTextUnderlineStyleDoubleAccounting = 11,styleTextUnderlineStyleThickDash = 12,styleTextUnderlineStyle_Max = 2147483647L
  } styleTextUnderlineStyle;

  typedef enum _styleTextEffect {
    styleTextEffectNone = 0,styleTextEffectEmboss = 1,styleTextEffectEngrave = 2,styleTextEffectOutline = 3,styleTextEffect_Max = 2147483647L
  } styleTextEffect;

  typedef enum _styleDefaultTextSelection {
    styleDefaultTextSelectionFalse = 0,styleDefaultTextSelectionTrue = 1,styleDefaultTextSelection_Max = 2147483647L
  } styleDefaultTextSelection;

  typedef enum _styleTextDecoration {
    styleTextDecorationNone = 0,styleTextDecorationUnderline = 1,styleTextDecorationOverline = 2,styleTextDecorationLineThrough = 3,styleTextDecorationBlink = 4,styleTextDecoration_Max = 2147483647L
  } styleTextDecoration;

  EXTERN_C const GUID CLSID_CRenderStyle;

  typedef enum _textDecoration {
    textDecorationNone = 0,textDecorationUnderline = 1,textDecorationOverline = 2,textDecorationLineThrough = 3,textDecorationBlink = 4,textDecoration_Max = 2147483647L
  } textDecoration;

  EXTERN_C const GUID CLSID_CCurrentStyle;
  EXTERN_C const GUID CLSID_CAttribute;
  EXTERN_C const GUID CLSID_CDOMTextNode;
  EXTERN_C const GUID CLSID_CDOMImplementation;
  EXTERN_C const GUID CLSID_CAttrCollectionator;
  EXTERN_C const GUID CLSID_CDOMChildrenCollection;

  typedef enum _htmlListType {
    htmlListTypeNotSet = 0,htmlListTypeLargeAlpha = 1,htmlListTypeSmallAlpha = 2,htmlListTypeLargeRoman = 3,htmlListTypeSmallRoman = 4,htmlListTypeNumbers = 5,htmlListTypeDisc = 6,htmlListTypeCircle = 7,htmlListTypeSquare = 8,htmlListType_Max = 2147483647L
  } htmlListType;

  typedef enum _htmlMethod {
    htmlMethodNotSet = 0,htmlMethodGet = 1,htmlMethodPost = 2,htmlMethod_Max = 2147483647L
  } htmlMethod;

  typedef enum _htmlWrap {
    htmlWrapOff = 1,htmlWrapSoft = 2,htmlWrapHard = 3,htmlWrap_Max = 2147483647L
  } htmlWrap;

  typedef enum _htmlDir {
    htmlDirNotSet = 0,htmlDirLeftToRight = 1,htmlDirRightToLeft = 2,htmlDir_Max = 2147483647L
  } htmlDir;

  typedef enum _htmlEditable {
    htmlEditableInherit = 0,htmlEditableTrue = 1,htmlEditableFalse = 2,htmlEditable_Max = 2147483647L
  } htmlEditable;

  typedef enum _htmlInput {
    htmlInputNotSet = 0,htmlInputButton = 1,htmlInputCheckbox = 2,htmlInputFile = 3,htmlInputHidden = 4,htmlInputImage = 5,htmlInputPassword = 6,htmlInputRadio = 7,htmlInputReset = 8,htmlInputSelectOne = 9,htmlInputSelectMultiple = 10,htmlInputSubmit = 11,htmlInputText = 12,htmlInputTextarea = 13,htmlInputRichtext = 14,htmlInput_Max = 2147483647L
  } htmlInput;

  typedef enum _htmlEncoding {
    htmlEncodingURL = 0,htmlEncodingMultipart = 1,htmlEncodingText = 2,htmlEncoding_Max = 2147483647L
  } htmlEncoding;

  typedef enum _htmlAdjacency {
    htmlAdjacencyBeforeBegin = 1,htmlAdjacencyAfterBegin = 2,htmlAdjacencyBeforeEnd = 3,htmlAdjacencyAfterEnd = 4,htmlAdjacency_Max = 2147483647L
  } htmlAdjacency;

  typedef enum _htmlTabIndex {
    htmlTabIndexNotSet = -32768,htmlTabIndex_Max = 2147483647L
  } htmlTabIndex;

  typedef enum _htmlComponent {
    htmlComponentClient = 0,htmlComponentSbLeft = 1,htmlComponentSbPageLeft = 2,htmlComponentSbHThumb = 3,htmlComponentSbPageRight = 4,htmlComponentSbRight = 5,htmlComponentSbUp = 6,htmlComponentSbPageUp = 7,htmlComponentSbVThumb = 8,htmlComponentSbPageDown = 9,htmlComponentSbDown = 10,htmlComponentSbLeft2 = 11,htmlComponentSbPageLeft2 = 12,htmlComponentSbRight2 = 13,htmlComponentSbPageRight2 = 14,htmlComponentSbUp2 = 15,htmlComponentSbPageUp2 = 16,htmlComponentSbDown2 = 17,htmlComponentSbPageDown2 = 18,htmlComponentSbTop = 19,htmlComponentSbBottom = 20,htmlComponentOutside = 21,htmlComponentGHTopLeft = 22,htmlComponentGHLeft = 23,htmlComponentGHTop = 24,htmlComponentGHBottomLeft = 25,htmlComponentGHTopRight = 26,htmlComponentGHBottom = 27,htmlComponentGHRight = 28,htmlComponentGHBottomRight = 29,htmlComponent_Max = 2147483647L
  } htmlComponent;

  typedef enum _htmlApplyLocation {
    htmlApplyLocationInside = 0,htmlApplyLocationOutside = 1,htmlApplyLocation_Max = 2147483647L
  } htmlApplyLocation;

  typedef enum _htmlGlyphMode {
    htmlGlyphModeNone = 0,htmlGlyphModeBegin = 1,htmlGlyphModeEnd = 2,htmlGlyphModeBoth = 3,htmlGlyphMode_Max = 2147483647L
  } htmlGlyphMode;

  EXTERN_C const GUID CLSID_CDefaults;
  EXTERN_C const GUID CLSID_CHtmlComponentDD;
  EXTERN_C const GUID CLSID_CHtmlComponentProperty;
  EXTERN_C const GUID CLSID_CHtmlComponentMethod;
  EXTERN_C const GUID CLSID_CHtmlComponentEvent;
  EXTERN_C const GUID CLSID_CHtmlComponentAttach;
  EXTERN_C const GUID CLSID_CHtmlComponentDesc;
  EXTERN_C const GUID CLSID_CPeerUrnCollection;
  EXTERN_C const GUID CLSID_CGenericElement;
  EXTERN_C const GUID CLSID_CStyleSheetRule;
  EXTERN_C const GUID CLSID_CStyleSheetRuleArray;
  EXTERN_C const GUID CLSID_CStyleSheetPage;
  EXTERN_C const GUID CLSID_CStyleSheetPageArray;
  EXTERN_C const GUID CLSID_CStyleSheet;
  EXTERN_C const GUID CLSID_CStyleSheetArray;
  EXTERN_C const GUID CLSID_CLinkElement;

  typedef enum _htmlUnit {
    htmlUnitCharacter = 1,htmlUnitWord = 2,htmlUnitSentence = 3,htmlUnitTextEdit = 6,htmlUnit_Max = 2147483647L
  } htmlUnit;

  typedef enum _htmlEndPoints {
    htmlEndPointsStartToStart = 1,htmlEndPointsStartToEnd = 2,htmlEndPointsEndToStart = 3,htmlEndPointsEndToEnd = 4,htmlEndPoints_Max = 2147483647L
  } htmlEndPoints;

  typedef enum _htmlDirection {
    htmlDirectionForward = 99999,htmlDirectionBackward = -99999,htmlDirection_Max = 2147483647L
  } htmlDirection;

  EXTERN_C const GUID CLSID_CFormElement;
  typedef enum _htmlStart {
    htmlStartfileopen = 0,htmlStartmouseover = 1,htmlStart_Max = 2147483647L
  } htmlStart;

  EXTERN_C const GUID CLSID_CTextElement;
  EXTERN_C const GUID CLSID_CImgElement;
  EXTERN_C const GUID CLSID_CImageElementFactory;

  typedef enum _bodyScroll {
    bodyScrollyes = 1,bodyScrollno = 2,bodyScrollauto = 4,bodyScrolldefault = 3,bodyScroll_Max = 2147483647L
  } bodyScroll;

  EXTERN_C const GUID CLSID_CBodyElement;
  EXTERN_C const GUID CLSID_CFontElement;
  EXTERN_C const GUID CLSID_CAnchorElement;
  EXTERN_C const GUID CLSID_CLabelElement;
  EXTERN_C const GUID CLSID_CListElement;
  EXTERN_C const GUID CLSID_CUListElement;
  EXTERN_C const GUID CLSID_COListElement;
  EXTERN_C const GUID CLSID_CLIElement;
  EXTERN_C const GUID CLSID_CBlockElement;
  EXTERN_C const GUID CLSID_CDivElement;
  EXTERN_C const GUID CLSID_CDDElement;
  EXTERN_C const GUID CLSID_CDTElement;
  EXTERN_C const GUID CLSID_CBRElement;
  EXTERN_C const GUID CLSID_CDListElement;
  EXTERN_C const GUID CLSID_CHRElement;
  EXTERN_C const GUID CLSID_CParaElement;
  EXTERN_C const GUID CLSID_CElementCollection;
  EXTERN_C const GUID CLSID_CHeaderElement;

  typedef enum _htmlSelectType {
    htmlSelectTypeSelectOne = 1,htmlSelectTypeSelectMultiple = 2,htmlSelectType_Max = 2147483647L
  } htmlSelectType;

  EXTERN_C const GUID CLSID_CSelectElement;

  typedef enum _htmlSelection {
    htmlSelectionNone = 0,htmlSelectionText = 1,htmlSelectionControl = 2,htmlSelectionTable = 3,htmlSelection_Max = 2147483647L
  } htmlSelection;

  EXTERN_C const GUID CLSID_COptionElement;
  EXTERN_C const GUID CLSID_COptionElementFactory;
  EXTERN_C const GUID CLSID_CInput;
  EXTERN_C const GUID CLSID_CTextArea;
  EXTERN_C const GUID CLSID_CRichtext;
  EXTERN_C const GUID CLSID_CButton;

  typedef enum _htmlMarqueeBehavior {
    htmlMarqueeBehaviorscroll = 1,htmlMarqueeBehaviorslide = 2,htmlMarqueeBehavioralternate = 3,htmlMarqueeBehavior_Max = 2147483647L
  } htmlMarqueeBehavior;

  typedef enum _htmlMarqueeDirection {
    htmlMarqueeDirectionleft = 1,htmlMarqueeDirectionright = 3,htmlMarqueeDirectionup = 5,htmlMarqueeDirectiondown = 7,htmlMarqueeDirection_Max = 2147483647L
  } htmlMarqueeDirection;

  EXTERN_C const GUID CLSID_CMarquee;
  EXTERN_C const GUID CLSID_CHtmlElement;
  EXTERN_C const GUID CLSID_CHeadElement;
  EXTERN_C const GUID CLSID_CTitleElement;
  EXTERN_C const GUID CLSID_CMetaElement;
  EXTERN_C const GUID CLSID_CBaseElement;
  EXTERN_C const GUID CLSID_CIsIndexElement;
  EXTERN_C const GUID CLSID_CNextIdElement;
  EXTERN_C const GUID CLSID_CBaseFontElement;
  EXTERN_C const GUID CLSID_CUnknownElement;
  EXTERN_C const GUID CLSID_COmHistory;
  EXTERN_C const GUID CLSID_CMimeTypes;
  EXTERN_C const GUID CLSID_CPlugins;
  EXTERN_C const GUID CLSID_COpsProfile;
  EXTERN_C const GUID CLSID_COmNavigator;
  EXTERN_C const GUID CLSID_COmLocation;

  typedef enum _htmlPersistState {
    htmlPersistStateNormal = 0,htmlPersistStateFavorite = 1,htmlPersistStateHistory = 2,htmlPersistStateSnapshot = 3,htmlPersistStateUserData = 4,htmlPersistState_Max = 2147483647L
  } htmlPersistState;

  typedef enum _htmlDropEffect {
    htmlDropEffectCopy = 0,htmlDropEffectLink = 1,htmlDropEffectMove = 2,htmlDropEffectNone = 3,htmlDropEffect_Max = 2147483647L
  } htmlDropEffect;

  typedef enum _htmlEffectAllowed {
    htmlEffectAllowedCopy = 0,htmlEffectAllowedLink = 1,htmlEffectAllowedMove = 2,htmlEffectAllowedCopyLink = 3,htmlEffectAllowedCopyMove = 4,htmlEffectAllowedLinkMove = 5,htmlEffectAllowedAll = 6,htmlEffectAllowedNone = 7,htmlEffectAllowedUninitialized = 8,htmlEffectAllowed_Max = 2147483647L
  } htmlEffectAllowed;

  EXTERN_C const GUID CLSID_CEventObj;
  EXTERN_C const GUID CLSID_CFramesCollection;
  EXTERN_C const GUID CLSID_CScreen;
  EXTERN_C const GUID CLSID_CWindow;
  EXTERN_C const GUID CLSID_COmWindowProxy;

  typedef enum _htmlCompatMode {
    htmlCompatModeBackCompat = 0,htmlCompatModeCSS1Compat = 1,htmlCompatMode_Max = 2147483647L
  } htmlCompatMode;

  EXTERN_C const GUID CLSID_CDocument;
  EXTERN_C const GUID CLSID_CScriptlet;

  typedef enum _BoolValue {
    True = 1,False = 0,BoolValue_Max = 2147483647L
  } BoolValue;

  EXTERN_C const GUID CLSID_CPluginSite;
  EXTERN_C const GUID CLSID_CAreasCollection;
  EXTERN_C const GUID CLSID_CMapElement;
  EXTERN_C const GUID CLSID_CAreaElement;

  typedef enum _htmlCaptionAlign {
    htmlCaptionAlignNotSet = 0,htmlCaptionAlignLeft = 1,htmlCaptionAlignCenter = 2,htmlCaptionAlignRight = 3,htmlCaptionAlignJustify = 4,htmlCaptionAlignTop = 5,htmlCaptionAlignBottom = 6,htmlCaptionAlign_Max = 2147483647L
  } htmlCaptionAlign;

  typedef enum _htmlCaptionVAlign {
    htmlCaptionVAlignNotSet = 0,htmlCaptionVAlignTop = 1,htmlCaptionVAlignBottom = 2,htmlCaptionVAlign_Max = 2147483647L
  } htmlCaptionVAlign;

  EXTERN_C const GUID CLSID_CTableCaption;
  EXTERN_C const GUID CLSID_CCommentElement;
  EXTERN_C const GUID CLSID_CPhraseElement;
  EXTERN_C const GUID CLSID_CSpanElement;

  typedef enum _htmlFrame {
    htmlFrameNotSet = 0,htmlFramevoid = 1,htmlFrameabove = 2,htmlFramebelow = 3,htmlFramehsides = 4,htmlFramelhs = 5,htmlFramerhs = 6,htmlFramevsides = 7,htmlFramebox = 8,htmlFrameborder = 9,htmlFrame_Max = 2147483647L
  } htmlFrame;

  typedef enum _htmlRules {
    htmlRulesNotSet = 0,htmlRulesnone = 1,htmlRulesgroups = 2,htmlRulesrows = 3,htmlRulescols = 4,htmlRulesall = 5,htmlRules_Max = 2147483647L
  } htmlRules;

  typedef enum _htmlCellAlign {
    htmlCellAlignNotSet = 0,htmlCellAlignLeft = 1,htmlCellAlignCenter = 2,htmlCellAlignRight = 3,htmlCellAlignMiddle = htmlCellAlignCenter,htmlCellAlign_Max = 2147483647L
  } htmlCellAlign;

  typedef enum _htmlCellVAlign {
    htmlCellVAlignNotSet = 0,htmlCellVAlignTop = 1,htmlCellVAlignMiddle = 2,htmlCellVAlignBottom = 3,htmlCellVAlignBaseline = 4,htmlCellVAlignCenter = htmlCellVAlignMiddle,htmlCellVAlign_Max = 2147483647L
  } htmlCellVAlign;

  EXTERN_C const GUID CLSID_CTable;
  EXTERN_C const GUID CLSID_CTableCol;
  EXTERN_C const GUID CLSID_CTableSection;
  EXTERN_C const GUID CLSID_CTableRow;
  EXTERN_C const GUID CLSID_CTableCell;
  EXTERN_C const GUID CLSID_CScriptElement;
  EXTERN_C const GUID CLSID_CNoShowElement;
  EXTERN_C const GUID CLSID_CObjectElement;
  EXTERN_C const GUID CLSID_CParamElement;

  typedef enum _frameScrolling {
    frameScrollingyes = 1,frameScrollingno = 2,frameScrollingauto = 4,frameScrolling_Max = 2147483647L
  } frameScrolling;

  EXTERN_C const GUID CLSID_CFrameSite;
  EXTERN_C const GUID CLSID_CFrameElement;
  EXTERN_C const GUID CLSID_CIFrameElement;
  EXTERN_C const GUID CLSID_C1DElement;
  EXTERN_C const GUID CLSID_CFieldSetElement;
  EXTERN_C const GUID CLSID_CLegendElement;
  EXTERN_C const GUID CLSID_CSpanSite;
  EXTERN_C const GUID CLSID_CFrameSetSite;
  EXTERN_C const GUID CLSID_CBGsound;
  EXTERN_C const GUID CLSID_CStyleElement;
  EXTERN_C const GUID CLSID_CFontFace;

  typedef enum _ELEMENT_CORNER {
    ELEMENT_CORNER_NONE = 0,ELEMENT_CORNER_TOP = 1,ELEMENT_CORNER_LEFT = 2,ELEMENT_CORNER_BOTTOM = 3,ELEMENT_CORNER_RIGHT = 4,ELEMENT_CORNER_TOPLEFT = 5,ELEMENT_CORNER_TOPRIGHT = 6,ELEMENT_CORNER_BOTTOMLEFT = 7,ELEMENT_CORNER_BOTTOMRIGHT = 8,ELEMENT_CORNER_Max = 2147483647L
  } ELEMENT_CORNER;

  typedef enum _SECUREURLHOSTVALIDATE_FLAGS {
    SUHV_PROMPTBEFORENO = 0x1,SUHV_SILENTYES = 0x2,SUHV_UNSECURESOURCE = 0x4,SECUREURLHOSTVALIDATE_FLAGS_Max = 2147483647L
  } SECUREURLHOSTVALIDATE_FLAGS;

  typedef enum _POINTER_GRAVITY {
    POINTER_GRAVITY_Left = 0,POINTER_GRAVITY_Right = 1,POINTER_GRAVITY_Max = 2147483647L
  } POINTER_GRAVITY;

  typedef enum _ELEMENT_ADJACENCY {
    ELEM_ADJ_BeforeBegin = 0,ELEM_ADJ_AfterBegin = 1,ELEM_ADJ_BeforeEnd = 2,ELEM_ADJ_AfterEnd = 3,ELEMENT_ADJACENCY_Max = 2147483647L
  } ELEMENT_ADJACENCY;

  typedef enum _MARKUP_CONTEXT_TYPE {
    CONTEXT_TYPE_None = 0,CONTEXT_TYPE_Text = 1,CONTEXT_TYPE_EnterScope = 2,CONTEXT_TYPE_ExitScope = 3,CONTEXT_TYPE_NoScope = 4,MARKUP_CONTEXT_TYPE_Max = 2147483647L
  } MARKUP_CONTEXT_TYPE;

  typedef enum _FINDTEXT_FLAGS {
    FINDTEXT_BACKWARDS = 0x1,FINDTEXT_WHOLEWORD = 0x2,FINDTEXT_MATCHCASE = 0x4,FINDTEXT_RAW = 0x20000,FINDTEXT_MATCHDIAC = 0x20000000,FINDTEXT_MATCHKASHIDA = 0x40000000,FINDTEXT_MATCHALEFHAMZA = 0x80000000,FINDTEXT_FLAGS_Max = 2147483647L
  } FINDTEXT_FLAGS;

  typedef enum _MOVEUNIT_ACTION {
    MOVEUNIT_PREVCHAR = 0,MOVEUNIT_NEXTCHAR = 1,MOVEUNIT_PREVCLUSTERBEGIN = 2,MOVEUNIT_NEXTCLUSTERBEGIN = 3,MOVEUNIT_PREVCLUSTEREND = 4,MOVEUNIT_NEXTCLUSTEREND = 5,MOVEUNIT_PREVWORDBEGIN = 6,MOVEUNIT_NEXTWORDBEGIN = 7,MOVEUNIT_PREVWORDEND = 8,MOVEUNIT_NEXTWORDEND = 9,MOVEUNIT_PREVPROOFWORD = 10,MOVEUNIT_NEXTPROOFWORD = 11,MOVEUNIT_NEXTURLBEGIN = 12,MOVEUNIT_PREVURLBEGIN = 13,MOVEUNIT_NEXTURLEND = 14,MOVEUNIT_PREVURLEND = 15,MOVEUNIT_PREVSENTENCE = 16,MOVEUNIT_NEXTSENTENCE = 17,MOVEUNIT_PREVBLOCK = 18,MOVEUNIT_NEXTBLOCK = 19,MOVEUNIT_ACTION_Max = 2147483647L
  } MOVEUNIT_ACTION;

  typedef enum _PARSE_FLAGS {
    PARSE_ABSOLUTIFYIE40URLS = 0x1,PARSE_FLAGS_Max = 2147483647L
  } PARSE_FLAGS;

  typedef enum _ELEMENT_TAG_ID {
    TAGID_NULL = 0,TAGID_UNKNOWN = 1,TAGID_A = 2,TAGID_ACRONYM = 3,TAGID_ADDRESS = 4,TAGID_APPLET = 5,TAGID_AREA = 6,TAGID_B = 7,TAGID_BASE = 8,TAGID_BASEFONT = 9,TAGID_BDO = 10,TAGID_BGSOUND = 11,TAGID_BIG = 12,TAGID_BLINK = 13,TAGID_BLOCKQUOTE = 14,TAGID_BODY = 15,TAGID_BR = 16,TAGID_BUTTON = 17,TAGID_CAPTION = 18,TAGID_CENTER = 19,TAGID_CITE = 20,TAGID_CODE = 21,TAGID_COL = 22,TAGID_COLGROUP = 23,TAGID_COMMENT = 24,TAGID_COMMENT_RAW = 25,TAGID_DD = 26,TAGID_DEL = 27,TAGID_DFN = 28,TAGID_DIR = 29,TAGID_DIV = 30,TAGID_DL = 31,TAGID_DT = 32,TAGID_EM = 33,TAGID_EMBED = 34,TAGID_FIELDSET = 35,TAGID_FONT = 36,TAGID_FORM = 37,TAGID_FRAME = 38,TAGID_FRAMESET = 39,TAGID_GENERIC = 40,TAGID_H1 = 41,TAGID_H2 = 42,TAGID_H3 = 43,TAGID_H4 = 44,TAGID_H5 = 45,TAGID_H6 = 46,TAGID_HEAD = 47,TAGID_HR = 48,TAGID_HTML = 49,TAGID_I = 50,TAGID_IFRAME = 51,TAGID_IMG = 52,TAGID_INPUT = 53,TAGID_INS = 54,TAGID_KBD = 55,TAGID_LABEL = 56,TAGID_LEGEND = 57,TAGID_LI = 58,TAGID_LINK = 59,TAGID_LISTING = 60,TAGID_MAP = 61,TAGID_MARQUEE = 62,TAGID_MENU = 63,TAGID_META = 64,TAGID_NEXTID = 65,TAGID_NOBR = 66,TAGID_NOEMBED = 67,TAGID_NOFRAMES = 68,TAGID_NOSCRIPT = 69,TAGID_OBJECT = 70,TAGID_OL = 71,TAGID_OPTION = 72,TAGID_P = 73,TAGID_PARAM = 74,TAGID_PLAINTEXT = 75,TAGID_PRE = 76,TAGID_Q = 77,TAGID_RP = 78,TAGID_RT = 79,TAGID_RUBY = 80,TAGID_S = 81,TAGID_SAMP = 82,TAGID_SCRIPT = 83,TAGID_SELECT = 84,TAGID_SMALL = 85,TAGID_SPAN = 86,TAGID_STRIKE = 87,TAGID_STRONG = 88,TAGID_STYLE = 89,TAGID_SUB = 90,TAGID_SUP = 91,TAGID_TABLE = 92,TAGID_TBODY = 93,TAGID_TC = 94,TAGID_TD = 95,TAGID_TEXTAREA = 96,TAGID_TFOOT = 97,TAGID_TH = 98,TAGID_THEAD = 99,TAGID_TITLE = 100,TAGID_TR = 101,TAGID_TT = 102,TAGID_U = 103,TAGID_UL = 104,TAGID_VAR = 105,TAGID_WBR = 106,TAGID_XMP = 107,TAGID_ROOT = 108,TAGID_OPTGROUP = 109,TAGID_COUNT = 110,TAGID_LAST_PREDEFINED = 10000,ELEMENT_TAG_ID_Max = 2147483647L
  } ELEMENT_TAG_ID;

  typedef enum _SELECTION_TYPE {
    SELECTION_TYPE_None = 0,SELECTION_TYPE_Caret = 1,SELECTION_TYPE_Text = 2,SELECTION_TYPE_Control = 3,SELECTION_TYPE_Max = 2147483647L
  } SELECTION_TYPE;

  typedef enum _SAVE_SEGMENTS_FLAGS {
    SAVE_SEGMENTS_NoIE4SelectionCompat = 0x1,SAVE_SEGMENTS_FLAGS_Max = 2147483647L
  } SAVE_SEGMENTS_FLAGS;

  typedef enum _CARET_DIRECTION {
    CARET_DIRECTION_INDETERMINATE = 0,CARET_DIRECTION_SAME = 1,CARET_DIRECTION_BACKWARD = 2,CARET_DIRECTION_FORWARD = 3,CARET_DIRECTION_Max = 2147483647L
  } CARET_DIRECTION;

  typedef enum _LINE_DIRECTION {
    LINE_DIRECTION_RightToLeft = 1,LINE_DIRECTION_LeftToRight = 2,LINE_DIRECTION_Max = 2147483647L
  } LINE_DIRECTION;

  typedef enum _HT_OPTIONS {
    HT_OPT_AllowAfterEOL = 0x1,HT_OPTIONS_Max = 2147483647L
  } HT_OPTIONS;

  typedef enum _HT_RESULTS {
    HT_RESULTS_Glyph = 0x1,HT_RESULTS_Max = 2147483647L
  } HT_RESULTS;

  typedef enum _DISPLAY_MOVEUNIT {
    DISPLAY_MOVEUNIT_PreviousLine = 1,DISPLAY_MOVEUNIT_NextLine = 2,DISPLAY_MOVEUNIT_CurrentLineStart = 3,DISPLAY_MOVEUNIT_CurrentLineEnd = 4,DISPLAY_MOVEUNIT_TopOfWindow = 5,DISPLAY_MOVEUNIT_BottomOfWindow = 6,DISPLAY_MOVEUNIT_Max = 2147483647L
  } DISPLAY_MOVEUNIT;

  typedef enum _DISPLAY_GRAVITY {
    DISPLAY_GRAVITY_PreviousLine = 1,DISPLAY_GRAVITY_NextLine = 2,DISPLAY_GRAVITY_Max = 2147483647L
  } DISPLAY_GRAVITY;

  typedef enum _DISPLAY_BREAK {
    DISPLAY_BREAK_None = 0,DISPLAY_BREAK_Block = 0x1,DISPLAY_BREAK_Break = 0x2,DISPLAY_BREAK_Max = 2147483647L
  } DISPLAY_BREAK;

  typedef enum _COORD_SYSTEM {
    COORD_SYSTEM_GLOBAL = 0,COORD_SYSTEM_PARENT = 1,COORD_SYSTEM_CONTAINER = 2,COORD_SYSTEM_CONTENT = 3,COORD_SYSTEM_FRAME = 4,COORD_SYSTEM_Max = 2147483647L
  } COORD_SYSTEM;

  EXTERN_C const GUID CLSID_HtmlDlgSafeHelper;
  EXTERN_C const GUID CLSID_BlockFormats;
  EXTERN_C const GUID CLSID_FontNames;
  EXTERN_C const GUID CLSID_CHTMLNamespace;
  EXTERN_C const GUID CLSID_CHTMLNamespaceCollection;

  typedef enum _HTML_PAINTER {
    HTMLPAINTER_OPAQUE = 0x1,HTMLPAINTER_TRANSPARENT = 0x2,HTMLPAINTER_ALPHA = 0x4,HTMLPAINTER_COMPLEX = 0x8,HTMLPAINTER_OVERLAY = 0x10,HTMLPAINTER_HITTEST = 0x20,HTMLPAINTER_SURFACE = 0x100,HTMLPAINTER_3DSURFACE = 0x200,HTMLPAINTER_NOBAND = 0x400,HTMLPAINTER_NODC = 0x1000,HTMLPAINTER_NOPHYSICALCLIP = 0x2000,HTMLPAINTER_NOSAVEDC = 0x4000,HTMLPAINTER_SUPPORTS_XFORM = 0x8000,HTMLPAINTER_EXPAND = 0x10000,HTMLPAINTER_NOSCROLLBITS = 0x20000,HTML_PAINTER_Max = 2147483647L
  } HTML_PAINTER;

  typedef enum _HTML_PAINT_ZORDER {
    HTMLPAINT_ZORDER_NONE = 0,HTMLPAINT_ZORDER_REPLACE_ALL = 1,HTMLPAINT_ZORDER_REPLACE_CONTENT = 2,HTMLPAINT_ZORDER_REPLACE_BACKGROUND = 3,HTMLPAINT_ZORDER_BELOW_CONTENT = 4,HTMLPAINT_ZORDER_BELOW_FLOW = 5,HTMLPAINT_ZORDER_ABOVE_FLOW = 6,HTMLPAINT_ZORDER_ABOVE_CONTENT = 7,HTMLPAINT_ZORDER_WINDOW_TOP = 8,HTML_PAINT_ZORDER_Max = 2147483647L
  } HTML_PAINT_ZORDER;

  typedef enum _HTML_PAINT_DRAW_FLAGS {
    HTMLPAINT_DRAW_UPDATEREGION = 0x1,HTMLPAINT_DRAW_USE_XFORM = 0x2,HTML_PAINT_DRAW_FLAGS_Max = 2147483647L
  } HTML_PAINT_DRAW_FLAGS;

  typedef enum _HTML_PAINT_EVENT_FLAGS {
    HTMLPAINT_EVENT_TARGET = 0x1,HTMLPAINT_EVENT_SETCURSOR = 0x2,HTML_PAINT_EVENT_FLAGS_Max = 2147483647L
  } HTML_PAINT_EVENT_FLAGS;

  typedef enum _HTML_PAINT_DRAW_INFO_FLAGS {
    HTMLPAINT_DRAWINFO_VIEWPORT = 0x1,HTMLPAINT_DRAWINFO_UPDATEREGION = 0x2,HTMLPAINT_DRAWINFO_XFORM = 0x4,HTML_PAINT_DRAW_INFO_FLAGS_Max = 2147483647L
  } HTML_PAINT_DRAW_INFO_FLAGS;

  typedef struct _HTML_PAINTER_INFO {
    LONG lFlags;
    LONG lZOrder;
    IID iidDrawObject;
    RECT rcExpand;
  } HTML_PAINTER_INFO;

  typedef struct _HTML_PAINT_XFORM {
    FLOAT eM11;
    FLOAT eM12;
    FLOAT eM21;
    FLOAT eM22;
    FLOAT eDx;
    FLOAT eDy;
  } HTML_PAINT_XFORM;

  typedef struct _HTML_PAINT_DRAW_INFO {
    RECT rcViewport;
    HRGN hrgnUpdate;
    HTML_PAINT_XFORM xform;
  } HTML_PAINT_DRAW_INFO;

  typedef enum _HTMLDlgFlag {
    HTMLDlgFlagNo = 0,HTMLDlgFlagOff = 0,HTMLDlgFlag0 = 0,HTMLDlgFlagYes = 1,HTMLDlgFlagOn = 1,HTMLDlgFlag1 = 1,HTMLDlgFlagNotSet = -1,HTMLDlgFlag_Max = 2147483647L
  } HTMLDlgFlag;

  typedef enum _HTMLDlgBorder {
    HTMLDlgBorderThin = 0,HTMLDlgBorderThick = 0x40000L,HTMLDlgBorder_Max = 2147483647L
  } HTMLDlgBorder;

  typedef enum _HTMLDlgEdge {
    HTMLDlgEdgeSunken = 0,HTMLDlgEdgeRaised = 16,HTMLDlgEdge_Max = 2147483647L
  } HTMLDlgEdge;

  typedef enum _HTMLDlgCenter {
    HTMLDlgCenterNo = 0,HTMLDlgCenterOff = 0,HTMLDlgCenter0 = 0,HTMLDlgCenterYes = 1,HTMLDlgCenterOn = 1,HTMLDlgCenter1 = 1,HTMLDlgCenterParent = 1,HTMLDlgCenterDesktop = 2,HTMLDlgCenter_Max = 2147483647L
  } HTMLDlgCenter;

  EXTERN_C const GUID CLSID_CThreadDialogProcParam;
  EXTERN_C const GUID CLSID_CHTMLDlg;
  EXTERN_C const GUID CLSID_CHTMLPopup;

  typedef enum _HTMLAppFlag {
    HTMLAppFlagNo = 0,HTMLAppFlagOff = 0,HTMLAppFlag0 = 0,HTMLAppFlagYes = 1,HTMLAppFlagOn = 1,HTMLAppFlag1 = 1,HTMLAppFlag_Max = 2147483647L
  } HTMLAppFlag;

  typedef enum _HTMLMinimizeFlag {
    HTMLMinimizeFlagNo = 0,HTMLMinimizeFlagYes = 0x20000L,HTMLMinimizeFlag_Max = 2147483647L
  } HTMLMinimizeFlag;

  typedef enum _HTMLMaximizeFlag {
    HTMLMaximizeFlagNo = 0,HTMLMaximizeFlagYes = 0x10000L,HTMLMaximizeFlag_Max = 2147483647L
  } HTMLMaximizeFlag;

  typedef enum _HTMLCaptionFlag {
    HTMLCaptionFlagNo = 0,HTMLCaptionFlagYes = 0xc00000L,HTMLCaptionFlag_Max = 2147483647L
  } HTMLCaptionFlag;

  typedef enum _HTMLSysMenuFlag {
    HTMLSysMenuFlagNo = 0,HTMLSysMenuFlagYes = 0x80000L,HTMLSysMenuFlag_Max = 2147483647L
  } HTMLSysMenuFlag;

  typedef enum _HTMLBorder {
    HTMLBorderNone = 0,HTMLBorderThick = 0x40000L,HTMLBorderDialog = 0x400000L,HTMLBorderThin = 0x800000L,HTMLBorder_Max = 2147483647L
  } HTMLBorder;

  typedef enum _HTMLBorderStyle {
    HTMLBorderStyleNormal = 0,HTMLBorderStyleRaised = 0x100L,HTMLBorderStyleSunken = 0x200L,HTMLBorderStylecombined = 0x300L,HTMLBorderStyleStatic = 0x20000L,HTMLBorderStyle_Max = 2147483647L
  } HTMLBorderStyle;

  typedef enum _HTMLWindowState {
    HTMLWindowStateNormal = 1,HTMLWindowStateMaximize = 3,HTMLWindowStateMinimize = 6,HTMLWindowState_Max = 2147483647L
  } HTMLWindowState;

  EXTERN_C const GUID CLSID_CAppBehavior;

  typedef enum _BEHAVIOR_EVENT {
    BEHAVIOREVENT_FIRST = 0,BEHAVIOREVENT_CONTENTREADY = 0,BEHAVIOREVENT_DOCUMENTREADY = 1,BEHAVIOREVENT_APPLYSTYLE = 2,BEHAVIOREVENT_DOCUMENTCONTEXTCHANGE = 3,BEHAVIOREVENT_CONTENTSAVE = 4,BEHAVIOREVENT_LAST = 4,BEHAVIOR_EVENT_Max = 2147483647L
  } BEHAVIOR_EVENT;

  typedef enum _BEHAVIOR_EVENT_FLAGS {
    BEHAVIOREVENTFLAGS_BUBBLE = 1,BEHAVIOREVENTFLAGS_STANDARDADDITIVE = 2,BEHAVIOR_EVENT_FLAGS_Max = 2147483647L
  } BEHAVIOR_EVENT_FLAGS;

  typedef enum _BEHAVIOR_RENDER_INFO {
    BEHAVIORRENDERINFO_BEFOREBACKGROUND = 0x1,BEHAVIORRENDERINFO_AFTERBACKGROUND = 0x2,BEHAVIORRENDERINFO_BEFORECONTENT = 0x4,BEHAVIORRENDERINFO_AFTERCONTENT = 0x8,BEHAVIORRENDERINFO_AFTERFOREGROUND = 0x20,BEHAVIORRENDERINFO_ABOVECONTENT = 0x28,BEHAVIORRENDERINFO_ALLLAYERS = 0xff,BEHAVIORRENDERINFO_DISABLEBACKGROUND = 0x100,BEHAVIORRENDERINFO_DISABLENEGATIVEZ = 0x200,BEHAVIORRENDERINFO_DISABLECONTENT = 0x400,BEHAVIORRENDERINFO_DISABLEPOSITIVEZ = 0x800,BEHAVIORRENDERINFO_DISABLEALLLAYERS = 0xf00,BEHAVIORRENDERINFO_HITTESTING = 0x1000,BEHAVIORRENDERINFO_SURFACE = 0x100000,BEHAVIORRENDERINFO_3DSURFACE = 0x200000,BEHAVIOR_RENDER_INFO_Max = 2147483647L
  } BEHAVIOR_RENDER_INFO;

  typedef enum _BEHAVIOR_RELATION {
    BEHAVIOR_FIRSTRELATION = 0,BEHAVIOR_SAMEELEMENT = 0,BEHAVIOR_PARENT = 1,BEHAVIOR_CHILD = 2,BEHAVIOR_SIBLING = 3,BEHAVIOR_LASTRELATION = 3,BEHAVIOR_RELATION_Max = 2147483647L
  } BEHAVIOR_RELATION;

  typedef enum _BEHAVIOR_LAYOUT_INFO {
    BEHAVIORLAYOUTINFO_FULLDELEGATION = 0x1,BEHAVIORLAYOUTINFO_MODIFYNATURAL = 0x2,BEHAVIORLAYOUTINFO_MAPSIZE = 0x4,BEHAVIOR_LAYOUT_INFO_Max = 2147483647L
  } BEHAVIOR_LAYOUT_INFO;

  typedef enum _BEHAVIOR_LAYOUT_MODE {
    BEHAVIORLAYOUTMODE_NATURAL = 0x1,BEHAVIORLAYOUTMODE_MINWIDTH = 0x2,BEHAVIORLAYOUTMODE_MAXWIDTH = 0x4,BEHAVIORLAYOUTMODE_MEDIA_RESOLUTION = 0x4000,BEHAVIORLAYOUTMODE_FINAL_PERCENT = 0x8000,BEHAVIOR_LAYOUT_MODE_Max = 2147483647L
  } BEHAVIOR_LAYOUT_MODE;

  typedef enum _ELEMENTDESCRIPTOR_FLAGS {
    ELEMENTDESCRIPTORFLAGS_LITERAL = 1,ELEMENTDESCRIPTORFLAGS_NESTED_LITERAL = 2,ELEMENTDESCRIPTOR_FLAGS_Max = 2147483647L
  } ELEMENTDESCRIPTOR_FLAGS;

  typedef enum _ELEMENTNAMESPACE_FLAGS {
    ELEMENTNAMESPACEFLAGS_ALLOWANYTAG = 0x1,ELEMENTNAMESPACEFLAGS_QUERYFORUNKNOWNTAGS = 0x2,ELEMENTNAMESPACE_FLAGS_Max = 2147483647L
  } ELEMENTNAMESPACE_FLAGS;

  EXTERN_C const IID LIBID_MSHTML;

#ifndef __IHTMLEventObj_INTERFACE_DEFINED__
#define __IHTMLEventObj_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEventObj;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLEventObj : public IDispatch {
  public:
    virtual HRESULT WINAPI get_srcElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_altKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_ctrlKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_shiftKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_returnValue(VARIANT v) = 0;
    virtual HRESULT WINAPI get_returnValue(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_cancelBubble(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_cancelBubble(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_fromElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_toElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_keyCode(long v) = 0;
    virtual HRESULT WINAPI get_keyCode(long *p) = 0;
    virtual HRESULT WINAPI get_button(long *p) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_qualifier(BSTR *p) = 0;
    virtual HRESULT WINAPI get_reason(long *p) = 0;
    virtual HRESULT WINAPI get_x(long *p) = 0;
    virtual HRESULT WINAPI get_y(long *p) = 0;
    virtual HRESULT WINAPI get_clientX(long *p) = 0;
    virtual HRESULT WINAPI get_clientY(long *p) = 0;
    virtual HRESULT WINAPI get_offsetX(long *p) = 0;
    virtual HRESULT WINAPI get_offsetY(long *p) = 0;
    virtual HRESULT WINAPI get_screenX(long *p) = 0;
    virtual HRESULT WINAPI get_screenY(long *p) = 0;
    virtual HRESULT WINAPI get_srcFilter(IDispatch **p) = 0;
  };
#else
  typedef struct IHTMLEventObjVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLEventObj *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLEventObj *This);
      ULONG (WINAPI *Release)(IHTMLEventObj *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLEventObj *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLEventObj *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLEventObj *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLEventObj *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_srcElement)(IHTMLEventObj *This,IHTMLElement **p);
      HRESULT (WINAPI *get_altKey)(IHTMLEventObj *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_ctrlKey)(IHTMLEventObj *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_shiftKey)(IHTMLEventObj *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_returnValue)(IHTMLEventObj *This,VARIANT v);
      HRESULT (WINAPI *get_returnValue)(IHTMLEventObj *This,VARIANT *p);
      HRESULT (WINAPI *put_cancelBubble)(IHTMLEventObj *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_cancelBubble)(IHTMLEventObj *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_fromElement)(IHTMLEventObj *This,IHTMLElement **p);
      HRESULT (WINAPI *get_toElement)(IHTMLEventObj *This,IHTMLElement **p);
      HRESULT (WINAPI *put_keyCode)(IHTMLEventObj *This,long v);
      HRESULT (WINAPI *get_keyCode)(IHTMLEventObj *This,long *p);
      HRESULT (WINAPI *get_button)(IHTMLEventObj *This,long *p);
      HRESULT (WINAPI *get_type)(IHTMLEventObj *This,BSTR *p);
      HRESULT (WINAPI *get_qualifier)(IHTMLEventObj *This,BSTR *p);
      HRESULT (WINAPI *get_reason)(IHTMLEventObj *This,long *p);
      HRESULT (WINAPI *get_x)(IHTMLEventObj *This,long *p);
      HRESULT (WINAPI *get_y)(IHTMLEventObj *This,long *p);
      HRESULT (WINAPI *get_clientX)(IHTMLEventObj *This,long *p);
      HRESULT (WINAPI *get_clientY)(IHTMLEventObj *This,long *p);
      HRESULT (WINAPI *get_offsetX)(IHTMLEventObj *This,long *p);
      HRESULT (WINAPI *get_offsetY)(IHTMLEventObj *This,long *p);
      HRESULT (WINAPI *get_screenX)(IHTMLEventObj *This,long *p);
      HRESULT (WINAPI *get_screenY)(IHTMLEventObj *This,long *p);
      HRESULT (WINAPI *get_srcFilter)(IHTMLEventObj *This,IDispatch **p);
    END_INTERFACE
  } IHTMLEventObjVtbl;
  interface IHTMLEventObj {
    CONST_VTBL struct IHTMLEventObjVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLEventObj_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLEventObj_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLEventObj_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLEventObj_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLEventObj_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLEventObj_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLEventObj_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLEventObj_get_srcElement(This,p) (This)->lpVtbl->get_srcElement(This,p)
#define IHTMLEventObj_get_altKey(This,p) (This)->lpVtbl->get_altKey(This,p)
#define IHTMLEventObj_get_ctrlKey(This,p) (This)->lpVtbl->get_ctrlKey(This,p)
#define IHTMLEventObj_get_shiftKey(This,p) (This)->lpVtbl->get_shiftKey(This,p)
#define IHTMLEventObj_put_returnValue(This,v) (This)->lpVtbl->put_returnValue(This,v)
#define IHTMLEventObj_get_returnValue(This,p) (This)->lpVtbl->get_returnValue(This,p)
#define IHTMLEventObj_put_cancelBubble(This,v) (This)->lpVtbl->put_cancelBubble(This,v)
#define IHTMLEventObj_get_cancelBubble(This,p) (This)->lpVtbl->get_cancelBubble(This,p)
#define IHTMLEventObj_get_fromElement(This,p) (This)->lpVtbl->get_fromElement(This,p)
#define IHTMLEventObj_get_toElement(This,p) (This)->lpVtbl->get_toElement(This,p)
#define IHTMLEventObj_put_keyCode(This,v) (This)->lpVtbl->put_keyCode(This,v)
#define IHTMLEventObj_get_keyCode(This,p) (This)->lpVtbl->get_keyCode(This,p)
#define IHTMLEventObj_get_button(This,p) (This)->lpVtbl->get_button(This,p)
#define IHTMLEventObj_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLEventObj_get_qualifier(This,p) (This)->lpVtbl->get_qualifier(This,p)
#define IHTMLEventObj_get_reason(This,p) (This)->lpVtbl->get_reason(This,p)
#define IHTMLEventObj_get_x(This,p) (This)->lpVtbl->get_x(This,p)
#define IHTMLEventObj_get_y(This,p) (This)->lpVtbl->get_y(This,p)
#define IHTMLEventObj_get_clientX(This,p) (This)->lpVtbl->get_clientX(This,p)
#define IHTMLEventObj_get_clientY(This,p) (This)->lpVtbl->get_clientY(This,p)
#define IHTMLEventObj_get_offsetX(This,p) (This)->lpVtbl->get_offsetX(This,p)
#define IHTMLEventObj_get_offsetY(This,p) (This)->lpVtbl->get_offsetY(This,p)
#define IHTMLEventObj_get_screenX(This,p) (This)->lpVtbl->get_screenX(This,p)
#define IHTMLEventObj_get_screenY(This,p) (This)->lpVtbl->get_screenY(This,p)
#define IHTMLEventObj_get_srcFilter(This,p) (This)->lpVtbl->get_srcFilter(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLEventObj_get_srcElement_Proxy(IHTMLEventObj *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj_get_srcElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_altKey_Proxy(IHTMLEventObj *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj_get_altKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_ctrlKey_Proxy(IHTMLEventObj *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj_get_ctrlKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_shiftKey_Proxy(IHTMLEventObj *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj_get_shiftKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_put_returnValue_Proxy(IHTMLEventObj *This,VARIANT v);
  void __RPC_STUB IHTMLEventObj_put_returnValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_returnValue_Proxy(IHTMLEventObj *This,VARIANT *p);
  void __RPC_STUB IHTMLEventObj_get_returnValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_put_cancelBubble_Proxy(IHTMLEventObj *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj_put_cancelBubble_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_cancelBubble_Proxy(IHTMLEventObj *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj_get_cancelBubble_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_fromElement_Proxy(IHTMLEventObj *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj_get_fromElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_toElement_Proxy(IHTMLEventObj *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj_get_toElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_put_keyCode_Proxy(IHTMLEventObj *This,long v);
  void __RPC_STUB IHTMLEventObj_put_keyCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_keyCode_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_keyCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_button_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_button_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_type_Proxy(IHTMLEventObj *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_qualifier_Proxy(IHTMLEventObj *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj_get_qualifier_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_reason_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_reason_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_x_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_x_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_y_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_y_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_clientX_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_clientX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_clientY_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_clientY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_offsetX_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_offsetX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_offsetY_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_offsetY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_screenX_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_screenX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_screenY_Proxy(IHTMLEventObj *This,long *p);
  void __RPC_STUB IHTMLEventObj_get_screenY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj_get_srcFilter_Proxy(IHTMLEventObj *This,IDispatch **p);
  void __RPC_STUB IHTMLEventObj_get_srcFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSite_INTERFACE_DEFINED__
#define __IElementBehaviorSite_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSite;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorSite : public IUnknown {
  public:
    virtual HRESULT WINAPI GetElement(IHTMLElement **ppElement) = 0;
    virtual HRESULT WINAPI RegisterNotification(LONG lEvent) = 0;
  };
#else
  typedef struct IElementBehaviorSiteVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorSite *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorSite *This);
      ULONG (WINAPI *Release)(IElementBehaviorSite *This);
      HRESULT (WINAPI *GetElement)(IElementBehaviorSite *This,IHTMLElement **ppElement);
      HRESULT (WINAPI *RegisterNotification)(IElementBehaviorSite *This,LONG lEvent);
    END_INTERFACE
  } IElementBehaviorSiteVtbl;
  interface IElementBehaviorSite {
    CONST_VTBL struct IElementBehaviorSiteVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorSite_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorSite_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorSite_GetElement(This,ppElement) (This)->lpVtbl->GetElement(This,ppElement)
#define IElementBehaviorSite_RegisterNotification(This,lEvent) (This)->lpVtbl->RegisterNotification(This,lEvent)
#endif
#endif
  HRESULT WINAPI IElementBehaviorSite_GetElement_Proxy(IElementBehaviorSite *This,IHTMLElement **ppElement);
  void __RPC_STUB IElementBehaviorSite_GetElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSite_RegisterNotification_Proxy(IElementBehaviorSite *This,LONG lEvent);
  void __RPC_STUB IElementBehaviorSite_RegisterNotification_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehavior_INTERFACE_DEFINED__
#define __IElementBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehavior : public IUnknown {
  public:
    virtual HRESULT WINAPI Init(IElementBehaviorSite *pBehaviorSite) = 0;
    virtual HRESULT WINAPI Notify(LONG lEvent,VARIANT *pVar) = 0;
    virtual HRESULT WINAPI Detach(void) = 0;
  };
#else
  typedef struct IElementBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehavior *This);
      ULONG (WINAPI *Release)(IElementBehavior *This);
      HRESULT (WINAPI *Init)(IElementBehavior *This,IElementBehaviorSite *pBehaviorSite);
      HRESULT (WINAPI *Notify)(IElementBehavior *This,LONG lEvent,VARIANT *pVar);
      HRESULT (WINAPI *Detach)(IElementBehavior *This);
    END_INTERFACE
  } IElementBehaviorVtbl;
  interface IElementBehavior {
    CONST_VTBL struct IElementBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehavior_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehavior_Init(This,pBehaviorSite) (This)->lpVtbl->Init(This,pBehaviorSite)
#define IElementBehavior_Notify(This,lEvent,pVar) (This)->lpVtbl->Notify(This,lEvent,pVar)
#define IElementBehavior_Detach(This) (This)->lpVtbl->Detach(This)
#endif
#endif
  HRESULT WINAPI IElementBehavior_Init_Proxy(IElementBehavior *This,IElementBehaviorSite *pBehaviorSite);
  void __RPC_STUB IElementBehavior_Init_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehavior_Notify_Proxy(IElementBehavior *This,LONG lEvent,VARIANT *pVar);
  void __RPC_STUB IElementBehavior_Notify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehavior_Detach_Proxy(IElementBehavior *This);
  void __RPC_STUB IElementBehavior_Detach_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorFactory_INTERFACE_DEFINED__
#define __IElementBehaviorFactory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorFactory;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorFactory : public IUnknown {
  public:
    virtual HRESULT WINAPI FindBehavior(BSTR bstrBehavior,BSTR bstrBehaviorUrl,IElementBehaviorSite *pSite,IElementBehavior **ppBehavior) = 0;
  };
#else
  typedef struct IElementBehaviorFactoryVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorFactory *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorFactory *This);
      ULONG (WINAPI *Release)(IElementBehaviorFactory *This);
      HRESULT (WINAPI *FindBehavior)(IElementBehaviorFactory *This,BSTR bstrBehavior,BSTR bstrBehaviorUrl,IElementBehaviorSite *pSite,IElementBehavior **ppBehavior);
    END_INTERFACE
  } IElementBehaviorFactoryVtbl;
  interface IElementBehaviorFactory {
    CONST_VTBL struct IElementBehaviorFactoryVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorFactory_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorFactory_FindBehavior(This,bstrBehavior,bstrBehaviorUrl,pSite,ppBehavior) (This)->lpVtbl->FindBehavior(This,bstrBehavior,bstrBehaviorUrl,pSite,ppBehavior)
#endif
#endif
  HRESULT WINAPI IElementBehaviorFactory_FindBehavior_Proxy(IElementBehaviorFactory *This,BSTR bstrBehavior,BSTR bstrBehaviorUrl,IElementBehaviorSite *pSite,IElementBehavior **ppBehavior);
  void __RPC_STUB IElementBehaviorFactory_FindBehavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteOM_INTERFACE_DEFINED__
#define __IElementBehaviorSiteOM_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteOM;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorSiteOM : public IUnknown {
  public:
    virtual HRESULT WINAPI RegisterEvent(LPOLESTR pchEvent,LONG lFlags,LONG *plCookie) = 0;
    virtual HRESULT WINAPI GetEventCookie(LPOLESTR pchEvent,LONG *plCookie) = 0;
    virtual HRESULT WINAPI FireEvent(LONG lCookie,IHTMLEventObj *pEventObject) = 0;
    virtual HRESULT WINAPI CreateEventObject(IHTMLEventObj **ppEventObject) = 0;
    virtual HRESULT WINAPI RegisterName(LPOLESTR pchName) = 0;
    virtual HRESULT WINAPI RegisterUrn(LPOLESTR pchUrn) = 0;
  };
#else
  typedef struct IElementBehaviorSiteOMVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorSiteOM *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorSiteOM *This);
      ULONG (WINAPI *Release)(IElementBehaviorSiteOM *This);
      HRESULT (WINAPI *RegisterEvent)(IElementBehaviorSiteOM *This,LPOLESTR pchEvent,LONG lFlags,LONG *plCookie);
      HRESULT (WINAPI *GetEventCookie)(IElementBehaviorSiteOM *This,LPOLESTR pchEvent,LONG *plCookie);
      HRESULT (WINAPI *FireEvent)(IElementBehaviorSiteOM *This,LONG lCookie,IHTMLEventObj *pEventObject);
      HRESULT (WINAPI *CreateEventObject)(IElementBehaviorSiteOM *This,IHTMLEventObj **ppEventObject);
      HRESULT (WINAPI *RegisterName)(IElementBehaviorSiteOM *This,LPOLESTR pchName);
      HRESULT (WINAPI *RegisterUrn)(IElementBehaviorSiteOM *This,LPOLESTR pchUrn);
    END_INTERFACE
  } IElementBehaviorSiteOMVtbl;
  interface IElementBehaviorSiteOM {
    CONST_VTBL struct IElementBehaviorSiteOMVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorSiteOM_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorSiteOM_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorSiteOM_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorSiteOM_RegisterEvent(This,pchEvent,lFlags,plCookie) (This)->lpVtbl->RegisterEvent(This,pchEvent,lFlags,plCookie)
#define IElementBehaviorSiteOM_GetEventCookie(This,pchEvent,plCookie) (This)->lpVtbl->GetEventCookie(This,pchEvent,plCookie)
#define IElementBehaviorSiteOM_FireEvent(This,lCookie,pEventObject) (This)->lpVtbl->FireEvent(This,lCookie,pEventObject)
#define IElementBehaviorSiteOM_CreateEventObject(This,ppEventObject) (This)->lpVtbl->CreateEventObject(This,ppEventObject)
#define IElementBehaviorSiteOM_RegisterName(This,pchName) (This)->lpVtbl->RegisterName(This,pchName)
#define IElementBehaviorSiteOM_RegisterUrn(This,pchUrn) (This)->lpVtbl->RegisterUrn(This,pchUrn)
#endif
#endif
  HRESULT WINAPI IElementBehaviorSiteOM_RegisterEvent_Proxy(IElementBehaviorSiteOM *This,LPOLESTR pchEvent,LONG lFlags,LONG *plCookie);
  void __RPC_STUB IElementBehaviorSiteOM_RegisterEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_GetEventCookie_Proxy(IElementBehaviorSiteOM *This,LPOLESTR pchEvent,LONG *plCookie);
  void __RPC_STUB IElementBehaviorSiteOM_GetEventCookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_FireEvent_Proxy(IElementBehaviorSiteOM *This,LONG lCookie,IHTMLEventObj *pEventObject);
  void __RPC_STUB IElementBehaviorSiteOM_FireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_CreateEventObject_Proxy(IElementBehaviorSiteOM *This,IHTMLEventObj **ppEventObject);
  void __RPC_STUB IElementBehaviorSiteOM_CreateEventObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_RegisterName_Proxy(IElementBehaviorSiteOM *This,LPOLESTR pchName);
  void __RPC_STUB IElementBehaviorSiteOM_RegisterName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteOM_RegisterUrn_Proxy(IElementBehaviorSiteOM *This,LPOLESTR pchUrn);
  void __RPC_STUB IElementBehaviorSiteOM_RegisterUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorRender_INTERFACE_DEFINED__
#define __IElementBehaviorRender_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorRender;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorRender : public IUnknown {
  public:
    virtual HRESULT WINAPI Draw(HDC hdc,LONG lLayer,RECT *pRect,IUnknown *pReserved) = 0;
    virtual HRESULT WINAPI GetRenderInfo(LONG *plRenderInfo) = 0;
    virtual HRESULT WINAPI HitTestPoint(POINT *pPoint,IUnknown *pReserved,WINBOOL *pbHit) = 0;
  };
#else
  typedef struct IElementBehaviorRenderVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorRender *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorRender *This);
      ULONG (WINAPI *Release)(IElementBehaviorRender *This);
      HRESULT (WINAPI *Draw)(IElementBehaviorRender *This,HDC hdc,LONG lLayer,RECT *pRect,IUnknown *pReserved);
      HRESULT (WINAPI *GetRenderInfo)(IElementBehaviorRender *This,LONG *plRenderInfo);
      HRESULT (WINAPI *HitTestPoint)(IElementBehaviorRender *This,POINT *pPoint,IUnknown *pReserved,WINBOOL *pbHit);
    END_INTERFACE
  } IElementBehaviorRenderVtbl;
  interface IElementBehaviorRender {
    CONST_VTBL struct IElementBehaviorRenderVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorRender_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorRender_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorRender_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorRender_Draw(This,hdc,lLayer,pRect,pReserved) (This)->lpVtbl->Draw(This,hdc,lLayer,pRect,pReserved)
#define IElementBehaviorRender_GetRenderInfo(This,plRenderInfo) (This)->lpVtbl->GetRenderInfo(This,plRenderInfo)
#define IElementBehaviorRender_HitTestPoint(This,pPoint,pReserved,pbHit) (This)->lpVtbl->HitTestPoint(This,pPoint,pReserved,pbHit)
#endif
#endif
  HRESULT WINAPI IElementBehaviorRender_Draw_Proxy(IElementBehaviorRender *This,HDC hdc,LONG lLayer,RECT *pRect,IUnknown *pReserved);
  void __RPC_STUB IElementBehaviorRender_Draw_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorRender_GetRenderInfo_Proxy(IElementBehaviorRender *This,LONG *plRenderInfo);
  void __RPC_STUB IElementBehaviorRender_GetRenderInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorRender_HitTestPoint_Proxy(IElementBehaviorRender *This,POINT *pPoint,IUnknown *pReserved,WINBOOL *pbHit);
  void __RPC_STUB IElementBehaviorRender_HitTestPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteRender_INTERFACE_DEFINED__
#define __IElementBehaviorSiteRender_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteRender;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorSiteRender : public IUnknown {
  public:
    virtual HRESULT WINAPI Invalidate(RECT *pRect) = 0;
    virtual HRESULT WINAPI InvalidateRenderInfo(void) = 0;
    virtual HRESULT WINAPI InvalidateStyle(void) = 0;
  };
#else
  typedef struct IElementBehaviorSiteRenderVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorSiteRender *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorSiteRender *This);
      ULONG (WINAPI *Release)(IElementBehaviorSiteRender *This);
      HRESULT (WINAPI *Invalidate)(IElementBehaviorSiteRender *This,RECT *pRect);
      HRESULT (WINAPI *InvalidateRenderInfo)(IElementBehaviorSiteRender *This);
      HRESULT (WINAPI *InvalidateStyle)(IElementBehaviorSiteRender *This);
    END_INTERFACE
  } IElementBehaviorSiteRenderVtbl;
  interface IElementBehaviorSiteRender {
    CONST_VTBL struct IElementBehaviorSiteRenderVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorSiteRender_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorSiteRender_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorSiteRender_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorSiteRender_Invalidate(This,pRect) (This)->lpVtbl->Invalidate(This,pRect)
#define IElementBehaviorSiteRender_InvalidateRenderInfo(This) (This)->lpVtbl->InvalidateRenderInfo(This)
#define IElementBehaviorSiteRender_InvalidateStyle(This) (This)->lpVtbl->InvalidateStyle(This)
#endif
#endif
  HRESULT WINAPI IElementBehaviorSiteRender_Invalidate_Proxy(IElementBehaviorSiteRender *This,RECT *pRect);
  void __RPC_STUB IElementBehaviorSiteRender_Invalidate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteRender_InvalidateRenderInfo_Proxy(IElementBehaviorSiteRender *This);
  void __RPC_STUB IElementBehaviorSiteRender_InvalidateRenderInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteRender_InvalidateStyle_Proxy(IElementBehaviorSiteRender *This);
  void __RPC_STUB IElementBehaviorSiteRender_InvalidateStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyle_INTERFACE_DEFINED__
#define __IHTMLStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyle;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct
IHTMLStyle : public IDispatch {
  public:
    virtual HRESULT WINAPI put_fontFamily(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontFamily(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontVariant(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontVariant(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontWeight(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontWeight(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontSize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_fontSize(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_font(BSTR v) = 0;
    virtual HRESULT WINAPI get_font(BSTR *p) = 0;
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_backgroundImage(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundImage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundRepeat(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundRepeat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundAttachment(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundAttachment(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundPosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundPositionX(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundPositionX(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_backgroundPositionY(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundPositionY(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_wordSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_wordSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_letterSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_letterSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textDecoration(BSTR v) = 0;
    virtual HRESULT WINAPI get_textDecoration(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textDecorationNone(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationNone(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationUnderline(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationUnderline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationOverline(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationOverline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationLineThrough(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationLineThrough(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationBlink(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationBlink(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_verticalAlign(VARIANT v) = 0;
    virtual HRESULT WINAPI get_verticalAlign(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textTransform(BSTR v) = 0;
    virtual HRESULT WINAPI get_textTransform(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textIndent(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textIndent(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_lineHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_lineHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginRight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginBottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_margin(BSTR v) = 0;
    virtual HRESULT WINAPI get_margin(BSTR *p) = 0;
    virtual HRESULT WINAPI put_paddingTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingRight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingBottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_padding(BSTR v) = 0;
    virtual HRESULT WINAPI get_padding(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(BSTR v) = 0;
    virtual HRESULT WINAPI get_border(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTop(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderTop(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderRight(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderRight(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderBottom(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderBottom(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderLeft(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderLeft(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderColor(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderColor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderTopColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderRightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderRightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderBottomColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderBottomColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderLeftColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderLeftColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderWidth(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderWidth(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderTopWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderRightWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderRightWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderBottomWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderBottomWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderLeftWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderLeftWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderTopStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderRightStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderRightStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderBottomStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderBottomStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderLeftStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderLeftStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_styleFloat(BSTR v) = 0;
    virtual HRESULT WINAPI get_styleFloat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_clear(BSTR v) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
    virtual HRESULT WINAPI put_display(BSTR v) = 0;
    virtual HRESULT WINAPI get_display(BSTR *p) = 0;
    virtual HRESULT WINAPI put_visibility(BSTR v) = 0;
    virtual HRESULT WINAPI get_visibility(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyleType(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyleType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStylePosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStylePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyleImage(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyleImage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_whiteSpace(BSTR v) = 0;
    virtual HRESULT WINAPI get_whiteSpace(BSTR *p) = 0;
    virtual HRESULT WINAPI put_top(VARIANT v) = 0;
    virtual HRESULT WINAPI get_top(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_left(VARIANT v) = 0;
    virtual HRESULT WINAPI get_left(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI put_zIndex(VARIANT v) = 0;
    virtual HRESULT WINAPI get_zIndex(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_overflow(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pageBreakBefore(BSTR v) = 0;
    virtual HRESULT WINAPI get_pageBreakBefore(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pageBreakAfter(BSTR v) = 0;
    virtual HRESULT WINAPI get_pageBreakAfter(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cssText(BSTR v) = 0;
    virtual HRESULT WINAPI get_cssText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pixelTop(long v) = 0;
    virtual HRESULT WINAPI get_pixelTop(long *p) = 0;
    virtual HRESULT WINAPI put_pixelLeft(long v) = 0;
    virtual HRESULT WINAPI get_pixelLeft(long *p) = 0;
    virtual HRESULT WINAPI put_pixelWidth(long v) = 0;
    virtual HRESULT WINAPI get_pixelWidth(long *p) = 0;
    virtual HRESULT WINAPI put_pixelHeight(long v) = 0;
    virtual HRESULT WINAPI get_pixelHeight(long *p) = 0;
    virtual HRESULT WINAPI put_posTop(float v) = 0;
    virtual HRESULT WINAPI get_posTop(float *p) = 0;
    virtual HRESULT WINAPI put_posLeft(float v) = 0;
    virtual HRESULT WINAPI get_posLeft(float *p) = 0;
    virtual HRESULT WINAPI put_posWidth(float v) = 0;
    virtual HRESULT WINAPI get_posWidth(float *p) = 0;
    virtual HRESULT WINAPI put_posHeight(float v) = 0;
    virtual HRESULT WINAPI get_posHeight(float *p) = 0;
    virtual HRESULT WINAPI put_cursor(BSTR v) = 0;
    virtual HRESULT WINAPI get_cursor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_clip(BSTR v) = 0;
    virtual HRESULT WINAPI get_clip(BSTR *p) = 0;
    virtual HRESULT WINAPI put_filter(BSTR v) = 0;
    virtual HRESULT WINAPI get_filter(BSTR *p) = 0;
    virtual HRESULT WINAPI setAttribute(BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags = 1) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI removeAttribute(BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
  };
#else
  typedef struct IHTMLStyleVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyle *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyle *This);
      ULONG (WINAPI *Release)(IHTMLStyle *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyle *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyle *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyle *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyle *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_fontFamily)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_fontFamily)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_fontStyle)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_fontStyle)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_fontVariant)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_fontVariant)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_fontWeight)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_fontWeight)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_fontSize)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_fontSize)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_font)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_font)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_color)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_color)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_background)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_background)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_backgroundColor)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_backgroundColor)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_backgroundImage)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_backgroundImage)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_backgroundRepeat)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_backgroundRepeat)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_backgroundAttachment)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_backgroundAttachment)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_backgroundPosition)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_backgroundPosition)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_backgroundPositionX)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_backgroundPositionX)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_backgroundPositionY)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_backgroundPositionY)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_wordSpacing)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_wordSpacing)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_letterSpacing)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_letterSpacing)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_textDecoration)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_textDecoration)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_textDecorationNone)(IHTMLStyle *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_textDecorationNone)(IHTMLStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_textDecorationUnderline)(IHTMLStyle *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_textDecorationUnderline)(IHTMLStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_textDecorationOverline)(IHTMLStyle *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_textDecorationOverline)(IHTMLStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_textDecorationLineThrough)(IHTMLStyle *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_textDecorationLineThrough)(IHTMLStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_textDecorationBlink)(IHTMLStyle *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_textDecorationBlink)(IHTMLStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_verticalAlign)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_verticalAlign)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_textTransform)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_textTransform)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_textAlign)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_textAlign)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_textIndent)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_textIndent)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_lineHeight)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_lineHeight)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_marginTop)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_marginTop)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_marginRight)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_marginRight)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_marginBottom)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_marginBottom)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_marginLeft)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_marginLeft)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_margin)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_margin)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_paddingTop)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_paddingTop)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_paddingRight)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_paddingRight)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_paddingBottom)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_paddingBottom)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_paddingLeft)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_paddingLeft)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_padding)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_padding)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_border)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_border)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderTop)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderTop)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderRight)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderRight)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderBottom)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderBottom)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderLeft)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderLeft)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderColor)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderColor)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderTopColor)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderTopColor)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderRightColor)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderRightColor)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderBottomColor)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderBottomColor)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderLeftColor)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderLeftColor)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderWidth)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderWidth)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderTopWidth)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderTopWidth)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderRightWidth)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderRightWidth)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderBottomWidth)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderBottomWidth)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderLeftWidth)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderLeftWidth)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderStyle)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderStyle)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderTopStyle)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderTopStyle)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderRightStyle)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderRightStyle)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderBottomStyle)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderBottomStyle)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderLeftStyle)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderLeftStyle)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_width)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_width)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_height)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_height)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_styleFloat)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_styleFloat)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_clear)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_clear)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_display)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_display)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_visibility)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_visibility)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_listStyleType)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_listStyleType)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_listStylePosition)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_listStylePosition)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_listStyleImage)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_listStyleImage)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_listStyle)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_listStyle)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_whiteSpace)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_whiteSpace)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_top)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_top)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_left)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_left)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_position)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_zIndex)(IHTMLStyle *This,VARIANT v);
      HRESULT (WINAPI *get_zIndex)(IHTMLStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_overflow)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_overflow)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_pageBreakBefore)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_pageBreakBefore)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_pageBreakAfter)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_pageBreakAfter)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_cssText)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_cssText)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_pixelTop)(IHTMLStyle *This,long v);
      HRESULT (WINAPI *get_pixelTop)(IHTMLStyle *This,long *p);
      HRESULT (WINAPI *put_pixelLeft)(IHTMLStyle *This,long v);
      HRESULT (WINAPI *get_pixelLeft)(IHTMLStyle *This,long *p);
      HRESULT (WINAPI *put_pixelWidth)(IHTMLStyle *This,long v);
      HRESULT (WINAPI *get_pixelWidth)(IHTMLStyle *This,long *p);
      HRESULT (WINAPI *put_pixelHeight)(IHTMLStyle *This,long v);
      HRESULT (WINAPI *get_pixelHeight)(IHTMLStyle *This,long *p);
      HRESULT (WINAPI *put_posTop)(IHTMLStyle *This,float v);
      HRESULT (WINAPI *get_posTop)(IHTMLStyle *This,float *p);
      HRESULT (WINAPI *put_posLeft)(IHTMLStyle *This,float v);
      HRESULT (WINAPI *get_posLeft)(IHTMLStyle *This,float *p);
      HRESULT (WINAPI *put_posWidth)(IHTMLStyle *This,float v);
      HRESULT (WINAPI *get_posWidth)(IHTMLStyle *This,float *p);
      HRESULT (WINAPI *put_posHeight)(IHTMLStyle *This,float v);
      HRESULT (WINAPI *get_posHeight)(IHTMLStyle *This,float *p);
      HRESULT (WINAPI *put_cursor)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_cursor)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_clip)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_clip)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *put_filter)(IHTMLStyle *This,BSTR v);
      HRESULT (WINAPI *get_filter)(IHTMLStyle *This,BSTR *p);
      HRESULT (WINAPI *setAttribute)(IHTMLStyle *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
      HRESULT (WINAPI *getAttribute)(IHTMLStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
      HRESULT (WINAPI *removeAttribute)(IHTMLStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
      HRESULT (WINAPI *toString)(IHTMLStyle *This,BSTR *String);
    END_INTERFACE
  } IHTMLStyleVtbl;
  interface IHTMLStyle {
    CONST_VTBL struct IHTMLStyleVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyle_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyle_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyle_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyle_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyle_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyle_put_fontFamily(This,v) (This)->lpVtbl->put_fontFamily(This,v)
#define IHTMLStyle_get_fontFamily(This,p) (This)->lpVtbl->get_fontFamily(This,p)
#define IHTMLStyle_put_fontStyle(This,v) (This)->lpVtbl->put_fontStyle(This,v)
#define IHTMLStyle_get_fontStyle(This,p) (This)->lpVtbl->get_fontStyle(This,p)
#define IHTMLStyle_put_fontVariant(This,v) (This)->lpVtbl->put_fontVariant(This,v)
#define IHTMLStyle_get_fontVariant(This,p) (This)->lpVtbl->get_fontVariant(This,p)
#define IHTMLStyle_put_fontWeight(This,v) (This)->lpVtbl->put_fontWeight(This,v)
#define IHTMLStyle_get_fontWeight(This,p) (This)->lpVtbl->get_fontWeight(This,p)
#define IHTMLStyle_put_fontSize(This,v) (This)->lpVtbl->put_fontSize(This,v)
#define IHTMLStyle_get_fontSize(This,p) (This)->lpVtbl->get_fontSize(This,p)
#define IHTMLStyle_put_font(This,v) (This)->lpVtbl->put_font(This,v)
#define IHTMLStyle_get_font(This,p) (This)->lpVtbl->get_font(This,p)
#define IHTMLStyle_put_color(This,v) (This)->lpVtbl->put_color(This,v)
#define IHTMLStyle_get_color(This,p) (This)->lpVtbl->get_color(This,p)
#define IHTMLStyle_put_background(This,v) (This)->lpVtbl->put_background(This,v)
#define IHTMLStyle_get_background(This,p) (This)->lpVtbl->get_background(This,p)
#define IHTMLStyle_put_backgroundColor(This,v) (This)->lpVtbl->put_backgroundColor(This,v)
#define IHTMLStyle_get_backgroundColor(This,p) (This)->lpVtbl->get_backgroundColor(This,p)
#define IHTMLStyle_put_backgroundImage(This,v) (This)->lpVtbl->put_backgroundImage(This,v)
#define IHTMLStyle_get_backgroundImage(This,p) (This)->lpVtbl->get_backgroundImage(This,p)
#define IHTMLStyle_put_backgroundRepeat(This,v) (This)->lpVtbl->put_backgroundRepeat(This,v)
#define IHTMLStyle_get_backgroundRepeat(This,p) (This)->lpVtbl->get_backgroundRepeat(This,p)
#define IHTMLStyle_put_backgroundAttachment(This,v) (This)->lpVtbl->put_backgroundAttachment(This,v)
#define IHTMLStyle_get_backgroundAttachment(This,p) (This)->lpVtbl->get_backgroundAttachment(This,p)
#define IHTMLStyle_put_backgroundPosition(This,v) (This)->lpVtbl->put_backgroundPosition(This,v)
#define IHTMLStyle_get_backgroundPosition(This,p) (This)->lpVtbl->get_backgroundPosition(This,p)
#define IHTMLStyle_put_backgroundPositionX(This,v) (This)->lpVtbl->put_backgroundPositionX(This,v)
#define IHTMLStyle_get_backgroundPositionX(This,p) (This)->lpVtbl->get_backgroundPositionX(This,p)
#define IHTMLStyle_put_backgroundPositionY(This,v) (This)->lpVtbl->put_backgroundPositionY(This,v)
#define IHTMLStyle_get_backgroundPositionY(This,p) (This)->lpVtbl->get_backgroundPositionY(This,p)
#define IHTMLStyle_put_wordSpacing(This,v) (This)->lpVtbl->put_wordSpacing(This,v)
#define IHTMLStyle_get_wordSpacing(This,p) (This)->lpVtbl->get_wordSpacing(This,p)
#define IHTMLStyle_put_letterSpacing(This,v) (This)->lpVtbl->put_letterSpacing(This,v)
#define IHTMLStyle_get_letterSpacing(This,p) (This)->lpVtbl->get_letterSpacing(This,p)
#define IHTMLStyle_put_textDecoration(This,v) (This)->lpVtbl->put_textDecoration(This,v)
#define IHTMLStyle_get_textDecoration(This,p) (This)->lpVtbl->get_textDecoration(This,p)
#define IHTMLStyle_put_textDecorationNone(This,v) (This)->lpVtbl->put_textDecorationNone(This,v)
#define IHTMLStyle_get_textDecorationNone(This,p) (This)->lpVtbl->get_textDecorationNone(This,p)
#define IHTMLStyle_put_textDecorationUnderline(This,v) (This)->lpVtbl->put_textDecorationUnderline(This,v)
#define IHTMLStyle_get_textDecorationUnderline(This,p) (This)->lpVtbl->get_textDecorationUnderline(This,p)
#define IHTMLStyle_put_textDecorationOverline(This,v) (This)->lpVtbl->put_textDecorationOverline(This,v)
#define IHTMLStyle_get_textDecorationOverline(This,p) (This)->lpVtbl->get_textDecorationOverline(This,p)
#define IHTMLStyle_put_textDecorationLineThrough(This,v) (This)->lpVtbl->put_textDecorationLineThrough(This,v)
#define IHTMLStyle_get_textDecorationLineThrough(This,p) (This)->lpVtbl->get_textDecorationLineThrough(This,p)
#define IHTMLStyle_put_textDecorationBlink(This,v) (This)->lpVtbl->put_textDecorationBlink(This,v)
#define IHTMLStyle_get_textDecorationBlink(This,p) (This)->lpVtbl->get_textDecorationBlink(This,p)
#define IHTMLStyle_put_verticalAlign(This,v) (This)->lpVtbl->put_verticalAlign(This,v)
#define IHTMLStyle_get_verticalAlign(This,p) (This)->lpVtbl->get_verticalAlign(This,p)
#define IHTMLStyle_put_textTransform(This,v) (This)->lpVtbl->put_textTransform(This,v)
#define IHTMLStyle_get_textTransform(This,p) (This)->lpVtbl->get_textTransform(This,p)
#define IHTMLStyle_put_textAlign(This,v) (This)->lpVtbl->put_textAlign(This,v)
#define IHTMLStyle_get_textAlign(This,p) (This)->lpVtbl->get_textAlign(This,p)
#define IHTMLStyle_put_textIndent(This,v) (This)->lpVtbl->put_textIndent(This,v)
#define IHTMLStyle_get_textIndent(This,p) (This)->lpVtbl->get_textIndent(This,p)
#define IHTMLStyle_put_lineHeight(This,v) (This)->lpVtbl->put_lineHeight(This,v)
#define IHTMLStyle_get_lineHeight(This,p) (This)->lpVtbl->get_lineHeight(This,p)
#define IHTMLStyle_put_marginTop(This,v) (This)->lpVtbl->put_marginTop(This,v)
#define IHTMLStyle_get_marginTop(This,p) (This)->lpVtbl->get_marginTop(This,p)
#define IHTMLStyle_put_marginRight(This,v) (This)->lpVtbl->put_marginRight(This,v)
#define IHTMLStyle_get_marginRight(This,p) (This)->lpVtbl->get_marginRight(This,p)
#define IHTMLStyle_put_marginBottom(This,v) (This)->lpVtbl->put_marginBottom(This,v)
#define IHTMLStyle_get_marginBottom(This,p) (This)->lpVtbl->get_marginBottom(This,p)
#define IHTMLStyle_put_marginLeft(This,v) (This)->lpVtbl->put_marginLeft(This,v)
#define IHTMLStyle_get_marginLeft(This,p) (This)->lpVtbl->get_marginLeft(This,p)
#define IHTMLStyle_put_margin(This,v) (This)->lpVtbl->put_margin(This,v)
#define IHTMLStyle_get_margin(This,p) (This)->lpVtbl->get_margin(This,p)
#define IHTMLStyle_put_paddingTop(This,v) (This)->lpVtbl->put_paddingTop(This,v)
#define IHTMLStyle_get_paddingTop(This,p) (This)->lpVtbl->get_paddingTop(This,p)
#define IHTMLStyle_put_paddingRight(This,v) (This)->lpVtbl->put_paddingRight(This,v)
#define IHTMLStyle_get_paddingRight(This,p) (This)->lpVtbl->get_paddingRight(This,p)
#define IHTMLStyle_put_paddingBottom(This,v) (This)->lpVtbl->put_paddingBottom(This,v)
#define IHTMLStyle_get_paddingBottom(This,p) (This)->lpVtbl->get_paddingBottom(This,p)
#define IHTMLStyle_put_paddingLeft(This,v) (This)->lpVtbl->put_paddingLeft(This,v)
#define IHTMLStyle_get_paddingLeft(This,p) (This)->lpVtbl->get_paddingLeft(This,p)
#define IHTMLStyle_put_padding(This,v) (This)->lpVtbl->put_padding(This,v)
#define IHTMLStyle_get_padding(This,p) (This)->lpVtbl->get_padding(This,p)
#define IHTMLStyle_put_border(This,v) (This)->lpVtbl->put_border(This,v)
#define IHTMLStyle_get_border(This,p) (This)->lpVtbl->get_border(This,p)
#define IHTMLStyle_put_borderTop(This,v) (This)->lpVtbl->put_borderTop(This,v)
#define IHTMLStyle_get_borderTop(This,p) (This)->lpVtbl->get_borderTop(This,p)
#define IHTMLStyle_put_borderRight(This,v) (This)->lpVtbl->put_borderRight(This,v)
#define IHTMLStyle_get_borderRight(This,p) (This)->lpVtbl->get_borderRight(This,p)
#define IHTMLStyle_put_borderBottom(This,v) (This)->lpVtbl->put_borderBottom(This,v)
#define IHTMLStyle_get_borderBottom(This,p) (This)->lpVtbl->get_borderBottom(This,p)
#define IHTMLStyle_put_borderLeft(This,v) (This)->lpVtbl->put_borderLeft(This,v)
#define IHTMLStyle_get_borderLeft(This,p) (This)->lpVtbl->get_borderLeft(This,p)
#define IHTMLStyle_put_borderColor(This,v) (This)->lpVtbl->put_borderColor(This,v)
#define IHTMLStyle_get_borderColor(This,p) (This)->lpVtbl->get_borderColor(This,p)
#define IHTMLStyle_put_borderTopColor(This,v) (This)->lpVtbl->put_borderTopColor(This,v)
#define IHTMLStyle_get_borderTopColor(This,p) (This)->lpVtbl->get_borderTopColor(This,p)
#define IHTMLStyle_put_borderRightColor(This,v) (This)->lpVtbl->put_borderRightColor(This,v)
#define IHTMLStyle_get_borderRightColor(This,p) (This)->lpVtbl->get_borderRightColor(This,p)
#define IHTMLStyle_put_borderBottomColor(This,v) (This)->lpVtbl->put_borderBottomColor(This,v)
#define IHTMLStyle_get_borderBottomColor(This,p) (This)->lpVtbl->get_borderBottomColor(This,p)
#define IHTMLStyle_put_borderLeftColor(This,v) (This)->lpVtbl->put_borderLeftColor(This,v)
#define IHTMLStyle_get_borderLeftColor(This,p) (This)->lpVtbl->get_borderLeftColor(This,p)
#define IHTMLStyle_put_borderWidth(This,v) (This)->lpVtbl->put_borderWidth(This,v)
#define IHTMLStyle_get_borderWidth(This,p) (This)->lpVtbl->get_borderWidth(This,p)
#define IHTMLStyle_put_borderTopWidth(This,v) (This)->lpVtbl->put_borderTopWidth(This,v)
#define IHTMLStyle_get_borderTopWidth(This,p) (This)->lpVtbl->get_borderTopWidth(This,p)
#define IHTMLStyle_put_borderRightWidth(This,v) (This)->lpVtbl->put_borderRightWidth(This,v)
#define IHTMLStyle_get_borderRightWidth(This,p) (This)->lpVtbl->get_borderRightWidth(This,p)
#define IHTMLStyle_put_borderBottomWidth(This,v) (This)->lpVtbl->put_borderBottomWidth(This,v)
#define IHTMLStyle_get_borderBottomWidth(This,p) (This)->lpVtbl->get_borderBottomWidth(This,p)
#define IHTMLStyle_put_borderLeftWidth(This,v) (This)->lpVtbl->put_borderLeftWidth(This,v)
#define IHTMLStyle_get_borderLeftWidth(This,p) (This)->lpVtbl->get_borderLeftWidth(This,p)
#define IHTMLStyle_put_borderStyle(This,v) (This)->lpVtbl->put_borderStyle(This,v)
#define IHTMLStyle_get_borderStyle(This,p) (This)->lpVtbl->get_borderStyle(This,p)
#define IHTMLStyle_put_borderTopStyle(This,v) (This)->lpVtbl->put_borderTopStyle(This,v)
#define IHTMLStyle_get_borderTopStyle(This,p) (This)->lpVtbl->get_borderTopStyle(This,p)
#define IHTMLStyle_put_borderRightStyle(This,v) (This)->lpVtbl->put_borderRightStyle(This,v)
#define IHTMLStyle_get_borderRightStyle(This,p) (This)->lpVtbl->get_borderRightStyle(This,p)
#define IHTMLStyle_put_borderBottomStyle(This,v) (This)->lpVtbl->put_borderBottomStyle(This,v)
#define IHTMLStyle_get_borderBottomStyle(This,p) (This)->lpVtbl->get_borderBottomStyle(This,p)
#define IHTMLStyle_put_borderLeftStyle(This,v) (This)->lpVtbl->put_borderLeftStyle(This,v)
#define IHTMLStyle_get_borderLeftStyle(This,p) (This)->lpVtbl->get_borderLeftStyle(This,p)
#define IHTMLStyle_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLStyle_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLStyle_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLStyle_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLStyle_put_styleFloat(This,v) (This)->lpVtbl->put_styleFloat(This,v)
#define IHTMLStyle_get_styleFloat(This,p) (This)->lpVtbl->get_styleFloat(This,p)
#define IHTMLStyle_put_clear(This,v) (This)->lpVtbl->put_clear(This,v)
#define IHTMLStyle_get_clear(This,p) (This)->lpVtbl->get_clear(This,p)
#define IHTMLStyle_put_display(This,v) (This)->lpVtbl->put_display(This,v)
#define IHTMLStyle_get_display(This,p) (This)->lpVtbl->get_display(This,p)
#define IHTMLStyle_put_visibility(This,v) (This)->lpVtbl->put_visibility(This,v)
#define IHTMLStyle_get_visibility(This,p) (This)->lpVtbl->get_visibility(This,p)
#define IHTMLStyle_put_listStyleType(This,v) (This)->lpVtbl->put_listStyleType(This,v)
#define IHTMLStyle_get_listStyleType(This,p) (This)->lpVtbl->get_listStyleType(This,p)
#define IHTMLStyle_put_listStylePosition(This,v) (This)->lpVtbl->put_listStylePosition(This,v)
#define IHTMLStyle_get_listStylePosition(This,p) (This)->lpVtbl->get_listStylePosition(This,p)
#define IHTMLStyle_put_listStyleImage(This,v) (This)->lpVtbl->put_listStyleImage(This,v)
#define IHTMLStyle_get_listStyleImage(This,p) (This)->lpVtbl->get_listStyleImage(This,p)
#define IHTMLStyle_put_listStyle(This,v) (This)->lpVtbl->put_listStyle(This,v)
#define IHTMLStyle_get_listStyle(This,p) (This)->lpVtbl->get_listStyle(This,p)
#define IHTMLStyle_put_whiteSpace(This,v) (This)->lpVtbl->put_whiteSpace(This,v)
#define IHTMLStyle_get_whiteSpace(This,p) (This)->lpVtbl->get_whiteSpace(This,p)
#define IHTMLStyle_put_top(This,v) (This)->lpVtbl->put_top(This,v)
#define IHTMLStyle_get_top(This,p) (This)->lpVtbl->get_top(This,p)
#define IHTMLStyle_put_left(This,v) (This)->lpVtbl->put_left(This,v)
#define IHTMLStyle_get_left(This,p) (This)->lpVtbl->get_left(This,p)
#define IHTMLStyle_get_position(This,p) (This)->lpVtbl->get_position(This,p)
#define IHTMLStyle_put_zIndex(This,v) (This)->lpVtbl->put_zIndex(This,v)
#define IHTMLStyle_get_zIndex(This,p) (This)->lpVtbl->get_zIndex(This,p)
#define IHTMLStyle_put_overflow(This,v) (This)->lpVtbl->put_overflow(This,v)
#define IHTMLStyle_get_overflow(This,p) (This)->lpVtbl->get_overflow(This,p)
#define IHTMLStyle_put_pageBreakBefore(This,v) (This)->lpVtbl->put_pageBreakBefore(This,v)
#define IHTMLStyle_get_pageBreakBefore(This,p) (This)->lpVtbl->get_pageBreakBefore(This,p)
#define IHTMLStyle_put_pageBreakAfter(This,v) (This)->lpVtbl->put_pageBreakAfter(This,v)
#define IHTMLStyle_get_pageBreakAfter(This,p) (This)->lpVtbl->get_pageBreakAfter(This,p)
#define IHTMLStyle_put_cssText(This,v) (This)->lpVtbl->put_cssText(This,v)
#define IHTMLStyle_get_cssText(This,p) (This)->lpVtbl->get_cssText(This,p)
#define IHTMLStyle_put_pixelTop(This,v) (This)->lpVtbl->put_pixelTop(This,v)
#define IHTMLStyle_get_pixelTop(This,p) (This)->lpVtbl->get_pixelTop(This,p)
#define IHTMLStyle_put_pixelLeft(This,v) (This)->lpVtbl->put_pixelLeft(This,v)
#define IHTMLStyle_get_pixelLeft(This,p) (This)->lpVtbl->get_pixelLeft(This,p)
#define IHTMLStyle_put_pixelWidth(This,v) (This)->lpVtbl->put_pixelWidth(This,v)
#define IHTMLStyle_get_pixelWidth(This,p) (This)->lpVtbl->get_pixelWidth(This,p)
#define IHTMLStyle_put_pixelHeight(This,v) (This)->lpVtbl->put_pixelHeight(This,v)
#define IHTMLStyle_get_pixelHeight(This,p) (This)->lpVtbl->get_pixelHeight(This,p)
#define IHTMLStyle_put_posTop(This,v) (This)->lpVtbl->put_posTop(This,v)
#define IHTMLStyle_get_posTop(This,p) (This)->lpVtbl->get_posTop(This,p)
#define IHTMLStyle_put_posLeft(This,v) (This)->lpVtbl->put_posLeft(This,v)
#define IHTMLStyle_get_posLeft(This,p) (This)->lpVtbl->get_posLeft(This,p)
#define IHTMLStyle_put_posWidth(This,v) (This)->lpVtbl->put_posWidth(This,v)
#define IHTMLStyle_get_posWidth(This,p) (This)->lpVtbl->get_posWidth(This,p)
#define IHTMLStyle_put_posHeight(This,v) (This)->lpVtbl->put_posHeight(This,v)
#define IHTMLStyle_get_posHeight(This,p) (This)->lpVtbl->get_posHeight(This,p)
#define IHTMLStyle_put_cursor(This,v) (This)->lpVtbl->put_cursor(This,v)
#define IHTMLStyle_get_cursor(This,p) (This)->lpVtbl->get_cursor(This,p)
#define IHTMLStyle_put_clip(This,v) (This)->lpVtbl->put_clip(This,v)
#define IHTMLStyle_get_clip(This,p) (This)->lpVtbl->get_clip(This,p)
#define IHTMLStyle_put_filter(This,v) (This)->lpVtbl->put_filter(This,v)
#define IHTMLStyle_get_filter(This,p) (This)->lpVtbl->get_filter(This,p)
#define IHTMLStyle_setAttribute(This,strAttributeName,AttributeValue,lFlags) (This)->lpVtbl->setAttribute(This,strAttributeName,AttributeValue,lFlags)
#define IHTMLStyle_getAttribute(This,strAttributeName,lFlags,AttributeValue) (This)->lpVtbl->getAttribute(This,strAttributeName,lFlags,AttributeValue)
#define IHTMLStyle_removeAttribute(This,strAttributeName,lFlags,pfSuccess) (This)->lpVtbl->removeAttribute(This,strAttributeName,lFlags,pfSuccess)
#define IHTMLStyle_toString(This,String) (This)->lpVtbl->toString(This,String)
#endif
#endif
  HRESULT WINAPI IHTMLStyle_put_fontFamily_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontFamily_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_fontStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_fontVariant_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontVariant_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_fontWeight_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontWeight_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_fontSize_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_fontSize_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_font_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_font_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_font_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_font_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_color_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_color_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_background_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_background_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundImage_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundImage_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundRepeat_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundRepeat_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundAttachment_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundAttachment_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundPosition_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_backgroundPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundPosition_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_backgroundPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundPositionX_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundPositionX_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_backgroundPositionY_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_backgroundPositionY_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_wordSpacing_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_wordSpacing_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_letterSpacing_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_letterSpacing_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecoration_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecoration_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationNone_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationNone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationNone_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationNone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationUnderline_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationUnderline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationUnderline_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationUnderline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationOverline_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationOverline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationOverline_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationOverline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationLineThrough_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationLineThrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationLineThrough_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationLineThrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textDecorationBlink_Proxy(IHTMLStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyle_put_textDecorationBlink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textDecorationBlink_Proxy(IHTMLStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyle_get_textDecorationBlink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_verticalAlign_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_verticalAlign_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textTransform_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textTransform_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textAlign_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textAlign_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_textIndent_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_textIndent_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_lineHeight_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_lineHeight_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_marginTop_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_marginTop_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_marginRight_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_marginRight_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_marginBottom_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_marginBottom_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_marginLeft_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_marginLeft_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_margin_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_margin_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_paddingTop_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_paddingTop_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_paddingRight_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_paddingRight_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_paddingBottom_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_paddingBottom_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_paddingLeft_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_paddingLeft_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_padding_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_padding_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_border_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_border_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderTop_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderTop_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderRight_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderRight_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderBottom_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderBottom_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderLeft_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderLeft_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderColor_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderColor_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderTopColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderTopColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderRightColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderRightColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderBottomColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderBottomColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderLeftColor_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderLeftColor_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderWidth_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderWidth_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderTopWidth_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderTopWidth_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderRightWidth_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderRightWidth_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderBottomWidth_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderBottomWidth_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderLeftWidth_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderLeftWidth_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderTopStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderTopStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderRightStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderRightStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderBottomStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderBottomStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_borderLeftStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_borderLeftStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_width_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_width_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_height_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_height_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_styleFloat_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_styleFloat_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_clear_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_clear_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_display_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_display_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_visibility_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_visibility_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_listStyleType_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_listStyleType_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_listStylePosition_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_listStylePosition_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_listStyleImage_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_listStyleImage_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_listStyle_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_listStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_listStyle_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_listStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_whiteSpace_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_whiteSpace_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_top_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_top_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_left_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_left_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_position_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_zIndex_Proxy(IHTMLStyle *This,VARIANT v);
  void __RPC_STUB IHTMLStyle_put_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_zIndex_Proxy(IHTMLStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle_get_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_overflow_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_overflow_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pageBreakBefore_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pageBreakBefore_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pageBreakAfter_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pageBreakAfter_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_cssText_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_cssText_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pixelTop_Proxy(IHTMLStyle *This,long v);
  void __RPC_STUB IHTMLStyle_put_pixelTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pixelTop_Proxy(IHTMLStyle *This,long *p);
  void __RPC_STUB IHTMLStyle_get_pixelTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pixelLeft_Proxy(IHTMLStyle *This,long v);
  void __RPC_STUB IHTMLStyle_put_pixelLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pixelLeft_Proxy(IHTMLStyle *This,long *p);
  void __RPC_STUB IHTMLStyle_get_pixelLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pixelWidth_Proxy(IHTMLStyle *This,long v);
  void __RPC_STUB IHTMLStyle_put_pixelWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pixelWidth_Proxy(IHTMLStyle *This,long *p);
  void __RPC_STUB IHTMLStyle_get_pixelWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_pixelHeight_Proxy(IHTMLStyle *This,long v);
  void __RPC_STUB IHTMLStyle_put_pixelHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_pixelHeight_Proxy(IHTMLStyle *This,long *p);
  void __RPC_STUB IHTMLStyle_get_pixelHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_posTop_Proxy(IHTMLStyle *This,float v);
  void __RPC_STUB IHTMLStyle_put_posTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_posTop_Proxy(IHTMLStyle *This,float *p);
  void __RPC_STUB IHTMLStyle_get_posTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_posLeft_Proxy(IHTMLStyle *This,float v);
  void __RPC_STUB IHTMLStyle_put_posLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_posLeft_Proxy(IHTMLStyle *This,float *p);
  void __RPC_STUB IHTMLStyle_get_posLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_posWidth_Proxy(IHTMLStyle *This,float v);
  void __RPC_STUB IHTMLStyle_put_posWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_posWidth_Proxy(IHTMLStyle *This,float *p);
  void __RPC_STUB IHTMLStyle_get_posWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_posHeight_Proxy(IHTMLStyle *This,float v);
  void __RPC_STUB IHTMLStyle_put_posHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_posHeight_Proxy(IHTMLStyle *This,float *p);
  void __RPC_STUB IHTMLStyle_get_posHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_cursor_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_cursor_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_clip_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_clip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_clip_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_clip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_put_filter_Proxy(IHTMLStyle *This,BSTR v);
  void __RPC_STUB IHTMLStyle_put_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_get_filter_Proxy(IHTMLStyle *This,BSTR *p);
  void __RPC_STUB IHTMLStyle_get_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_setAttribute_Proxy(IHTMLStyle *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
  void __RPC_STUB IHTMLStyle_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_getAttribute_Proxy(IHTMLStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLStyle_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_removeAttribute_Proxy(IHTMLStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLStyle_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle_toString_Proxy(IHTMLStyle *This,BSTR *String);
  void __RPC_STUB IHTMLStyle_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyle2_INTERFACE_DEFINED__
#define __IHTMLStyle2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyle2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLStyle2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_tableLayout(BSTR v) = 0;
    virtual HRESULT WINAPI get_tableLayout(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderCollapse(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderCollapse(BSTR *p) = 0;
    virtual HRESULT WINAPI put_direction(BSTR v) = 0;
    virtual HRESULT WINAPI get_direction(BSTR *p) = 0;
    virtual HRESULT WINAPI put_behavior(BSTR v) = 0;
    virtual HRESULT WINAPI get_behavior(BSTR *p) = 0;
    virtual HRESULT WINAPI setExpression(BSTR propname,BSTR expression,BSTR language = L"") = 0;
    virtual HRESULT WINAPI getExpression(BSTR propname,VARIANT *expression) = 0;
    virtual HRESULT WINAPI removeExpression(BSTR propname,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI put_position(BSTR v) = 0;
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI put_unicodeBidi(BSTR v) = 0;
    virtual HRESULT WINAPI get_unicodeBidi(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_right(VARIANT v) = 0;
    virtual HRESULT WINAPI get_right(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_pixelBottom(long v) = 0;
    virtual HRESULT WINAPI get_pixelBottom(long *p) = 0;
    virtual HRESULT WINAPI put_pixelRight(long v) = 0;
    virtual HRESULT WINAPI get_pixelRight(long *p) = 0;
    virtual HRESULT WINAPI put_posBottom(float v) = 0;
    virtual HRESULT WINAPI get_posBottom(float *p) = 0;
    virtual HRESULT WINAPI put_posRight(float v) = 0;
    virtual HRESULT WINAPI get_posRight(float *p) = 0;
    virtual HRESULT WINAPI put_imeMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_imeMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyPosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyOverhang(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyOverhang(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGridChar(VARIANT v) = 0;
    virtual HRESULT WINAPI get_layoutGridChar(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_layoutGridLine(VARIANT v) = 0;
    virtual HRESULT WINAPI get_layoutGridLine(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_layoutGridMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGridMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGridType(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGridType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGrid(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGrid(BSTR *p) = 0;
    virtual HRESULT WINAPI put_wordBreak(BSTR v) = 0;
    virtual HRESULT WINAPI get_wordBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lineBreak(BSTR v) = 0;
    virtual HRESULT WINAPI get_lineBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textJustify(BSTR v) = 0;
    virtual HRESULT WINAPI get_textJustify(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textJustifyTrim(BSTR v) = 0;
    virtual HRESULT WINAPI get_textJustifyTrim(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textKashida(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textKashida(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textAutospace(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAutospace(BSTR *p) = 0;
    virtual HRESULT WINAPI put_overflowX(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflowX(BSTR *p) = 0;
    virtual HRESULT WINAPI put_overflowY(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflowY(BSTR *p) = 0;
    virtual HRESULT WINAPI put_accelerator(BSTR v) = 0;
    virtual HRESULT WINAPI get_accelerator(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLStyle2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyle2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyle2 *This);
      ULONG (WINAPI *Release)(IHTMLStyle2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyle2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyle2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyle2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyle2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_tableLayout)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_tableLayout)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_borderCollapse)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_borderCollapse)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_direction)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_direction)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_behavior)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_behavior)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *setExpression)(IHTMLStyle2 *This,BSTR propname,BSTR expression,BSTR language);
      HRESULT (WINAPI *getExpression)(IHTMLStyle2 *This,BSTR propname,VARIANT *expression);
      HRESULT (WINAPI *removeExpression)(IHTMLStyle2 *This,BSTR propname,VARIANT_BOOL *pfSuccess);
      HRESULT (WINAPI *put_position)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_position)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_unicodeBidi)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_unicodeBidi)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_bottom)(IHTMLStyle2 *This,VARIANT v);
      HRESULT (WINAPI *get_bottom)(IHTMLStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *put_right)(IHTMLStyle2 *This,VARIANT v);
      HRESULT (WINAPI *get_right)(IHTMLStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *put_pixelBottom)(IHTMLStyle2 *This,long v);
      HRESULT (WINAPI *get_pixelBottom)(IHTMLStyle2 *This,long *p);
      HRESULT (WINAPI *put_pixelRight)(IHTMLStyle2 *This,long v);
      HRESULT (WINAPI *get_pixelRight)(IHTMLStyle2 *This,long *p);
      HRESULT (WINAPI *put_posBottom)(IHTMLStyle2 *This,float v);
      HRESULT (WINAPI *get_posBottom)(IHTMLStyle2 *This,float *p);
      HRESULT (WINAPI *put_posRight)(IHTMLStyle2 *This,float v);
      HRESULT (WINAPI *get_posRight)(IHTMLStyle2 *This,float *p);
      HRESULT (WINAPI *put_imeMode)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_imeMode)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_rubyAlign)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_rubyAlign)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_rubyPosition)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_rubyPosition)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_rubyOverhang)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_rubyOverhang)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_layoutGridChar)(IHTMLStyle2 *This,VARIANT v);
      HRESULT (WINAPI *get_layoutGridChar)(IHTMLStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *put_layoutGridLine)(IHTMLStyle2 *This,VARIANT v);
      HRESULT (WINAPI *get_layoutGridLine)(IHTMLStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *put_layoutGridMode)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_layoutGridMode)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_layoutGridType)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_layoutGridType)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_layoutGrid)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_layoutGrid)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_wordBreak)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_wordBreak)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_lineBreak)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_lineBreak)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_textJustify)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_textJustify)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_textJustifyTrim)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_textJustifyTrim)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_textKashida)(IHTMLStyle2 *This,VARIANT v);
      HRESULT (WINAPI *get_textKashida)(IHTMLStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *put_textAutospace)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_textAutospace)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_overflowX)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_overflowX)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_overflowY)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_overflowY)(IHTMLStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_accelerator)(IHTMLStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_accelerator)(IHTMLStyle2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLStyle2Vtbl;
  interface IHTMLStyle2 {
    CONST_VTBL struct IHTMLStyle2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyle2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyle2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyle2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyle2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyle2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyle2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyle2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyle2_put_tableLayout(This,v) (This)->lpVtbl->put_tableLayout(This,v)
#define IHTMLStyle2_get_tableLayout(This,p) (This)->lpVtbl->get_tableLayout(This,p)
#define IHTMLStyle2_put_borderCollapse(This,v) (This)->lpVtbl->put_borderCollapse(This,v)
#define IHTMLStyle2_get_borderCollapse(This,p) (This)->lpVtbl->get_borderCollapse(This,p)
#define IHTMLStyle2_put_direction(This,v) (This)->lpVtbl->put_direction(This,v)
#define IHTMLStyle2_get_direction(This,p) (This)->lpVtbl->get_direction(This,p)
#define IHTMLStyle2_put_behavior(This,v) (This)->lpVtbl->put_behavior(This,v)
#define IHTMLStyle2_get_behavior(This,p) (This)->lpVtbl->get_behavior(This,p)
#define IHTMLStyle2_setExpression(This,propname,expression,language) (This)->lpVtbl->setExpression(This,propname,expression,language)
#define IHTMLStyle2_getExpression(This,propname,expression) (This)->lpVtbl->getExpression(This,propname,expression)
#define IHTMLStyle2_removeExpression(This,propname,pfSuccess) (This)->lpVtbl->removeExpression(This,propname,pfSuccess)
#define IHTMLStyle2_put_position(This,v) (This)->lpVtbl->put_position(This,v)
#define IHTMLStyle2_get_position(This,p) (This)->lpVtbl->get_position(This,p)
#define IHTMLStyle2_put_unicodeBidi(This,v) (This)->lpVtbl->put_unicodeBidi(This,v)
#define IHTMLStyle2_get_unicodeBidi(This,p) (This)->lpVtbl->get_unicodeBidi(This,p)
#define IHTMLStyle2_put_bottom(This,v) (This)->lpVtbl->put_bottom(This,v)
#define IHTMLStyle2_get_bottom(This,p) (This)->lpVtbl->get_bottom(This,p)
#define IHTMLStyle2_put_right(This,v) (This)->lpVtbl->put_right(This,v)
#define IHTMLStyle2_get_right(This,p) (This)->lpVtbl->get_right(This,p)
#define IHTMLStyle2_put_pixelBottom(This,v) (This)->lpVtbl->put_pixelBottom(This,v)
#define IHTMLStyle2_get_pixelBottom(This,p) (This)->lpVtbl->get_pixelBottom(This,p)
#define IHTMLStyle2_put_pixelRight(This,v) (This)->lpVtbl->put_pixelRight(This,v)
#define IHTMLStyle2_get_pixelRight(This,p) (This)->lpVtbl->get_pixelRight(This,p)
#define IHTMLStyle2_put_posBottom(This,v) (This)->lpVtbl->put_posBottom(This,v)
#define IHTMLStyle2_get_posBottom(This,p) (This)->lpVtbl->get_posBottom(This,p)
#define IHTMLStyle2_put_posRight(This,v) (This)->lpVtbl->put_posRight(This,v)
#define IHTMLStyle2_get_posRight(This,p) (This)->lpVtbl->get_posRight(This,p)
#define IHTMLStyle2_put_imeMode(This,v) (This)->lpVtbl->put_imeMode(This,v)
#define IHTMLStyle2_get_imeMode(This,p) (This)->lpVtbl->get_imeMode(This,p)
#define IHTMLStyle2_put_rubyAlign(This,v) (This)->lpVtbl->put_rubyAlign(This,v)
#define IHTMLStyle2_get_rubyAlign(This,p) (This)->lpVtbl->get_rubyAlign(This,p)
#define IHTMLStyle2_put_rubyPosition(This,v) (This)->lpVtbl->put_rubyPosition(This,v)
#define IHTMLStyle2_get_rubyPosition(This,p) (This)->lpVtbl->get_rubyPosition(This,p)
#define IHTMLStyle2_put_rubyOverhang(This,v) (This)->lpVtbl->put_rubyOverhang(This,v)
#define IHTMLStyle2_get_rubyOverhang(This,p) (This)->lpVtbl->get_rubyOverhang(This,p)
#define IHTMLStyle2_put_layoutGridChar(This,v) (This)->lpVtbl->put_layoutGridChar(This,v)
#define IHTMLStyle2_get_layoutGridChar(This,p) (This)->lpVtbl->get_layoutGridChar(This,p)
#define IHTMLStyle2_put_layoutGridLine(This,v) (This)->lpVtbl->put_layoutGridLine(This,v)
#define IHTMLStyle2_get_layoutGridLine(This,p) (This)->lpVtbl->get_layoutGridLine(This,p)
#define IHTMLStyle2_put_layoutGridMode(This,v) (This)->lpVtbl->put_layoutGridMode(This,v)
#define IHTMLStyle2_get_layoutGridMode(This,p) (This)->lpVtbl->get_layoutGridMode(This,p)
#define IHTMLStyle2_put_layoutGridType(This,v) (This)->lpVtbl->put_layoutGridType(This,v)
#define IHTMLStyle2_get_layoutGridType(This,p) (This)->lpVtbl->get_layoutGridType(This,p)
#define IHTMLStyle2_put_layoutGrid(This,v) (This)->lpVtbl->put_layoutGrid(This,v)
#define IHTMLStyle2_get_layoutGrid(This,p) (This)->lpVtbl->get_layoutGrid(This,p)
#define IHTMLStyle2_put_wordBreak(This,v) (This)->lpVtbl->put_wordBreak(This,v)
#define IHTMLStyle2_get_wordBreak(This,p) (This)->lpVtbl->get_wordBreak(This,p)
#define IHTMLStyle2_put_lineBreak(This,v) (This)->lpVtbl->put_lineBreak(This,v)
#define IHTMLStyle2_get_lineBreak(This,p) (This)->lpVtbl->get_lineBreak(This,p)
#define IHTMLStyle2_put_textJustify(This,v) (This)->lpVtbl->put_textJustify(This,v)
#define IHTMLStyle2_get_textJustify(This,p) (This)->lpVtbl->get_textJustify(This,p)
#define IHTMLStyle2_put_textJustifyTrim(This,v) (This)->lpVtbl->put_textJustifyTrim(This,v)
#define IHTMLStyle2_get_textJustifyTrim(This,p) (This)->lpVtbl->get_textJustifyTrim(This,p)
#define IHTMLStyle2_put_textKashida(This,v) (This)->lpVtbl->put_textKashida(This,v)
#define IHTMLStyle2_get_textKashida(This,p) (This)->lpVtbl->get_textKashida(This,p)
#define IHTMLStyle2_put_textAutospace(This,v) (This)->lpVtbl->put_textAutospace(This,v)
#define IHTMLStyle2_get_textAutospace(This,p) (This)->lpVtbl->get_textAutospace(This,p)
#define IHTMLStyle2_put_overflowX(This,v) (This)->lpVtbl->put_overflowX(This,v)
#define IHTMLStyle2_get_overflowX(This,p) (This)->lpVtbl->get_overflowX(This,p)
#define IHTMLStyle2_put_overflowY(This,v) (This)->lpVtbl->put_overflowY(This,v)
#define IHTMLStyle2_get_overflowY(This,p) (This)->lpVtbl->get_overflowY(This,p)
#define IHTMLStyle2_put_accelerator(This,v) (This)->lpVtbl->put_accelerator(This,v)
#define IHTMLStyle2_get_accelerator(This,p) (This)->lpVtbl->get_accelerator(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLStyle2_put_tableLayout_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_tableLayout_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_borderCollapse_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_borderCollapse_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_direction_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_direction_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_behavior_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_behavior_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_setExpression_Proxy(IHTMLStyle2 *This,BSTR propname,BSTR expression,BSTR language);
  void __RPC_STUB IHTMLStyle2_setExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_getExpression_Proxy(IHTMLStyle2 *This,BSTR propname,VARIANT *expression);
  void __RPC_STUB IHTMLStyle2_getExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_removeExpression_Proxy(IHTMLStyle2 *This,BSTR propname,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLStyle2_removeExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_position_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_position_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_unicodeBidi_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_unicodeBidi_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_bottom_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_bottom_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_right_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_right_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_pixelBottom_Proxy(IHTMLStyle2 *This,long v);
  void __RPC_STUB IHTMLStyle2_put_pixelBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_pixelBottom_Proxy(IHTMLStyle2 *This,long *p);
  void __RPC_STUB IHTMLStyle2_get_pixelBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_pixelRight_Proxy(IHTMLStyle2 *This,long v);
  void __RPC_STUB IHTMLStyle2_put_pixelRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_pixelRight_Proxy(IHTMLStyle2 *This,long *p);
  void __RPC_STUB IHTMLStyle2_get_pixelRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_posBottom_Proxy(IHTMLStyle2 *This,float v);
  void __RPC_STUB IHTMLStyle2_put_posBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_posBottom_Proxy(IHTMLStyle2 *This,float *p);
  void __RPC_STUB IHTMLStyle2_get_posBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_posRight_Proxy(IHTMLStyle2 *This,float v);
  void __RPC_STUB IHTMLStyle2_put_posRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_posRight_Proxy(IHTMLStyle2 *This,float *p);
  void __RPC_STUB IHTMLStyle2_get_posRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_imeMode_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_imeMode_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_rubyAlign_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_rubyAlign_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_rubyPosition_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_rubyPosition_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_rubyOverhang_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_rubyOverhang_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGridChar_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGridChar_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGridLine_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGridLine_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGridMode_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGridMode_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGridType_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGridType_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_layoutGrid_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_layoutGrid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_layoutGrid_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_layoutGrid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_wordBreak_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_wordBreak_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_lineBreak_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_lineBreak_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_textJustify_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_textJustify_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_textJustifyTrim_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_textJustifyTrim_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_textKashida_Proxy(IHTMLStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle2_put_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_textKashida_Proxy(IHTMLStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle2_get_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_textAutospace_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_textAutospace_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_overflowX_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_overflowX_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_overflowY_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_overflowY_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_put_accelerator_Proxy(IHTMLStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLStyle2_put_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle2_get_accelerator_Proxy(IHTMLStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle2_get_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyle3_INTERFACE_DEFINED__
#define __IHTMLStyle3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyle3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLStyle3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_layoutFlow(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutFlow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_zoom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_zoom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_wordWrap(BSTR v) = 0;
    virtual HRESULT WINAPI get_wordWrap(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textUnderlinePosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_textUnderlinePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scrollbarBaseColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarBaseColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarFaceColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarFaceColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbar3dLightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbar3dLightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarShadowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarHighlightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarHighlightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarDarkShadowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarDarkShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarArrowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarArrowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarTrackColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarTrackColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_writingMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_writingMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAlignLast(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAlignLast(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textKashidaSpace(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textKashidaSpace(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLStyle3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyle3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyle3 *This);
      ULONG (WINAPI *Release)(IHTMLStyle3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyle3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyle3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyle3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyle3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_layoutFlow)(IHTMLStyle3 *This,BSTR v);
      HRESULT (WINAPI *get_layoutFlow)(IHTMLStyle3 *This,BSTR *p);
      HRESULT (WINAPI *put_zoom)(IHTMLStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_zoom)(IHTMLStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_wordWrap)(IHTMLStyle3 *This,BSTR v);
      HRESULT (WINAPI *get_wordWrap)(IHTMLStyle3 *This,BSTR *p);
      HRESULT (WINAPI *put_textUnderlinePosition)(IHTMLStyle3 *This,BSTR v);
      HRESULT (WINAPI *get_textUnderlinePosition)(IHTMLStyle3 *This,BSTR *p);
      HRESULT (WINAPI *put_scrollbarBaseColor)(IHTMLStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarBaseColor)(IHTMLStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbarFaceColor)(IHTMLStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarFaceColor)(IHTMLStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbar3dLightColor)(IHTMLStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbar3dLightColor)(IHTMLStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbarShadowColor)(IHTMLStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarShadowColor)(IHTMLStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbarHighlightColor)(IHTMLStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarHighlightColor)(IHTMLStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbarDarkShadowColor)(IHTMLStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarDarkShadowColor)(IHTMLStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbarArrowColor)(IHTMLStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarArrowColor)(IHTMLStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbarTrackColor)(IHTMLStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarTrackColor)(IHTMLStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_writingMode)(IHTMLStyle3 *This,BSTR v);
      HRESULT (WINAPI *get_writingMode)(IHTMLStyle3 *This,BSTR *p);
      HRESULT (WINAPI *put_textAlignLast)(IHTMLStyle3 *This,BSTR v);
      HRESULT (WINAPI *get_textAlignLast)(IHTMLStyle3 *This,BSTR *p);
      HRESULT (WINAPI *put_textKashidaSpace)(IHTMLStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_textKashidaSpace)(IHTMLStyle3 *This,VARIANT *p);
    END_INTERFACE
  } IHTMLStyle3Vtbl;
  interface IHTMLStyle3 {
    CONST_VTBL struct IHTMLStyle3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyle3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyle3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyle3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyle3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyle3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyle3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyle3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyle3_put_layoutFlow(This,v) (This)->lpVtbl->put_layoutFlow(This,v)
#define IHTMLStyle3_get_layoutFlow(This,p) (This)->lpVtbl->get_layoutFlow(This,p)
#define IHTMLStyle3_put_zoom(This,v) (This)->lpVtbl->put_zoom(This,v)
#define IHTMLStyle3_get_zoom(This,p) (This)->lpVtbl->get_zoom(This,p)
#define IHTMLStyle3_put_wordWrap(This,v) (This)->lpVtbl->put_wordWrap(This,v)
#define IHTMLStyle3_get_wordWrap(This,p) (This)->lpVtbl->get_wordWrap(This,p)
#define IHTMLStyle3_put_textUnderlinePosition(This,v) (This)->lpVtbl->put_textUnderlinePosition(This,v)
#define IHTMLStyle3_get_textUnderlinePosition(This,p) (This)->lpVtbl->get_textUnderlinePosition(This,p)
#define IHTMLStyle3_put_scrollbarBaseColor(This,v) (This)->lpVtbl->put_scrollbarBaseColor(This,v)
#define IHTMLStyle3_get_scrollbarBaseColor(This,p) (This)->lpVtbl->get_scrollbarBaseColor(This,p)
#define IHTMLStyle3_put_scrollbarFaceColor(This,v) (This)->lpVtbl->put_scrollbarFaceColor(This,v)
#define IHTMLStyle3_get_scrollbarFaceColor(This,p) (This)->lpVtbl->get_scrollbarFaceColor(This,p)
#define IHTMLStyle3_put_scrollbar3dLightColor(This,v) (This)->lpVtbl->put_scrollbar3dLightColor(This,v)
#define IHTMLStyle3_get_scrollbar3dLightColor(This,p) (This)->lpVtbl->get_scrollbar3dLightColor(This,p)
#define IHTMLStyle3_put_scrollbarShadowColor(This,v) (This)->lpVtbl->put_scrollbarShadowColor(This,v)
#define IHTMLStyle3_get_scrollbarShadowColor(This,p) (This)->lpVtbl->get_scrollbarShadowColor(This,p)
#define IHTMLStyle3_put_scrollbarHighlightColor(This,v) (This)->lpVtbl->put_scrollbarHighlightColor(This,v)
#define IHTMLStyle3_get_scrollbarHighlightColor(This,p) (This)->lpVtbl->get_scrollbarHighlightColor(This,p)
#define IHTMLStyle3_put_scrollbarDarkShadowColor(This,v) (This)->lpVtbl->put_scrollbarDarkShadowColor(This,v)
#define IHTMLStyle3_get_scrollbarDarkShadowColor(This,p) (This)->lpVtbl->get_scrollbarDarkShadowColor(This,p)
#define IHTMLStyle3_put_scrollbarArrowColor(This,v) (This)->lpVtbl->put_scrollbarArrowColor(This,v)
#define IHTMLStyle3_get_scrollbarArrowColor(This,p) (This)->lpVtbl->get_scrollbarArrowColor(This,p)
#define IHTMLStyle3_put_scrollbarTrackColor(This,v) (This)->lpVtbl->put_scrollbarTrackColor(This,v)
#define IHTMLStyle3_get_scrollbarTrackColor(This,p) (This)->lpVtbl->get_scrollbarTrackColor(This,p)
#define IHTMLStyle3_put_writingMode(This,v) (This)->lpVtbl->put_writingMode(This,v)
#define IHTMLStyle3_get_writingMode(This,p) (This)->lpVtbl->get_writingMode(This,p)
#define IHTMLStyle3_put_textAlignLast(This,v) (This)->lpVtbl->put_textAlignLast(This,v)
#define IHTMLStyle3_get_textAlignLast(This,p) (This)->lpVtbl->get_textAlignLast(This,p)
#define IHTMLStyle3_put_textKashidaSpace(This,v) (This)->lpVtbl->put_textKashidaSpace(This,v)
#define IHTMLStyle3_get_textKashidaSpace(This,p) (This)->lpVtbl->get_textKashidaSpace(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLStyle3_put_layoutFlow_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_layoutFlow_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_zoom_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_zoom_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_wordWrap_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_wordWrap_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_textUnderlinePosition_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_textUnderlinePosition_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarBaseColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarBaseColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarFaceColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarFaceColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbar3dLightColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbar3dLightColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarShadowColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarShadowColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarHighlightColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarHighlightColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarDarkShadowColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarDarkShadowColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarArrowColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarArrowColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_scrollbarTrackColor_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_scrollbarTrackColor_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_writingMode_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_writingMode_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_textAlignLast_Proxy(IHTMLStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLStyle3_put_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_textAlignLast_Proxy(IHTMLStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle3_get_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_put_textKashidaSpace_Proxy(IHTMLStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle3_put_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle3_get_textKashidaSpace_Proxy(IHTMLStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle3_get_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyle4_INTERFACE_DEFINED__
#define __IHTMLStyle4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyle4;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLStyle4 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_textOverflow(BSTR v) = 0;
    virtual HRESULT WINAPI get_textOverflow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_minHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_minHeight(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLStyle4Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyle4 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyle4 *This);
      ULONG (WINAPI *Release)(IHTMLStyle4 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyle4 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyle4 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyle4 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyle4 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_textOverflow)(IHTMLStyle4 *This,BSTR v);
      HRESULT (WINAPI *get_textOverflow)(IHTMLStyle4 *This,BSTR *p);
      HRESULT (WINAPI *put_minHeight)(IHTMLStyle4 *This,VARIANT v);
      HRESULT (WINAPI *get_minHeight)(IHTMLStyle4 *This,VARIANT *p);
    END_INTERFACE
  } IHTMLStyle4Vtbl;
  interface IHTMLStyle4 {
    CONST_VTBL struct IHTMLStyle4Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyle4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyle4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyle4_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyle4_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyle4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyle4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyle4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyle4_put_textOverflow(This,v) (This)->lpVtbl->put_textOverflow(This,v)
#define IHTMLStyle4_get_textOverflow(This,p) (This)->lpVtbl->get_textOverflow(This,p)
#define IHTMLStyle4_put_minHeight(This,v) (This)->lpVtbl->put_minHeight(This,v)
#define IHTMLStyle4_get_minHeight(This,p) (This)->lpVtbl->get_minHeight(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLStyle4_put_textOverflow_Proxy(IHTMLStyle4 *This,BSTR v);
  void __RPC_STUB IHTMLStyle4_put_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle4_get_textOverflow_Proxy(IHTMLStyle4 *This,BSTR *p);
  void __RPC_STUB IHTMLStyle4_get_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle4_put_minHeight_Proxy(IHTMLStyle4 *This,VARIANT v);
  void __RPC_STUB IHTMLStyle4_put_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyle4_get_minHeight_Proxy(IHTMLStyle4 *This,VARIANT *p);
  void __RPC_STUB IHTMLStyle4_get_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRuleStyle_INTERFACE_DEFINED__
#define __IHTMLRuleStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRuleStyle;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLRuleStyle : public IDispatch {
  public:
    virtual HRESULT WINAPI put_fontFamily(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontFamily(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontVariant(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontVariant(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontWeight(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontWeight(BSTR *p) = 0;
    virtual HRESULT WINAPI put_fontSize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_fontSize(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_font(BSTR v) = 0;
    virtual HRESULT WINAPI get_font(BSTR *p) = 0;
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_backgroundImage(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundImage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundRepeat(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundRepeat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundAttachment(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundAttachment(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundPosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_backgroundPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_backgroundPositionX(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundPositionX(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_backgroundPositionY(VARIANT v) = 0;
    virtual HRESULT WINAPI get_backgroundPositionY(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_wordSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_wordSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_letterSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_letterSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textDecoration(BSTR v) = 0;
    virtual HRESULT WINAPI get_textDecoration(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textDecorationNone(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationNone(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationUnderline(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationUnderline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationOverline(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationOverline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationLineThrough(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationLineThrough(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_textDecorationBlink(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_textDecorationBlink(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_verticalAlign(VARIANT v) = 0;
    virtual HRESULT WINAPI get_verticalAlign(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textTransform(BSTR v) = 0;
    virtual HRESULT WINAPI get_textTransform(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textIndent(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textIndent(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_lineHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_lineHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginRight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginBottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_margin(BSTR v) = 0;
    virtual HRESULT WINAPI get_margin(BSTR *p) = 0;
    virtual HRESULT WINAPI put_paddingTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingRight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingBottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_paddingLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_paddingLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_padding(BSTR v) = 0;
    virtual HRESULT WINAPI get_padding(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(BSTR v) = 0;
    virtual HRESULT WINAPI get_border(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTop(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderTop(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderRight(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderRight(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderBottom(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderBottom(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderLeft(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderLeft(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderColor(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderColor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderTopColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderRightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderRightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderBottomColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderBottomColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderLeftColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderLeftColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderWidth(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderWidth(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderTopWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderRightWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderRightWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderBottomWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderBottomWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderLeftWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderLeftWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderTopStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderTopStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderRightStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderRightStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderBottomStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderBottomStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderLeftStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderLeftStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_styleFloat(BSTR v) = 0;
    virtual HRESULT WINAPI get_styleFloat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_clear(BSTR v) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
    virtual HRESULT WINAPI put_display(BSTR v) = 0;
    virtual HRESULT WINAPI get_display(BSTR *p) = 0;
    virtual HRESULT WINAPI put_visibility(BSTR v) = 0;
    virtual HRESULT WINAPI get_visibility(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyleType(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyleType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStylePosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStylePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyleImage(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyleImage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_listStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_listStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_whiteSpace(BSTR v) = 0;
    virtual HRESULT WINAPI get_whiteSpace(BSTR *p) = 0;
    virtual HRESULT WINAPI put_top(VARIANT v) = 0;
    virtual HRESULT WINAPI get_top(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_left(VARIANT v) = 0;
    virtual HRESULT WINAPI get_left(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI put_zIndex(VARIANT v) = 0;
    virtual HRESULT WINAPI get_zIndex(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_overflow(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pageBreakBefore(BSTR v) = 0;
    virtual HRESULT WINAPI get_pageBreakBefore(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pageBreakAfter(BSTR v) = 0;
    virtual HRESULT WINAPI get_pageBreakAfter(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cssText(BSTR v) = 0;
    virtual HRESULT WINAPI get_cssText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cursor(BSTR v) = 0;
    virtual HRESULT WINAPI get_cursor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_clip(BSTR v) = 0;
    virtual HRESULT WINAPI get_clip(BSTR *p) = 0;
    virtual HRESULT WINAPI put_filter(BSTR v) = 0;
    virtual HRESULT WINAPI get_filter(BSTR *p) = 0;
    virtual HRESULT WINAPI setAttribute(BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags = 1) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI removeAttribute(BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess) = 0;
  };
#else
  typedef struct IHTMLRuleStyleVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLRuleStyle *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLRuleStyle *This);
      ULONG (WINAPI *Release)(IHTMLRuleStyle *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLRuleStyle *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLRuleStyle *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLRuleStyle *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLRuleStyle *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_fontFamily)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_fontFamily)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_fontStyle)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_fontStyle)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_fontVariant)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_fontVariant)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_fontWeight)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_fontWeight)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_fontSize)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_fontSize)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_font)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_font)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_color)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_color)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_background)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_background)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_backgroundColor)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_backgroundColor)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_backgroundImage)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_backgroundImage)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_backgroundRepeat)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_backgroundRepeat)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_backgroundAttachment)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_backgroundAttachment)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_backgroundPosition)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_backgroundPosition)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_backgroundPositionX)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_backgroundPositionX)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_backgroundPositionY)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_backgroundPositionY)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_wordSpacing)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_wordSpacing)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_letterSpacing)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_letterSpacing)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_textDecoration)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_textDecoration)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_textDecorationNone)(IHTMLRuleStyle *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_textDecorationNone)(IHTMLRuleStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_textDecorationUnderline)(IHTMLRuleStyle *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_textDecorationUnderline)(IHTMLRuleStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_textDecorationOverline)(IHTMLRuleStyle *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_textDecorationOverline)(IHTMLRuleStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_textDecorationLineThrough)(IHTMLRuleStyle *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_textDecorationLineThrough)(IHTMLRuleStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_textDecorationBlink)(IHTMLRuleStyle *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_textDecorationBlink)(IHTMLRuleStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_verticalAlign)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_verticalAlign)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_textTransform)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_textTransform)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_textAlign)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_textAlign)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_textIndent)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_textIndent)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_lineHeight)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_lineHeight)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_marginTop)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_marginTop)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_marginRight)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_marginRight)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_marginBottom)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_marginBottom)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_marginLeft)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_marginLeft)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_margin)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_margin)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_paddingTop)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_paddingTop)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_paddingRight)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_paddingRight)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_paddingBottom)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_paddingBottom)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_paddingLeft)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_paddingLeft)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_padding)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_padding)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_border)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_border)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderTop)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderTop)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderRight)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderRight)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderBottom)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderBottom)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderLeft)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderLeft)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderColor)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderColor)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderTopColor)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderTopColor)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderRightColor)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderRightColor)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderBottomColor)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderBottomColor)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderLeftColor)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderLeftColor)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderWidth)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderWidth)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderTopWidth)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderTopWidth)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderRightWidth)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderRightWidth)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderBottomWidth)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderBottomWidth)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderLeftWidth)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_borderLeftWidth)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_borderStyle)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderStyle)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderTopStyle)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderTopStyle)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderRightStyle)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderRightStyle)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderBottomStyle)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderBottomStyle)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_borderLeftStyle)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_borderLeftStyle)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_width)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_width)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_height)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_height)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_styleFloat)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_styleFloat)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_clear)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_clear)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_display)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_display)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_visibility)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_visibility)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_listStyleType)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_listStyleType)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_listStylePosition)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_listStylePosition)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_listStyleImage)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_listStyleImage)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_listStyle)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_listStyle)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_whiteSpace)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_whiteSpace)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_top)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_top)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_left)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_left)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_position)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_zIndex)(IHTMLRuleStyle *This,VARIANT v);
      HRESULT (WINAPI *get_zIndex)(IHTMLRuleStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_overflow)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_overflow)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_pageBreakBefore)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_pageBreakBefore)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_pageBreakAfter)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_pageBreakAfter)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_cssText)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_cssText)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_cursor)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_cursor)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_clip)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_clip)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *put_filter)(IHTMLRuleStyle *This,BSTR v);
      HRESULT (WINAPI *get_filter)(IHTMLRuleStyle *This,BSTR *p);
      HRESULT (WINAPI *setAttribute)(IHTMLRuleStyle *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
      HRESULT (WINAPI *getAttribute)(IHTMLRuleStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
      HRESULT (WINAPI *removeAttribute)(IHTMLRuleStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
    END_INTERFACE
  } IHTMLRuleStyleVtbl;
  interface IHTMLRuleStyle {
    CONST_VTBL struct IHTMLRuleStyleVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLRuleStyle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLRuleStyle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLRuleStyle_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLRuleStyle_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLRuleStyle_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLRuleStyle_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLRuleStyle_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLRuleStyle_put_fontFamily(This,v) (This)->lpVtbl->put_fontFamily(This,v)
#define IHTMLRuleStyle_get_fontFamily(This,p) (This)->lpVtbl->get_fontFamily(This,p)
#define IHTMLRuleStyle_put_fontStyle(This,v) (This)->lpVtbl->put_fontStyle(This,v)
#define IHTMLRuleStyle_get_fontStyle(This,p) (This)->lpVtbl->get_fontStyle(This,p)
#define IHTMLRuleStyle_put_fontVariant(This,v) (This)->lpVtbl->put_fontVariant(This,v)
#define IHTMLRuleStyle_get_fontVariant(This,p) (This)->lpVtbl->get_fontVariant(This,p)
#define IHTMLRuleStyle_put_fontWeight(This,v) (This)->lpVtbl->put_fontWeight(This,v)
#define IHTMLRuleStyle_get_fontWeight(This,p) (This)->lpVtbl->get_fontWeight(This,p)
#define IHTMLRuleStyle_put_fontSize(This,v) (This)->lpVtbl->put_fontSize(This,v)
#define IHTMLRuleStyle_get_fontSize(This,p) (This)->lpVtbl->get_fontSize(This,p)
#define IHTMLRuleStyle_put_font(This,v) (This)->lpVtbl->put_font(This,v)
#define IHTMLRuleStyle_get_font(This,p) (This)->lpVtbl->get_font(This,p)
#define IHTMLRuleStyle_put_color(This,v) (This)->lpVtbl->put_color(This,v)
#define IHTMLRuleStyle_get_color(This,p) (This)->lpVtbl->get_color(This,p)
#define IHTMLRuleStyle_put_background(This,v) (This)->lpVtbl->put_background(This,v)
#define IHTMLRuleStyle_get_background(This,p) (This)->lpVtbl->get_background(This,p)
#define IHTMLRuleStyle_put_backgroundColor(This,v) (This)->lpVtbl->put_backgroundColor(This,v)
#define IHTMLRuleStyle_get_backgroundColor(This,p) (This)->lpVtbl->get_backgroundColor(This,p)
#define IHTMLRuleStyle_put_backgroundImage(This,v) (This)->lpVtbl->put_backgroundImage(This,v)
#define IHTMLRuleStyle_get_backgroundImage(This,p) (This)->lpVtbl->get_backgroundImage(This,p)
#define IHTMLRuleStyle_put_backgroundRepeat(This,v) (This)->lpVtbl->put_backgroundRepeat(This,v)
#define IHTMLRuleStyle_get_backgroundRepeat(This,p) (This)->lpVtbl->get_backgroundRepeat(This,p)
#define IHTMLRuleStyle_put_backgroundAttachment(This,v) (This)->lpVtbl->put_backgroundAttachment(This,v)
#define IHTMLRuleStyle_get_backgroundAttachment(This,p) (This)->lpVtbl->get_backgroundAttachment(This,p)
#define IHTMLRuleStyle_put_backgroundPosition(This,v) (This)->lpVtbl->put_backgroundPosition(This,v)
#define IHTMLRuleStyle_get_backgroundPosition(This,p) (This)->lpVtbl->get_backgroundPosition(This,p)
#define IHTMLRuleStyle_put_backgroundPositionX(This,v) (This)->lpVtbl->put_backgroundPositionX(This,v)
#define IHTMLRuleStyle_get_backgroundPositionX(This,p) (This)->lpVtbl->get_backgroundPositionX(This,p)
#define IHTMLRuleStyle_put_backgroundPositionY(This,v) (This)->lpVtbl->put_backgroundPositionY(This,v)
#define IHTMLRuleStyle_get_backgroundPositionY(This,p) (This)->lpVtbl->get_backgroundPositionY(This,p)
#define IHTMLRuleStyle_put_wordSpacing(This,v) (This)->lpVtbl->put_wordSpacing(This,v)
#define IHTMLRuleStyle_get_wordSpacing(This,p) (This)->lpVtbl->get_wordSpacing(This,p)
#define IHTMLRuleStyle_put_letterSpacing(This,v) (This)->lpVtbl->put_letterSpacing(This,v)
#define IHTMLRuleStyle_get_letterSpacing(This,p) (This)->lpVtbl->get_letterSpacing(This,p)
#define IHTMLRuleStyle_put_textDecoration(This,v) (This)->lpVtbl->put_textDecoration(This,v)
#define IHTMLRuleStyle_get_textDecoration(This,p) (This)->lpVtbl->get_textDecoration(This,p)
#define IHTMLRuleStyle_put_textDecorationNone(This,v) (This)->lpVtbl->put_textDecorationNone(This,v)
#define IHTMLRuleStyle_get_textDecorationNone(This,p) (This)->lpVtbl->get_textDecorationNone(This,p)
#define IHTMLRuleStyle_put_textDecorationUnderline(This,v) (This)->lpVtbl->put_textDecorationUnderline(This,v)
#define IHTMLRuleStyle_get_textDecorationUnderline(This,p) (This)->lpVtbl->get_textDecorationUnderline(This,p)
#define IHTMLRuleStyle_put_textDecorationOverline(This,v) (This)->lpVtbl->put_textDecorationOverline(This,v)
#define IHTMLRuleStyle_get_textDecorationOverline(This,p) (This)->lpVtbl->get_textDecorationOverline(This,p)
#define IHTMLRuleStyle_put_textDecorationLineThrough(This,v) (This)->lpVtbl->put_textDecorationLineThrough(This,v)
#define IHTMLRuleStyle_get_textDecorationLineThrough(This,p) (This)->lpVtbl->get_textDecorationLineThrough(This,p)
#define IHTMLRuleStyle_put_textDecorationBlink(This,v) (This)->lpVtbl->put_textDecorationBlink(This,v)
#define IHTMLRuleStyle_get_textDecorationBlink(This,p) (This)->lpVtbl->get_textDecorationBlink(This,p)
#define IHTMLRuleStyle_put_verticalAlign(This,v) (This)->lpVtbl->put_verticalAlign(This,v)
#define IHTMLRuleStyle_get_verticalAlign(This,p) (This)->lpVtbl->get_verticalAlign(This,p)
#define IHTMLRuleStyle_put_textTransform(This,v) (This)->lpVtbl->put_textTransform(This,v)
#define IHTMLRuleStyle_get_textTransform(This,p) (This)->lpVtbl->get_textTransform(This,p)
#define IHTMLRuleStyle_put_textAlign(This,v) (This)->lpVtbl->put_textAlign(This,v)
#define IHTMLRuleStyle_get_textAlign(This,p) (This)->lpVtbl->get_textAlign(This,p)
#define IHTMLRuleStyle_put_textIndent(This,v) (This)->lpVtbl->put_textIndent(This,v)
#define IHTMLRuleStyle_get_textIndent(This,p) (This)->lpVtbl->get_textIndent(This,p)
#define IHTMLRuleStyle_put_lineHeight(This,v) (This)->lpVtbl->put_lineHeight(This,v)
#define IHTMLRuleStyle_get_lineHeight(This,p) (This)->lpVtbl->get_lineHeight(This,p)
#define IHTMLRuleStyle_put_marginTop(This,v) (This)->lpVtbl->put_marginTop(This,v)
#define IHTMLRuleStyle_get_marginTop(This,p) (This)->lpVtbl->get_marginTop(This,p)
#define IHTMLRuleStyle_put_marginRight(This,v) (This)->lpVtbl->put_marginRight(This,v)
#define IHTMLRuleStyle_get_marginRight(This,p) (This)->lpVtbl->get_marginRight(This,p)
#define IHTMLRuleStyle_put_marginBottom(This,v) (This)->lpVtbl->put_marginBottom(This,v)
#define IHTMLRuleStyle_get_marginBottom(This,p) (This)->lpVtbl->get_marginBottom(This,p)
#define IHTMLRuleStyle_put_marginLeft(This,v) (This)->lpVtbl->put_marginLeft(This,v)
#define IHTMLRuleStyle_get_marginLeft(This,p) (This)->lpVtbl->get_marginLeft(This,p)
#define IHTMLRuleStyle_put_margin(This,v) (This)->lpVtbl->put_margin(This,v)
#define IHTMLRuleStyle_get_margin(This,p) (This)->lpVtbl->get_margin(This,p)
#define IHTMLRuleStyle_put_paddingTop(This,v) (This)->lpVtbl->put_paddingTop(This,v)
#define IHTMLRuleStyle_get_paddingTop(This,p) (This)->lpVtbl->get_paddingTop(This,p)
#define IHTMLRuleStyle_put_paddingRight(This,v) (This)->lpVtbl->put_paddingRight(This,v)
#define IHTMLRuleStyle_get_paddingRight(This,p) (This)->lpVtbl->get_paddingRight(This,p)
#define IHTMLRuleStyle_put_paddingBottom(This,v) (This)->lpVtbl->put_paddingBottom(This,v)
#define IHTMLRuleStyle_get_paddingBottom(This,p) (This)->lpVtbl->get_paddingBottom(This,p)
#define IHTMLRuleStyle_put_paddingLeft(This,v) (This)->lpVtbl->put_paddingLeft(This,v)
#define IHTMLRuleStyle_get_paddingLeft(This,p) (This)->lpVtbl->get_paddingLeft(This,p)
#define IHTMLRuleStyle_put_padding(This,v) (This)->lpVtbl->put_padding(This,v)
#define IHTMLRuleStyle_get_padding(This,p) (This)->lpVtbl->get_padding(This,p)
#define IHTMLRuleStyle_put_border(This,v) (This)->lpVtbl->put_border(This,v)
#define IHTMLRuleStyle_get_border(This,p) (This)->lpVtbl->get_border(This,p)
#define IHTMLRuleStyle_put_borderTop(This,v) (This)->lpVtbl->put_borderTop(This,v)
#define IHTMLRuleStyle_get_borderTop(This,p) (This)->lpVtbl->get_borderTop(This,p)
#define IHTMLRuleStyle_put_borderRight(This,v) (This)->lpVtbl->put_borderRight(This,v)
#define IHTMLRuleStyle_get_borderRight(This,p) (This)->lpVtbl->get_borderRight(This,p)
#define IHTMLRuleStyle_put_borderBottom(This,v) (This)->lpVtbl->put_borderBottom(This,v)
#define IHTMLRuleStyle_get_borderBottom(This,p) (This)->lpVtbl->get_borderBottom(This,p)
#define IHTMLRuleStyle_put_borderLeft(This,v) (This)->lpVtbl->put_borderLeft(This,v)
#define IHTMLRuleStyle_get_borderLeft(This,p) (This)->lpVtbl->get_borderLeft(This,p)
#define IHTMLRuleStyle_put_borderColor(This,v) (This)->lpVtbl->put_borderColor(This,v)
#define IHTMLRuleStyle_get_borderColor(This,p) (This)->lpVtbl->get_borderColor(This,p)
#define IHTMLRuleStyle_put_borderTopColor(This,v) (This)->lpVtbl->put_borderTopColor(This,v)
#define IHTMLRuleStyle_get_borderTopColor(This,p) (This)->lpVtbl->get_borderTopColor(This,p)
#define IHTMLRuleStyle_put_borderRightColor(This,v) (This)->lpVtbl->put_borderRightColor(This,v)
#define IHTMLRuleStyle_get_borderRightColor(This,p) (This)->lpVtbl->get_borderRightColor(This,p)
#define IHTMLRuleStyle_put_borderBottomColor(This,v) (This)->lpVtbl->put_borderBottomColor(This,v)
#define IHTMLRuleStyle_get_borderBottomColor(This,p) (This)->lpVtbl->get_borderBottomColor(This,p)
#define IHTMLRuleStyle_put_borderLeftColor(This,v) (This)->lpVtbl->put_borderLeftColor(This,v)
#define IHTMLRuleStyle_get_borderLeftColor(This,p) (This)->lpVtbl->get_borderLeftColor(This,p)
#define IHTMLRuleStyle_put_borderWidth(This,v) (This)->lpVtbl->put_borderWidth(This,v)
#define IHTMLRuleStyle_get_borderWidth(This,p) (This)->lpVtbl->get_borderWidth(This,p)
#define IHTMLRuleStyle_put_borderTopWidth(This,v) (This)->lpVtbl->put_borderTopWidth(This,v)
#define IHTMLRuleStyle_get_borderTopWidth(This,p) (This)->lpVtbl->get_borderTopWidth(This,p)
#define IHTMLRuleStyle_put_borderRightWidth(This,v) (This)->lpVtbl->put_borderRightWidth(This,v)
#define IHTMLRuleStyle_get_borderRightWidth(This,p) (This)->lpVtbl->get_borderRightWidth(This,p)
#define IHTMLRuleStyle_put_borderBottomWidth(This,v) (This)->lpVtbl->put_borderBottomWidth(This,v)
#define IHTMLRuleStyle_get_borderBottomWidth(This,p) (This)->lpVtbl->get_borderBottomWidth(This,p)
#define IHTMLRuleStyle_put_borderLeftWidth(This,v) (This)->lpVtbl->put_borderLeftWidth(This,v)
#define IHTMLRuleStyle_get_borderLeftWidth(This,p) (This)->lpVtbl->get_borderLeftWidth(This,p)
#define IHTMLRuleStyle_put_borderStyle(This,v) (This)->lpVtbl->put_borderStyle(This,v)
#define IHTMLRuleStyle_get_borderStyle(This,p) (This)->lpVtbl->get_borderStyle(This,p)
#define IHTMLRuleStyle_put_borderTopStyle(This,v) (This)->lpVtbl->put_borderTopStyle(This,v)
#define IHTMLRuleStyle_get_borderTopStyle(This,p) (This)->lpVtbl->get_borderTopStyle(This,p)
#define IHTMLRuleStyle_put_borderRightStyle(This,v) (This)->lpVtbl->put_borderRightStyle(This,v)
#define IHTMLRuleStyle_get_borderRightStyle(This,p) (This)->lpVtbl->get_borderRightStyle(This,p)
#define IHTMLRuleStyle_put_borderBottomStyle(This,v) (This)->lpVtbl->put_borderBottomStyle(This,v)
#define IHTMLRuleStyle_get_borderBottomStyle(This,p) (This)->lpVtbl->get_borderBottomStyle(This,p)
#define IHTMLRuleStyle_put_borderLeftStyle(This,v) (This)->lpVtbl->put_borderLeftStyle(This,v)
#define IHTMLRuleStyle_get_borderLeftStyle(This,p) (This)->lpVtbl->get_borderLeftStyle(This,p)
#define IHTMLRuleStyle_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLRuleStyle_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLRuleStyle_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLRuleStyle_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLRuleStyle_put_styleFloat(This,v) (This)->lpVtbl->put_styleFloat(This,v)
#define IHTMLRuleStyle_get_styleFloat(This,p) (This)->lpVtbl->get_styleFloat(This,p)
#define IHTMLRuleStyle_put_clear(This,v) (This)->lpVtbl->put_clear(This,v)
#define IHTMLRuleStyle_get_clear(This,p) (This)->lpVtbl->get_clear(This,p)
#define IHTMLRuleStyle_put_display(This,v) (This)->lpVtbl->put_display(This,v)
#define IHTMLRuleStyle_get_display(This,p) (This)->lpVtbl->get_display(This,p)
#define IHTMLRuleStyle_put_visibility(This,v) (This)->lpVtbl->put_visibility(This,v)
#define IHTMLRuleStyle_get_visibility(This,p) (This)->lpVtbl->get_visibility(This,p)
#define IHTMLRuleStyle_put_listStyleType(This,v) (This)->lpVtbl->put_listStyleType(This,v)
#define IHTMLRuleStyle_get_listStyleType(This,p) (This)->lpVtbl->get_listStyleType(This,p)
#define IHTMLRuleStyle_put_listStylePosition(This,v) (This)->lpVtbl->put_listStylePosition(This,v)
#define IHTMLRuleStyle_get_listStylePosition(This,p) (This)->lpVtbl->get_listStylePosition(This,p)
#define IHTMLRuleStyle_put_listStyleImage(This,v) (This)->lpVtbl->put_listStyleImage(This,v)
#define IHTMLRuleStyle_get_listStyleImage(This,p) (This)->lpVtbl->get_listStyleImage(This,p)
#define IHTMLRuleStyle_put_listStyle(This,v) (This)->lpVtbl->put_listStyle(This,v)
#define IHTMLRuleStyle_get_listStyle(This,p) (This)->lpVtbl->get_listStyle(This,p)
#define IHTMLRuleStyle_put_whiteSpace(This,v) (This)->lpVtbl->put_whiteSpace(This,v)
#define IHTMLRuleStyle_get_whiteSpace(This,p) (This)->lpVtbl->get_whiteSpace(This,p)
#define IHTMLRuleStyle_put_top(This,v) (This)->lpVtbl->put_top(This,v)
#define IHTMLRuleStyle_get_top(This,p) (This)->lpVtbl->get_top(This,p)
#define IHTMLRuleStyle_put_left(This,v) (This)->lpVtbl->put_left(This,v)
#define IHTMLRuleStyle_get_left(This,p) (This)->lpVtbl->get_left(This,p)
#define IHTMLRuleStyle_get_position(This,p) (This)->lpVtbl->get_position(This,p)
#define IHTMLRuleStyle_put_zIndex(This,v) (This)->lpVtbl->put_zIndex(This,v)
#define IHTMLRuleStyle_get_zIndex(This,p) (This)->lpVtbl->get_zIndex(This,p)
#define IHTMLRuleStyle_put_overflow(This,v) (This)->lpVtbl->put_overflow(This,v)
#define IHTMLRuleStyle_get_overflow(This,p) (This)->lpVtbl->get_overflow(This,p)
#define IHTMLRuleStyle_put_pageBreakBefore(This,v) (This)->lpVtbl->put_pageBreakBefore(This,v)
#define IHTMLRuleStyle_get_pageBreakBefore(This,p) (This)->lpVtbl->get_pageBreakBefore(This,p)
#define IHTMLRuleStyle_put_pageBreakAfter(This,v) (This)->lpVtbl->put_pageBreakAfter(This,v)
#define IHTMLRuleStyle_get_pageBreakAfter(This,p) (This)->lpVtbl->get_pageBreakAfter(This,p)
#define IHTMLRuleStyle_put_cssText(This,v) (This)->lpVtbl->put_cssText(This,v)
#define IHTMLRuleStyle_get_cssText(This,p) (This)->lpVtbl->get_cssText(This,p)
#define IHTMLRuleStyle_put_cursor(This,v) (This)->lpVtbl->put_cursor(This,v)
#define IHTMLRuleStyle_get_cursor(This,p) (This)->lpVtbl->get_cursor(This,p)
#define IHTMLRuleStyle_put_clip(This,v) (This)->lpVtbl->put_clip(This,v)
#define IHTMLRuleStyle_get_clip(This,p) (This)->lpVtbl->get_clip(This,p)
#define IHTMLRuleStyle_put_filter(This,v) (This)->lpVtbl->put_filter(This,v)
#define IHTMLRuleStyle_get_filter(This,p) (This)->lpVtbl->get_filter(This,p)
#define IHTMLRuleStyle_setAttribute(This,strAttributeName,AttributeValue,lFlags) (This)->lpVtbl->setAttribute(This,strAttributeName,AttributeValue,lFlags)
#define IHTMLRuleStyle_getAttribute(This,strAttributeName,lFlags,AttributeValue) (This)->lpVtbl->getAttribute(This,strAttributeName,lFlags,AttributeValue)
#define IHTMLRuleStyle_removeAttribute(This,strAttributeName,lFlags,pfSuccess) (This)->lpVtbl->removeAttribute(This,strAttributeName,lFlags,pfSuccess)
#endif
#endif
  HRESULT WINAPI IHTMLRuleStyle_put_fontFamily_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontFamily_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_fontStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_fontVariant_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontVariant_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_fontWeight_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontWeight_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_fontSize_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_fontSize_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_font_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_font_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_font_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_font_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_color_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_color_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_background_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_background_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundImage_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundImage_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundRepeat_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundRepeat_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundAttachment_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundAttachment_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundPosition_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundPosition_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundPositionX_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundPositionX_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_backgroundPositionY_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_backgroundPositionY_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_wordSpacing_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_wordSpacing_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_letterSpacing_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_letterSpacing_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecoration_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecoration_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationNone_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationNone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationNone_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationNone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationUnderline_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationUnderline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationUnderline_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationUnderline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationOverline_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationOverline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationOverline_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationOverline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationLineThrough_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationLineThrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationLineThrough_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationLineThrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textDecorationBlink_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLRuleStyle_put_textDecorationBlink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textDecorationBlink_Proxy(IHTMLRuleStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLRuleStyle_get_textDecorationBlink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_verticalAlign_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_verticalAlign_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textTransform_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textTransform_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textAlign_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textAlign_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_textIndent_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_textIndent_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_lineHeight_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_lineHeight_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_marginTop_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_marginTop_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_marginRight_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_marginRight_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_marginBottom_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_marginBottom_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_marginLeft_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_marginLeft_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_margin_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_margin_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_paddingTop_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_paddingTop_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_paddingRight_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_paddingRight_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_paddingBottom_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_paddingBottom_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_paddingLeft_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_paddingLeft_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_padding_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_padding_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_border_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_border_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderTop_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderTop_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderRight_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderRight_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderBottom_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderBottom_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderLeft_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderLeft_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderColor_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderColor_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderTopColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderTopColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderRightColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderRightColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderBottomColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderBottomColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderLeftColor_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderLeftColor_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderWidth_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderWidth_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderTopWidth_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderTopWidth_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderRightWidth_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderRightWidth_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderBottomWidth_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderBottomWidth_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderLeftWidth_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderLeftWidth_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderTopStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderTopStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderRightStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderRightStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderBottomStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderBottomStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_borderLeftStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_borderLeftStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_width_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_width_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_height_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_height_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_styleFloat_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_styleFloat_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_clear_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_clear_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_display_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_display_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_visibility_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_visibility_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_listStyleType_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_listStyleType_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_listStylePosition_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_listStylePosition_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_listStyleImage_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_listStyleImage_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_listStyle_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_listStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_listStyle_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_listStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_whiteSpace_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_whiteSpace_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_top_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_top_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_left_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_left_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_position_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_zIndex_Proxy(IHTMLRuleStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle_put_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_zIndex_Proxy(IHTMLRuleStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle_get_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_overflow_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_overflow_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_pageBreakBefore_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_pageBreakBefore_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_pageBreakAfter_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_pageBreakAfter_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_cssText_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_cssText_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_cursor_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_cursor_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_clip_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_clip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_clip_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_clip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_put_filter_Proxy(IHTMLRuleStyle *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle_put_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_get_filter_Proxy(IHTMLRuleStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle_get_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_setAttribute_Proxy(IHTMLRuleStyle *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
  void __RPC_STUB IHTMLRuleStyle_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_getAttribute_Proxy(IHTMLRuleStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLRuleStyle_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle_removeAttribute_Proxy(IHTMLRuleStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLRuleStyle_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRuleStyle2_INTERFACE_DEFINED__
#define __IHTMLRuleStyle2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRuleStyle2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLRuleStyle2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_tableLayout(BSTR v) = 0;
    virtual HRESULT WINAPI get_tableLayout(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderCollapse(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderCollapse(BSTR *p) = 0;
    virtual HRESULT WINAPI put_direction(BSTR v) = 0;
    virtual HRESULT WINAPI get_direction(BSTR *p) = 0;
    virtual HRESULT WINAPI put_behavior(BSTR v) = 0;
    virtual HRESULT WINAPI get_behavior(BSTR *p) = 0;
    virtual HRESULT WINAPI put_position(BSTR v) = 0;
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI put_unicodeBidi(BSTR v) = 0;
    virtual HRESULT WINAPI get_unicodeBidi(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bottom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_right(VARIANT v) = 0;
    virtual HRESULT WINAPI get_right(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_pixelBottom(long v) = 0;
    virtual HRESULT WINAPI get_pixelBottom(long *p) = 0;
    virtual HRESULT WINAPI put_pixelRight(long v) = 0;
    virtual HRESULT WINAPI get_pixelRight(long *p) = 0;
    virtual HRESULT WINAPI put_posBottom(float v) = 0;
    virtual HRESULT WINAPI get_posBottom(float *p) = 0;
    virtual HRESULT WINAPI put_posRight(float v) = 0;
    virtual HRESULT WINAPI get_posRight(float *p) = 0;
    virtual HRESULT WINAPI put_imeMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_imeMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyPosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rubyOverhang(BSTR v) = 0;
    virtual HRESULT WINAPI get_rubyOverhang(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGridChar(VARIANT v) = 0;
    virtual HRESULT WINAPI get_layoutGridChar(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_layoutGridLine(VARIANT v) = 0;
    virtual HRESULT WINAPI get_layoutGridLine(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_layoutGridMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGridMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGridType(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGridType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_layoutGrid(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutGrid(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAutospace(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAutospace(BSTR *p) = 0;
    virtual HRESULT WINAPI put_wordBreak(BSTR v) = 0;
    virtual HRESULT WINAPI get_wordBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lineBreak(BSTR v) = 0;
    virtual HRESULT WINAPI get_lineBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textJustify(BSTR v) = 0;
    virtual HRESULT WINAPI get_textJustify(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textJustifyTrim(BSTR v) = 0;
    virtual HRESULT WINAPI get_textJustifyTrim(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textKashida(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textKashida(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_overflowX(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflowX(BSTR *p) = 0;
    virtual HRESULT WINAPI put_overflowY(BSTR v) = 0;
    virtual HRESULT WINAPI get_overflowY(BSTR *p) = 0;
    virtual HRESULT WINAPI put_accelerator(BSTR v) = 0;
    virtual HRESULT WINAPI get_accelerator(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLRuleStyle2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLRuleStyle2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLRuleStyle2 *This);
      ULONG (WINAPI *Release)(IHTMLRuleStyle2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLRuleStyle2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLRuleStyle2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLRuleStyle2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLRuleStyle2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_tableLayout)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_tableLayout)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_borderCollapse)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_borderCollapse)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_direction)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_direction)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_behavior)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_behavior)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_position)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_position)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_unicodeBidi)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_unicodeBidi)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_bottom)(IHTMLRuleStyle2 *This,VARIANT v);
      HRESULT (WINAPI *get_bottom)(IHTMLRuleStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *put_right)(IHTMLRuleStyle2 *This,VARIANT v);
      HRESULT (WINAPI *get_right)(IHTMLRuleStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *put_pixelBottom)(IHTMLRuleStyle2 *This,long v);
      HRESULT (WINAPI *get_pixelBottom)(IHTMLRuleStyle2 *This,long *p);
      HRESULT (WINAPI *put_pixelRight)(IHTMLRuleStyle2 *This,long v);
      HRESULT (WINAPI *get_pixelRight)(IHTMLRuleStyle2 *This,long *p);
      HRESULT (WINAPI *put_posBottom)(IHTMLRuleStyle2 *This,float v);
      HRESULT (WINAPI *get_posBottom)(IHTMLRuleStyle2 *This,float *p);
      HRESULT (WINAPI *put_posRight)(IHTMLRuleStyle2 *This,float v);
      HRESULT (WINAPI *get_posRight)(IHTMLRuleStyle2 *This,float *p);
      HRESULT (WINAPI *put_imeMode)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_imeMode)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_rubyAlign)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_rubyAlign)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_rubyPosition)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_rubyPosition)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_rubyOverhang)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_rubyOverhang)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_layoutGridChar)(IHTMLRuleStyle2 *This,VARIANT v);
      HRESULT (WINAPI *get_layoutGridChar)(IHTMLRuleStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *put_layoutGridLine)(IHTMLRuleStyle2 *This,VARIANT v);
      HRESULT (WINAPI *get_layoutGridLine)(IHTMLRuleStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *put_layoutGridMode)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_layoutGridMode)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_layoutGridType)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_layoutGridType)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_layoutGrid)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_layoutGrid)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_textAutospace)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_textAutospace)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_wordBreak)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_wordBreak)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_lineBreak)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_lineBreak)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_textJustify)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_textJustify)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_textJustifyTrim)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_textJustifyTrim)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_textKashida)(IHTMLRuleStyle2 *This,VARIANT v);
      HRESULT (WINAPI *get_textKashida)(IHTMLRuleStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *put_overflowX)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_overflowX)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_overflowY)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_overflowY)(IHTMLRuleStyle2 *This,BSTR *p);
      HRESULT (WINAPI *put_accelerator)(IHTMLRuleStyle2 *This,BSTR v);
      HRESULT (WINAPI *get_accelerator)(IHTMLRuleStyle2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLRuleStyle2Vtbl;
  interface IHTMLRuleStyle2 {
    CONST_VTBL struct IHTMLRuleStyle2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLRuleStyle2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLRuleStyle2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLRuleStyle2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLRuleStyle2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLRuleStyle2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLRuleStyle2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLRuleStyle2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLRuleStyle2_put_tableLayout(This,v) (This)->lpVtbl->put_tableLayout(This,v)
#define IHTMLRuleStyle2_get_tableLayout(This,p) (This)->lpVtbl->get_tableLayout(This,p)
#define IHTMLRuleStyle2_put_borderCollapse(This,v) (This)->lpVtbl->put_borderCollapse(This,v)
#define IHTMLRuleStyle2_get_borderCollapse(This,p) (This)->lpVtbl->get_borderCollapse(This,p)
#define IHTMLRuleStyle2_put_direction(This,v) (This)->lpVtbl->put_direction(This,v)
#define IHTMLRuleStyle2_get_direction(This,p) (This)->lpVtbl->get_direction(This,p)
#define IHTMLRuleStyle2_put_behavior(This,v) (This)->lpVtbl->put_behavior(This,v)
#define IHTMLRuleStyle2_get_behavior(This,p) (This)->lpVtbl->get_behavior(This,p)
#define IHTMLRuleStyle2_put_position(This,v) (This)->lpVtbl->put_position(This,v)
#define IHTMLRuleStyle2_get_position(This,p) (This)->lpVtbl->get_position(This,p)
#define IHTMLRuleStyle2_put_unicodeBidi(This,v) (This)->lpVtbl->put_unicodeBidi(This,v)
#define IHTMLRuleStyle2_get_unicodeBidi(This,p) (This)->lpVtbl->get_unicodeBidi(This,p)
#define IHTMLRuleStyle2_put_bottom(This,v) (This)->lpVtbl->put_bottom(This,v)
#define IHTMLRuleStyle2_get_bottom(This,p) (This)->lpVtbl->get_bottom(This,p)
#define IHTMLRuleStyle2_put_right(This,v) (This)->lpVtbl->put_right(This,v)
#define IHTMLRuleStyle2_get_right(This,p) (This)->lpVtbl->get_right(This,p)
#define IHTMLRuleStyle2_put_pixelBottom(This,v) (This)->lpVtbl->put_pixelBottom(This,v)
#define IHTMLRuleStyle2_get_pixelBottom(This,p) (This)->lpVtbl->get_pixelBottom(This,p)
#define IHTMLRuleStyle2_put_pixelRight(This,v) (This)->lpVtbl->put_pixelRight(This,v)
#define IHTMLRuleStyle2_get_pixelRight(This,p) (This)->lpVtbl->get_pixelRight(This,p)
#define IHTMLRuleStyle2_put_posBottom(This,v) (This)->lpVtbl->put_posBottom(This,v)
#define IHTMLRuleStyle2_get_posBottom(This,p) (This)->lpVtbl->get_posBottom(This,p)
#define IHTMLRuleStyle2_put_posRight(This,v) (This)->lpVtbl->put_posRight(This,v)
#define IHTMLRuleStyle2_get_posRight(This,p) (This)->lpVtbl->get_posRight(This,p)
#define IHTMLRuleStyle2_put_imeMode(This,v) (This)->lpVtbl->put_imeMode(This,v)
#define IHTMLRuleStyle2_get_imeMode(This,p) (This)->lpVtbl->get_imeMode(This,p)
#define IHTMLRuleStyle2_put_rubyAlign(This,v) (This)->lpVtbl->put_rubyAlign(This,v)
#define IHTMLRuleStyle2_get_rubyAlign(This,p) (This)->lpVtbl->get_rubyAlign(This,p)
#define IHTMLRuleStyle2_put_rubyPosition(This,v) (This)->lpVtbl->put_rubyPosition(This,v)
#define IHTMLRuleStyle2_get_rubyPosition(This,p) (This)->lpVtbl->get_rubyPosition(This,p)
#define IHTMLRuleStyle2_put_rubyOverhang(This,v) (This)->lpVtbl->put_rubyOverhang(This,v)
#define IHTMLRuleStyle2_get_rubyOverhang(This,p) (This)->lpVtbl->get_rubyOverhang(This,p)
#define IHTMLRuleStyle2_put_layoutGridChar(This,v) (This)->lpVtbl->put_layoutGridChar(This,v)
#define IHTMLRuleStyle2_get_layoutGridChar(This,p) (This)->lpVtbl->get_layoutGridChar(This,p)
#define IHTMLRuleStyle2_put_layoutGridLine(This,v) (This)->lpVtbl->put_layoutGridLine(This,v)
#define IHTMLRuleStyle2_get_layoutGridLine(This,p) (This)->lpVtbl->get_layoutGridLine(This,p)
#define IHTMLRuleStyle2_put_layoutGridMode(This,v) (This)->lpVtbl->put_layoutGridMode(This,v)
#define IHTMLRuleStyle2_get_layoutGridMode(This,p) (This)->lpVtbl->get_layoutGridMode(This,p)
#define IHTMLRuleStyle2_put_layoutGridType(This,v) (This)->lpVtbl->put_layoutGridType(This,v)
#define IHTMLRuleStyle2_get_layoutGridType(This,p) (This)->lpVtbl->get_layoutGridType(This,p)
#define IHTMLRuleStyle2_put_layoutGrid(This,v) (This)->lpVtbl->put_layoutGrid(This,v)
#define IHTMLRuleStyle2_get_layoutGrid(This,p) (This)->lpVtbl->get_layoutGrid(This,p)
#define IHTMLRuleStyle2_put_textAutospace(This,v) (This)->lpVtbl->put_textAutospace(This,v)
#define IHTMLRuleStyle2_get_textAutospace(This,p) (This)->lpVtbl->get_textAutospace(This,p)
#define IHTMLRuleStyle2_put_wordBreak(This,v) (This)->lpVtbl->put_wordBreak(This,v)
#define IHTMLRuleStyle2_get_wordBreak(This,p) (This)->lpVtbl->get_wordBreak(This,p)
#define IHTMLRuleStyle2_put_lineBreak(This,v) (This)->lpVtbl->put_lineBreak(This,v)
#define IHTMLRuleStyle2_get_lineBreak(This,p) (This)->lpVtbl->get_lineBreak(This,p)
#define IHTMLRuleStyle2_put_textJustify(This,v) (This)->lpVtbl->put_textJustify(This,v)
#define IHTMLRuleStyle2_get_textJustify(This,p) (This)->lpVtbl->get_textJustify(This,p)
#define IHTMLRuleStyle2_put_textJustifyTrim(This,v) (This)->lpVtbl->put_textJustifyTrim(This,v)
#define IHTMLRuleStyle2_get_textJustifyTrim(This,p) (This)->lpVtbl->get_textJustifyTrim(This,p)
#define IHTMLRuleStyle2_put_textKashida(This,v) (This)->lpVtbl->put_textKashida(This,v)
#define IHTMLRuleStyle2_get_textKashida(This,p) (This)->lpVtbl->get_textKashida(This,p)
#define IHTMLRuleStyle2_put_overflowX(This,v) (This)->lpVtbl->put_overflowX(This,v)
#define IHTMLRuleStyle2_get_overflowX(This,p) (This)->lpVtbl->get_overflowX(This,p)
#define IHTMLRuleStyle2_put_overflowY(This,v) (This)->lpVtbl->put_overflowY(This,v)
#define IHTMLRuleStyle2_get_overflowY(This,p) (This)->lpVtbl->get_overflowY(This,p)
#define IHTMLRuleStyle2_put_accelerator(This,v) (This)->lpVtbl->put_accelerator(This,v)
#define IHTMLRuleStyle2_get_accelerator(This,p) (This)->lpVtbl->get_accelerator(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLRuleStyle2_put_tableLayout_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_tableLayout_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_borderCollapse_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_borderCollapse_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_direction_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_direction_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_behavior_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_behavior_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_position_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_position_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_unicodeBidi_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_unicodeBidi_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_bottom_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_bottom_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_right_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_right_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_pixelBottom_Proxy(IHTMLRuleStyle2 *This,long v);
  void __RPC_STUB IHTMLRuleStyle2_put_pixelBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_pixelBottom_Proxy(IHTMLRuleStyle2 *This,long *p);
  void __RPC_STUB IHTMLRuleStyle2_get_pixelBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_pixelRight_Proxy(IHTMLRuleStyle2 *This,long v);
  void __RPC_STUB IHTMLRuleStyle2_put_pixelRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_pixelRight_Proxy(IHTMLRuleStyle2 *This,long *p);
  void __RPC_STUB IHTMLRuleStyle2_get_pixelRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_posBottom_Proxy(IHTMLRuleStyle2 *This,float v);
  void __RPC_STUB IHTMLRuleStyle2_put_posBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_posBottom_Proxy(IHTMLRuleStyle2 *This,float *p);
  void __RPC_STUB IHTMLRuleStyle2_get_posBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_posRight_Proxy(IHTMLRuleStyle2 *This,float v);
  void __RPC_STUB IHTMLRuleStyle2_put_posRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_posRight_Proxy(IHTMLRuleStyle2 *This,float *p);
  void __RPC_STUB IHTMLRuleStyle2_get_posRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_imeMode_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_imeMode_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_rubyAlign_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_rubyAlign_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_rubyPosition_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_rubyPosition_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_rubyOverhang_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_rubyOverhang_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGridChar_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGridChar_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGridLine_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGridLine_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGridMode_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGridMode_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGridType_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGridType_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_layoutGrid_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_layoutGrid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_layoutGrid_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_layoutGrid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_textAutospace_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_textAutospace_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_wordBreak_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_wordBreak_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_lineBreak_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_lineBreak_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_textJustify_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_textJustify_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_textJustifyTrim_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_textJustifyTrim_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_textKashida_Proxy(IHTMLRuleStyle2 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle2_put_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_textKashida_Proxy(IHTMLRuleStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle2_get_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_overflowX_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_overflowX_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_overflowY_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_overflowY_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_put_accelerator_Proxy(IHTMLRuleStyle2 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle2_put_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle2_get_accelerator_Proxy(IHTMLRuleStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle2_get_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRuleStyle3_INTERFACE_DEFINED__
#define __IHTMLRuleStyle3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRuleStyle3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLRuleStyle3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_layoutFlow(BSTR v) = 0;
    virtual HRESULT WINAPI get_layoutFlow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_zoom(VARIANT v) = 0;
    virtual HRESULT WINAPI get_zoom(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_wordWrap(BSTR v) = 0;
    virtual HRESULT WINAPI get_wordWrap(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textUnderlinePosition(BSTR v) = 0;
    virtual HRESULT WINAPI get_textUnderlinePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scrollbarBaseColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarBaseColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarFaceColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarFaceColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbar3dLightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbar3dLightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarShadowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarHighlightColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarHighlightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarDarkShadowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarDarkShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarArrowColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarArrowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollbarTrackColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_scrollbarTrackColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_writingMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_writingMode(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textAlignLast(BSTR v) = 0;
    virtual HRESULT WINAPI get_textAlignLast(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textKashidaSpace(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textKashidaSpace(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLRuleStyle3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLRuleStyle3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLRuleStyle3 *This);
      ULONG (WINAPI *Release)(IHTMLRuleStyle3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLRuleStyle3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLRuleStyle3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLRuleStyle3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLRuleStyle3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_layoutFlow)(IHTMLRuleStyle3 *This,BSTR v);
      HRESULT (WINAPI *get_layoutFlow)(IHTMLRuleStyle3 *This,BSTR *p);
      HRESULT (WINAPI *put_zoom)(IHTMLRuleStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_zoom)(IHTMLRuleStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_wordWrap)(IHTMLRuleStyle3 *This,BSTR v);
      HRESULT (WINAPI *get_wordWrap)(IHTMLRuleStyle3 *This,BSTR *p);
      HRESULT (WINAPI *put_textUnderlinePosition)(IHTMLRuleStyle3 *This,BSTR v);
      HRESULT (WINAPI *get_textUnderlinePosition)(IHTMLRuleStyle3 *This,BSTR *p);
      HRESULT (WINAPI *put_scrollbarBaseColor)(IHTMLRuleStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarBaseColor)(IHTMLRuleStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbarFaceColor)(IHTMLRuleStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarFaceColor)(IHTMLRuleStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbar3dLightColor)(IHTMLRuleStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbar3dLightColor)(IHTMLRuleStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbarShadowColor)(IHTMLRuleStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarShadowColor)(IHTMLRuleStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbarHighlightColor)(IHTMLRuleStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarHighlightColor)(IHTMLRuleStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbarDarkShadowColor)(IHTMLRuleStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarDarkShadowColor)(IHTMLRuleStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbarArrowColor)(IHTMLRuleStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarArrowColor)(IHTMLRuleStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollbarTrackColor)(IHTMLRuleStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_scrollbarTrackColor)(IHTMLRuleStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *put_writingMode)(IHTMLRuleStyle3 *This,BSTR v);
      HRESULT (WINAPI *get_writingMode)(IHTMLRuleStyle3 *This,BSTR *p);
      HRESULT (WINAPI *put_textAlignLast)(IHTMLRuleStyle3 *This,BSTR v);
      HRESULT (WINAPI *get_textAlignLast)(IHTMLRuleStyle3 *This,BSTR *p);
      HRESULT (WINAPI *put_textKashidaSpace)(IHTMLRuleStyle3 *This,VARIANT v);
      HRESULT (WINAPI *get_textKashidaSpace)(IHTMLRuleStyle3 *This,VARIANT *p);
    END_INTERFACE
  } IHTMLRuleStyle3Vtbl;
  interface IHTMLRuleStyle3 {
    CONST_VTBL struct IHTMLRuleStyle3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLRuleStyle3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLRuleStyle3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLRuleStyle3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLRuleStyle3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLRuleStyle3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLRuleStyle3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLRuleStyle3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLRuleStyle3_put_layoutFlow(This,v) (This)->lpVtbl->put_layoutFlow(This,v)
#define IHTMLRuleStyle3_get_layoutFlow(This,p) (This)->lpVtbl->get_layoutFlow(This,p)
#define IHTMLRuleStyle3_put_zoom(This,v) (This)->lpVtbl->put_zoom(This,v)
#define IHTMLRuleStyle3_get_zoom(This,p) (This)->lpVtbl->get_zoom(This,p)
#define IHTMLRuleStyle3_put_wordWrap(This,v) (This)->lpVtbl->put_wordWrap(This,v)
#define IHTMLRuleStyle3_get_wordWrap(This,p) (This)->lpVtbl->get_wordWrap(This,p)
#define IHTMLRuleStyle3_put_textUnderlinePosition(This,v) (This)->lpVtbl->put_textUnderlinePosition(This,v)
#define IHTMLRuleStyle3_get_textUnderlinePosition(This,p) (This)->lpVtbl->get_textUnderlinePosition(This,p)
#define IHTMLRuleStyle3_put_scrollbarBaseColor(This,v) (This)->lpVtbl->put_scrollbarBaseColor(This,v)
#define IHTMLRuleStyle3_get_scrollbarBaseColor(This,p) (This)->lpVtbl->get_scrollbarBaseColor(This,p)
#define IHTMLRuleStyle3_put_scrollbarFaceColor(This,v) (This)->lpVtbl->put_scrollbarFaceColor(This,v)
#define IHTMLRuleStyle3_get_scrollbarFaceColor(This,p) (This)->lpVtbl->get_scrollbarFaceColor(This,p)
#define IHTMLRuleStyle3_put_scrollbar3dLightColor(This,v) (This)->lpVtbl->put_scrollbar3dLightColor(This,v)
#define IHTMLRuleStyle3_get_scrollbar3dLightColor(This,p) (This)->lpVtbl->get_scrollbar3dLightColor(This,p)
#define IHTMLRuleStyle3_put_scrollbarShadowColor(This,v) (This)->lpVtbl->put_scrollbarShadowColor(This,v)
#define IHTMLRuleStyle3_get_scrollbarShadowColor(This,p) (This)->lpVtbl->get_scrollbarShadowColor(This,p)
#define IHTMLRuleStyle3_put_scrollbarHighlightColor(This,v) (This)->lpVtbl->put_scrollbarHighlightColor(This,v)
#define IHTMLRuleStyle3_get_scrollbarHighlightColor(This,p) (This)->lpVtbl->get_scrollbarHighlightColor(This,p)
#define IHTMLRuleStyle3_put_scrollbarDarkShadowColor(This,v) (This)->lpVtbl->put_scrollbarDarkShadowColor(This,v)
#define IHTMLRuleStyle3_get_scrollbarDarkShadowColor(This,p) (This)->lpVtbl->get_scrollbarDarkShadowColor(This,p)
#define IHTMLRuleStyle3_put_scrollbarArrowColor(This,v) (This)->lpVtbl->put_scrollbarArrowColor(This,v)
#define IHTMLRuleStyle3_get_scrollbarArrowColor(This,p) (This)->lpVtbl->get_scrollbarArrowColor(This,p)
#define IHTMLRuleStyle3_put_scrollbarTrackColor(This,v) (This)->lpVtbl->put_scrollbarTrackColor(This,v)
#define IHTMLRuleStyle3_get_scrollbarTrackColor(This,p) (This)->lpVtbl->get_scrollbarTrackColor(This,p)
#define IHTMLRuleStyle3_put_writingMode(This,v) (This)->lpVtbl->put_writingMode(This,v)
#define IHTMLRuleStyle3_get_writingMode(This,p) (This)->lpVtbl->get_writingMode(This,p)
#define IHTMLRuleStyle3_put_textAlignLast(This,v) (This)->lpVtbl->put_textAlignLast(This,v)
#define IHTMLRuleStyle3_get_textAlignLast(This,p) (This)->lpVtbl->get_textAlignLast(This,p)
#define IHTMLRuleStyle3_put_textKashidaSpace(This,v) (This)->lpVtbl->put_textKashidaSpace(This,v)
#define IHTMLRuleStyle3_get_textKashidaSpace(This,p) (This)->lpVtbl->get_textKashidaSpace(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLRuleStyle3_put_layoutFlow_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_layoutFlow_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_zoom_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_zoom_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_wordWrap_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_wordWrap_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_textUnderlinePosition_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_textUnderlinePosition_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarBaseColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarBaseColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarFaceColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarFaceColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbar3dLightColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbar3dLightColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarShadowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarShadowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarHighlightColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarHighlightColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarDarkShadowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarDarkShadowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarArrowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarArrowColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_scrollbarTrackColor_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_scrollbarTrackColor_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_writingMode_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_writingMode_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_textAlignLast_Proxy(IHTMLRuleStyle3 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle3_put_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_textAlignLast_Proxy(IHTMLRuleStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle3_get_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_put_textKashidaSpace_Proxy(IHTMLRuleStyle3 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle3_put_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle3_get_textKashidaSpace_Proxy(IHTMLRuleStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle3_get_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRuleStyle4_INTERFACE_DEFINED__
#define __IHTMLRuleStyle4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRuleStyle4;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLRuleStyle4 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_textOverflow(BSTR v) = 0;
    virtual HRESULT WINAPI get_textOverflow(BSTR *p) = 0;
    virtual HRESULT WINAPI put_minHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_minHeight(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLRuleStyle4Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLRuleStyle4 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLRuleStyle4 *This);
      ULONG (WINAPI *Release)(IHTMLRuleStyle4 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLRuleStyle4 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLRuleStyle4 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLRuleStyle4 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLRuleStyle4 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_textOverflow)(IHTMLRuleStyle4 *This,BSTR v);
      HRESULT (WINAPI *get_textOverflow)(IHTMLRuleStyle4 *This,BSTR *p);
      HRESULT (WINAPI *put_minHeight)(IHTMLRuleStyle4 *This,VARIANT v);
      HRESULT (WINAPI *get_minHeight)(IHTMLRuleStyle4 *This,VARIANT *p);
    END_INTERFACE
  } IHTMLRuleStyle4Vtbl;
  interface IHTMLRuleStyle4 {
    CONST_VTBL struct IHTMLRuleStyle4Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLRuleStyle4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLRuleStyle4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLRuleStyle4_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLRuleStyle4_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLRuleStyle4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLRuleStyle4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLRuleStyle4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLRuleStyle4_put_textOverflow(This,v) (This)->lpVtbl->put_textOverflow(This,v)
#define IHTMLRuleStyle4_get_textOverflow(This,p) (This)->lpVtbl->get_textOverflow(This,p)
#define IHTMLRuleStyle4_put_minHeight(This,v) (This)->lpVtbl->put_minHeight(This,v)
#define IHTMLRuleStyle4_get_minHeight(This,p) (This)->lpVtbl->get_minHeight(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLRuleStyle4_put_textOverflow_Proxy(IHTMLRuleStyle4 *This,BSTR v);
  void __RPC_STUB IHTMLRuleStyle4_put_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle4_get_textOverflow_Proxy(IHTMLRuleStyle4 *This,BSTR *p);
  void __RPC_STUB IHTMLRuleStyle4_get_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle4_put_minHeight_Proxy(IHTMLRuleStyle4 *This,VARIANT v);
  void __RPC_STUB IHTMLRuleStyle4_put_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRuleStyle4_get_minHeight_Proxy(IHTMLRuleStyle4 *This,VARIANT *p);
  void __RPC_STUB IHTMLRuleStyle4_get_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLStyle_DISPINTERFACE_DEFINED__
#define __DispHTMLStyle_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLStyle;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLStyle : public IDispatch {
  };
#else
  typedef struct DispHTMLStyleVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLStyle *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLStyle *This);
      ULONG (WINAPI *Release)(DispHTMLStyle *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLStyle *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLStyle *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLStyle *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLStyle *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLStyleVtbl;
  interface DispHTMLStyle {
    CONST_VTBL struct DispHTMLStyleVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLStyle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLStyle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLStyle_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLStyle_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLStyle_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLStyle_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLStyle_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLStyle;
#ifdef __cplusplus
  class HTMLStyle;
#endif

#ifndef __DispHTMLRuleStyle_DISPINTERFACE_DEFINED__
#define __DispHTMLRuleStyle_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLRuleStyle;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLRuleStyle : public IDispatch {
  };
#else
  typedef struct DispHTMLRuleStyleVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLRuleStyle *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLRuleStyle *This);
      ULONG (WINAPI *Release)(DispHTMLRuleStyle *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLRuleStyle *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLRuleStyle *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLRuleStyle *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLRuleStyle *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLRuleStyleVtbl;
  interface DispHTMLRuleStyle {
    CONST_VTBL struct DispHTMLRuleStyleVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLRuleStyle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLRuleStyle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLRuleStyle_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLRuleStyle_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLRuleStyle_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLRuleStyle_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLRuleStyle_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLRuleStyle;
#ifdef __cplusplus
  class HTMLRuleStyle;
#endif

#ifndef __IHTMLRenderStyle_INTERFACE_DEFINED__
#define __IHTMLRenderStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRenderStyle;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLRenderStyle : public IDispatch {
  public:
    virtual HRESULT WINAPI put_textLineThroughStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_textLineThroughStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textUnderlineStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_textUnderlineStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textEffect(BSTR v) = 0;
    virtual HRESULT WINAPI get_textEffect(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textBackgroundColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textBackgroundColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_textDecorationColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_textDecorationColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_renderingPriority(long v) = 0;
    virtual HRESULT WINAPI get_renderingPriority(long *p) = 0;
    virtual HRESULT WINAPI put_defaultTextSelection(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultTextSelection(BSTR *p) = 0;
    virtual HRESULT WINAPI put_textDecoration(BSTR v) = 0;
    virtual HRESULT WINAPI get_textDecoration(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLRenderStyleVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLRenderStyle *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLRenderStyle *This);
      ULONG (WINAPI *Release)(IHTMLRenderStyle *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLRenderStyle *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLRenderStyle *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLRenderStyle *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLRenderStyle *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_textLineThroughStyle)(IHTMLRenderStyle *This,BSTR v);
      HRESULT (WINAPI *get_textLineThroughStyle)(IHTMLRenderStyle *This,BSTR *p);
      HRESULT (WINAPI *put_textUnderlineStyle)(IHTMLRenderStyle *This,BSTR v);
      HRESULT (WINAPI *get_textUnderlineStyle)(IHTMLRenderStyle *This,BSTR *p);
      HRESULT (WINAPI *put_textEffect)(IHTMLRenderStyle *This,BSTR v);
      HRESULT (WINAPI *get_textEffect)(IHTMLRenderStyle *This,BSTR *p);
      HRESULT (WINAPI *put_textColor)(IHTMLRenderStyle *This,VARIANT v);
      HRESULT (WINAPI *get_textColor)(IHTMLRenderStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_textBackgroundColor)(IHTMLRenderStyle *This,VARIANT v);
      HRESULT (WINAPI *get_textBackgroundColor)(IHTMLRenderStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_textDecorationColor)(IHTMLRenderStyle *This,VARIANT v);
      HRESULT (WINAPI *get_textDecorationColor)(IHTMLRenderStyle *This,VARIANT *p);
      HRESULT (WINAPI *put_renderingPriority)(IHTMLRenderStyle *This,long v);
      HRESULT (WINAPI *get_renderingPriority)(IHTMLRenderStyle *This,long *p);
      HRESULT (WINAPI *put_defaultTextSelection)(IHTMLRenderStyle *This,BSTR v);
      HRESULT (WINAPI *get_defaultTextSelection)(IHTMLRenderStyle *This,BSTR *p);
      HRESULT (WINAPI *put_textDecoration)(IHTMLRenderStyle *This,BSTR v);
      HRESULT (WINAPI *get_textDecoration)(IHTMLRenderStyle *This,BSTR *p);
    END_INTERFACE
  } IHTMLRenderStyleVtbl;
  interface IHTMLRenderStyle {
    CONST_VTBL struct IHTMLRenderStyleVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLRenderStyle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLRenderStyle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLRenderStyle_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLRenderStyle_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLRenderStyle_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLRenderStyle_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLRenderStyle_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLRenderStyle_put_textLineThroughStyle(This,v) (This)->lpVtbl->put_textLineThroughStyle(This,v)
#define IHTMLRenderStyle_get_textLineThroughStyle(This,p) (This)->lpVtbl->get_textLineThroughStyle(This,p)
#define IHTMLRenderStyle_put_textUnderlineStyle(This,v) (This)->lpVtbl->put_textUnderlineStyle(This,v)
#define IHTMLRenderStyle_get_textUnderlineStyle(This,p) (This)->lpVtbl->get_textUnderlineStyle(This,p)
#define IHTMLRenderStyle_put_textEffect(This,v) (This)->lpVtbl->put_textEffect(This,v)
#define IHTMLRenderStyle_get_textEffect(This,p) (This)->lpVtbl->get_textEffect(This,p)
#define IHTMLRenderStyle_put_textColor(This,v) (This)->lpVtbl->put_textColor(This,v)
#define IHTMLRenderStyle_get_textColor(This,p) (This)->lpVtbl->get_textColor(This,p)
#define IHTMLRenderStyle_put_textBackgroundColor(This,v) (This)->lpVtbl->put_textBackgroundColor(This,v)
#define IHTMLRenderStyle_get_textBackgroundColor(This,p) (This)->lpVtbl->get_textBackgroundColor(This,p)
#define IHTMLRenderStyle_put_textDecorationColor(This,v) (This)->lpVtbl->put_textDecorationColor(This,v)
#define IHTMLRenderStyle_get_textDecorationColor(This,p) (This)->lpVtbl->get_textDecorationColor(This,p)
#define IHTMLRenderStyle_put_renderingPriority(This,v) (This)->lpVtbl->put_renderingPriority(This,v)
#define IHTMLRenderStyle_get_renderingPriority(This,p) (This)->lpVtbl->get_renderingPriority(This,p)
#define IHTMLRenderStyle_put_defaultTextSelection(This,v) (This)->lpVtbl->put_defaultTextSelection(This,v)
#define IHTMLRenderStyle_get_defaultTextSelection(This,p) (This)->lpVtbl->get_defaultTextSelection(This,p)
#define IHTMLRenderStyle_put_textDecoration(This,v) (This)->lpVtbl->put_textDecoration(This,v)
#define IHTMLRenderStyle_get_textDecoration(This,p) (This)->lpVtbl->get_textDecoration(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLRenderStyle_put_textLineThroughStyle_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_textLineThroughStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textLineThroughStyle_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_textLineThroughStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textUnderlineStyle_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_textUnderlineStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textUnderlineStyle_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_textUnderlineStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textEffect_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_textEffect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textEffect_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_textEffect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textColor_Proxy(IHTMLRenderStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRenderStyle_put_textColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textColor_Proxy(IHTMLRenderStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRenderStyle_get_textColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textBackgroundColor_Proxy(IHTMLRenderStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRenderStyle_put_textBackgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textBackgroundColor_Proxy(IHTMLRenderStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRenderStyle_get_textBackgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textDecorationColor_Proxy(IHTMLRenderStyle *This,VARIANT v);
  void __RPC_STUB IHTMLRenderStyle_put_textDecorationColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textDecorationColor_Proxy(IHTMLRenderStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLRenderStyle_get_textDecorationColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_renderingPriority_Proxy(IHTMLRenderStyle *This,long v);
  void __RPC_STUB IHTMLRenderStyle_put_renderingPriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_renderingPriority_Proxy(IHTMLRenderStyle *This,long *p);
  void __RPC_STUB IHTMLRenderStyle_get_renderingPriority_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_defaultTextSelection_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_defaultTextSelection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_defaultTextSelection_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_defaultTextSelection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_put_textDecoration_Proxy(IHTMLRenderStyle *This,BSTR v);
  void __RPC_STUB IHTMLRenderStyle_put_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRenderStyle_get_textDecoration_Proxy(IHTMLRenderStyle *This,BSTR *p);
  void __RPC_STUB IHTMLRenderStyle_get_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLRenderStyle_DISPINTERFACE_DEFINED__
#define __DispHTMLRenderStyle_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLRenderStyle;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLRenderStyle : public IDispatch {
  };
#else
  typedef struct DispHTMLRenderStyleVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLRenderStyle *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLRenderStyle *This);
      ULONG (WINAPI *Release)(DispHTMLRenderStyle *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLRenderStyle *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLRenderStyle *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLRenderStyle *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLRenderStyle *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLRenderStyleVtbl;
  interface DispHTMLRenderStyle {
    CONST_VTBL struct DispHTMLRenderStyleVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLRenderStyle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLRenderStyle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLRenderStyle_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLRenderStyle_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLRenderStyle_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLRenderStyle_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLRenderStyle_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLRenderStyle;
#ifdef __cplusplus
  class HTMLRenderStyle;
#endif

#ifndef __IHTMLCurrentStyle_INTERFACE_DEFINED__
#define __IHTMLCurrentStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCurrentStyle;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLCurrentStyle : public IDispatch {
  public:
    virtual HRESULT WINAPI get_position(BSTR *p) = 0;
    virtual HRESULT WINAPI get_styleFloat(BSTR *p) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_fontFamily(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fontStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fontVariant(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fontWeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_fontSize(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundImage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_backgroundPositionX(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundPositionY(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundRepeat(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderLeftColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderTopColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderRightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderBottomColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderTopStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderRightStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderBottomStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderLeftStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderTopWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderRightWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderBottomWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_borderLeftWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_left(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_top(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_paddingLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_paddingTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_paddingRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_paddingBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_textAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textDecoration(BSTR *p) = 0;
    virtual HRESULT WINAPI get_display(BSTR *p) = 0;
    virtual HRESULT WINAPI get_visibility(BSTR *p) = 0;
    virtual HRESULT WINAPI get_zIndex(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_letterSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_lineHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_textIndent(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_verticalAlign(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_backgroundAttachment(BSTR *p) = 0;
    virtual HRESULT WINAPI get_marginTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_marginRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_marginBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_marginLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
    virtual HRESULT WINAPI get_listStyleType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_listStylePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI get_listStyleImage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_clipTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clipRight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clipBottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clipLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_overflow(BSTR *p) = 0;
    virtual HRESULT WINAPI get_pageBreakBefore(BSTR *p) = 0;
    virtual HRESULT WINAPI get_pageBreakAfter(BSTR *p) = 0;
    virtual HRESULT WINAPI get_cursor(BSTR *p) = 0;
    virtual HRESULT WINAPI get_tableLayout(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderCollapse(BSTR *p) = 0;
    virtual HRESULT WINAPI get_direction(BSTR *p) = 0;
    virtual HRESULT WINAPI get_behavior(BSTR *p) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI get_unicodeBidi(BSTR *p) = 0;
    virtual HRESULT WINAPI get_right(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_bottom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_imeMode(BSTR *p) = 0;
    virtual HRESULT WINAPI get_rubyAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI get_rubyPosition(BSTR *p) = 0;
    virtual HRESULT WINAPI get_rubyOverhang(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textAutospace(BSTR *p) = 0;
    virtual HRESULT WINAPI get_lineBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI get_wordBreak(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textJustify(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textJustifyTrim(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textKashida(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_blockDirection(BSTR *p) = 0;
    virtual HRESULT WINAPI get_layoutGridChar(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_layoutGridLine(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_layoutGridMode(BSTR *p) = 0;
    virtual HRESULT WINAPI get_layoutGridType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderColor(BSTR *p) = 0;
    virtual HRESULT WINAPI get_borderWidth(BSTR *p) = 0;
    virtual HRESULT WINAPI get_padding(BSTR *p) = 0;
    virtual HRESULT WINAPI get_margin(BSTR *p) = 0;
    virtual HRESULT WINAPI get_accelerator(BSTR *p) = 0;
    virtual HRESULT WINAPI get_overflowX(BSTR *p) = 0;
    virtual HRESULT WINAPI get_overflowY(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textTransform(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLCurrentStyleVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLCurrentStyle *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLCurrentStyle *This);
      ULONG (WINAPI *Release)(IHTMLCurrentStyle *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLCurrentStyle *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLCurrentStyle *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLCurrentStyle *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLCurrentStyle *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_position)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_styleFloat)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_color)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_backgroundColor)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_fontFamily)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_fontStyle)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_fontVariant)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_fontWeight)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_fontSize)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_backgroundImage)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_backgroundPositionX)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_backgroundPositionY)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_backgroundRepeat)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_borderLeftColor)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_borderTopColor)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_borderRightColor)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_borderBottomColor)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_borderTopStyle)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_borderRightStyle)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_borderBottomStyle)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_borderLeftStyle)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_borderTopWidth)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_borderRightWidth)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_borderBottomWidth)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_borderLeftWidth)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_left)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_top)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_width)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_height)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_paddingLeft)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_paddingTop)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_paddingRight)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_paddingBottom)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_textAlign)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_textDecoration)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_display)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_visibility)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_zIndex)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_letterSpacing)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_lineHeight)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_textIndent)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_verticalAlign)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_backgroundAttachment)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_marginTop)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_marginRight)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_marginBottom)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_marginLeft)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_clear)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_listStyleType)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_listStylePosition)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_listStyleImage)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_clipTop)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_clipRight)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_clipBottom)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_clipLeft)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_overflow)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_pageBreakBefore)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_pageBreakAfter)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_cursor)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_tableLayout)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_borderCollapse)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_direction)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_behavior)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *getAttribute)(IHTMLCurrentStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
      HRESULT (WINAPI *get_unicodeBidi)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_right)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_bottom)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_imeMode)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_rubyAlign)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_rubyPosition)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_rubyOverhang)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_textAutospace)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_lineBreak)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_wordBreak)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_textJustify)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_textJustifyTrim)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_textKashida)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_blockDirection)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_layoutGridChar)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_layoutGridLine)(IHTMLCurrentStyle *This,VARIANT *p);
      HRESULT (WINAPI *get_layoutGridMode)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_layoutGridType)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_borderStyle)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_borderColor)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_borderWidth)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_padding)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_margin)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_accelerator)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_overflowX)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_overflowY)(IHTMLCurrentStyle *This,BSTR *p);
      HRESULT (WINAPI *get_textTransform)(IHTMLCurrentStyle *This,BSTR *p);
    END_INTERFACE
  } IHTMLCurrentStyleVtbl;
  interface IHTMLCurrentStyle {
    CONST_VTBL struct IHTMLCurrentStyleVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLCurrentStyle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLCurrentStyle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLCurrentStyle_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLCurrentStyle_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLCurrentStyle_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLCurrentStyle_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLCurrentStyle_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLCurrentStyle_get_position(This,p) (This)->lpVtbl->get_position(This,p)
#define IHTMLCurrentStyle_get_styleFloat(This,p) (This)->lpVtbl->get_styleFloat(This,p)
#define IHTMLCurrentStyle_get_color(This,p) (This)->lpVtbl->get_color(This,p)
#define IHTMLCurrentStyle_get_backgroundColor(This,p) (This)->lpVtbl->get_backgroundColor(This,p)
#define IHTMLCurrentStyle_get_fontFamily(This,p) (This)->lpVtbl->get_fontFamily(This,p)
#define IHTMLCurrentStyle_get_fontStyle(This,p) (This)->lpVtbl->get_fontStyle(This,p)
#define IHTMLCurrentStyle_get_fontVariant(This,p) (This)->lpVtbl->get_fontVariant(This,p)
#define IHTMLCurrentStyle_get_fontWeight(This,p) (This)->lpVtbl->get_fontWeight(This,p)
#define IHTMLCurrentStyle_get_fontSize(This,p) (This)->lpVtbl->get_fontSize(This,p)
#define IHTMLCurrentStyle_get_backgroundImage(This,p) (This)->lpVtbl->get_backgroundImage(This,p)
#define IHTMLCurrentStyle_get_backgroundPositionX(This,p) (This)->lpVtbl->get_backgroundPositionX(This,p)
#define IHTMLCurrentStyle_get_backgroundPositionY(This,p) (This)->lpVtbl->get_backgroundPositionY(This,p)
#define IHTMLCurrentStyle_get_backgroundRepeat(This,p) (This)->lpVtbl->get_backgroundRepeat(This,p)
#define IHTMLCurrentStyle_get_borderLeftColor(This,p) (This)->lpVtbl->get_borderLeftColor(This,p)
#define IHTMLCurrentStyle_get_borderTopColor(This,p) (This)->lpVtbl->get_borderTopColor(This,p)
#define IHTMLCurrentStyle_get_borderRightColor(This,p) (This)->lpVtbl->get_borderRightColor(This,p)
#define IHTMLCurrentStyle_get_borderBottomColor(This,p) (This)->lpVtbl->get_borderBottomColor(This,p)
#define IHTMLCurrentStyle_get_borderTopStyle(This,p) (This)->lpVtbl->get_borderTopStyle(This,p)
#define IHTMLCurrentStyle_get_borderRightStyle(This,p) (This)->lpVtbl->get_borderRightStyle(This,p)
#define IHTMLCurrentStyle_get_borderBottomStyle(This,p) (This)->lpVtbl->get_borderBottomStyle(This,p)
#define IHTMLCurrentStyle_get_borderLeftStyle(This,p) (This)->lpVtbl->get_borderLeftStyle(This,p)
#define IHTMLCurrentStyle_get_borderTopWidth(This,p) (This)->lpVtbl->get_borderTopWidth(This,p)
#define IHTMLCurrentStyle_get_borderRightWidth(This,p) (This)->lpVtbl->get_borderRightWidth(This,p)
#define IHTMLCurrentStyle_get_borderBottomWidth(This,p) (This)->lpVtbl->get_borderBottomWidth(This,p)
#define IHTMLCurrentStyle_get_borderLeftWidth(This,p) (This)->lpVtbl->get_borderLeftWidth(This,p)
#define IHTMLCurrentStyle_get_left(This,p) (This)->lpVtbl->get_left(This,p)
#define IHTMLCurrentStyle_get_top(This,p) (This)->lpVtbl->get_top(This,p)
#define IHTMLCurrentStyle_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLCurrentStyle_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLCurrentStyle_get_paddingLeft(This,p) (This)->lpVtbl->get_paddingLeft(This,p)
#define IHTMLCurrentStyle_get_paddingTop(This,p) (This)->lpVtbl->get_paddingTop(This,p)
#define IHTMLCurrentStyle_get_paddingRight(This,p) (This)->lpVtbl->get_paddingRight(This,p)
#define IHTMLCurrentStyle_get_paddingBottom(This,p) (This)->lpVtbl->get_paddingBottom(This,p)
#define IHTMLCurrentStyle_get_textAlign(This,p) (This)->lpVtbl->get_textAlign(This,p)
#define IHTMLCurrentStyle_get_textDecoration(This,p) (This)->lpVtbl->get_textDecoration(This,p)
#define IHTMLCurrentStyle_get_display(This,p) (This)->lpVtbl->get_display(This,p)
#define IHTMLCurrentStyle_get_visibility(This,p) (This)->lpVtbl->get_visibility(This,p)
#define IHTMLCurrentStyle_get_zIndex(This,p) (This)->lpVtbl->get_zIndex(This,p)
#define IHTMLCurrentStyle_get_letterSpacing(This,p) (This)->lpVtbl->get_letterSpacing(This,p)
#define IHTMLCurrentStyle_get_lineHeight(This,p) (This)->lpVtbl->get_lineHeight(This,p)
#define IHTMLCurrentStyle_get_textIndent(This,p) (This)->lpVtbl->get_textIndent(This,p)
#define IHTMLCurrentStyle_get_verticalAlign(This,p) (This)->lpVtbl->get_verticalAlign(This,p)
#define IHTMLCurrentStyle_get_backgroundAttachment(This,p) (This)->lpVtbl->get_backgroundAttachment(This,p)
#define IHTMLCurrentStyle_get_marginTop(This,p) (This)->lpVtbl->get_marginTop(This,p)
#define IHTMLCurrentStyle_get_marginRight(This,p) (This)->lpVtbl->get_marginRight(This,p)
#define IHTMLCurrentStyle_get_marginBottom(This,p) (This)->lpVtbl->get_marginBottom(This,p)
#define IHTMLCurrentStyle_get_marginLeft(This,p) (This)->lpVtbl->get_marginLeft(This,p)
#define IHTMLCurrentStyle_get_clear(This,p) (This)->lpVtbl->get_clear(This,p)
#define IHTMLCurrentStyle_get_listStyleType(This,p) (This)->lpVtbl->get_listStyleType(This,p)
#define IHTMLCurrentStyle_get_listStylePosition(This,p) (This)->lpVtbl->get_listStylePosition(This,p)
#define IHTMLCurrentStyle_get_listStyleImage(This,p) (This)->lpVtbl->get_listStyleImage(This,p)
#define IHTMLCurrentStyle_get_clipTop(This,p) (This)->lpVtbl->get_clipTop(This,p)
#define IHTMLCurrentStyle_get_clipRight(This,p) (This)->lpVtbl->get_clipRight(This,p)
#define IHTMLCurrentStyle_get_clipBottom(This,p) (This)->lpVtbl->get_clipBottom(This,p)
#define IHTMLCurrentStyle_get_clipLeft(This,p) (This)->lpVtbl->get_clipLeft(This,p)
#define IHTMLCurrentStyle_get_overflow(This,p) (This)->lpVtbl->get_overflow(This,p)
#define IHTMLCurrentStyle_get_pageBreakBefore(This,p) (This)->lpVtbl->get_pageBreakBefore(This,p)
#define IHTMLCurrentStyle_get_pageBreakAfter(This,p) (This)->lpVtbl->get_pageBreakAfter(This,p)
#define IHTMLCurrentStyle_get_cursor(This,p) (This)->lpVtbl->get_cursor(This,p)
#define IHTMLCurrentStyle_get_tableLayout(This,p) (This)->lpVtbl->get_tableLayout(This,p)
#define IHTMLCurrentStyle_get_borderCollapse(This,p) (This)->lpVtbl->get_borderCollapse(This,p)
#define IHTMLCurrentStyle_get_direction(This,p) (This)->lpVtbl->get_direction(This,p)
#define IHTMLCurrentStyle_get_behavior(This,p) (This)->lpVtbl->get_behavior(This,p)
#define IHTMLCurrentStyle_getAttribute(This,strAttributeName,lFlags,AttributeValue) (This)->lpVtbl->getAttribute(This,strAttributeName,lFlags,AttributeValue)
#define IHTMLCurrentStyle_get_unicodeBidi(This,p) (This)->lpVtbl->get_unicodeBidi(This,p)
#define IHTMLCurrentStyle_get_right(This,p) (This)->lpVtbl->get_right(This,p)
#define IHTMLCurrentStyle_get_bottom(This,p) (This)->lpVtbl->get_bottom(This,p)
#define IHTMLCurrentStyle_get_imeMode(This,p) (This)->lpVtbl->get_imeMode(This,p)
#define IHTMLCurrentStyle_get_rubyAlign(This,p) (This)->lpVtbl->get_rubyAlign(This,p)
#define IHTMLCurrentStyle_get_rubyPosition(This,p) (This)->lpVtbl->get_rubyPosition(This,p)
#define IHTMLCurrentStyle_get_rubyOverhang(This,p) (This)->lpVtbl->get_rubyOverhang(This,p)
#define IHTMLCurrentStyle_get_textAutospace(This,p) (This)->lpVtbl->get_textAutospace(This,p)
#define IHTMLCurrentStyle_get_lineBreak(This,p) (This)->lpVtbl->get_lineBreak(This,p)
#define IHTMLCurrentStyle_get_wordBreak(This,p) (This)->lpVtbl->get_wordBreak(This,p)
#define IHTMLCurrentStyle_get_textJustify(This,p) (This)->lpVtbl->get_textJustify(This,p)
#define IHTMLCurrentStyle_get_textJustifyTrim(This,p) (This)->lpVtbl->get_textJustifyTrim(This,p)
#define IHTMLCurrentStyle_get_textKashida(This,p) (This)->lpVtbl->get_textKashida(This,p)
#define IHTMLCurrentStyle_get_blockDirection(This,p) (This)->lpVtbl->get_blockDirection(This,p)
#define IHTMLCurrentStyle_get_layoutGridChar(This,p) (This)->lpVtbl->get_layoutGridChar(This,p)
#define IHTMLCurrentStyle_get_layoutGridLine(This,p) (This)->lpVtbl->get_layoutGridLine(This,p)
#define IHTMLCurrentStyle_get_layoutGridMode(This,p) (This)->lpVtbl->get_layoutGridMode(This,p)
#define IHTMLCurrentStyle_get_layoutGridType(This,p) (This)->lpVtbl->get_layoutGridType(This,p)
#define IHTMLCurrentStyle_get_borderStyle(This,p) (This)->lpVtbl->get_borderStyle(This,p)
#define IHTMLCurrentStyle_get_borderColor(This,p) (This)->lpVtbl->get_borderColor(This,p)
#define IHTMLCurrentStyle_get_borderWidth(This,p) (This)->lpVtbl->get_borderWidth(This,p)
#define IHTMLCurrentStyle_get_padding(This,p) (This)->lpVtbl->get_padding(This,p)
#define IHTMLCurrentStyle_get_margin(This,p) (This)->lpVtbl->get_margin(This,p)
#define IHTMLCurrentStyle_get_accelerator(This,p) (This)->lpVtbl->get_accelerator(This,p)
#define IHTMLCurrentStyle_get_overflowX(This,p) (This)->lpVtbl->get_overflowX(This,p)
#define IHTMLCurrentStyle_get_overflowY(This,p) (This)->lpVtbl->get_overflowY(This,p)
#define IHTMLCurrentStyle_get_textTransform(This,p) (This)->lpVtbl->get_textTransform(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLCurrentStyle_get_position_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_position_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_styleFloat_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_styleFloat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_color_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontFamily_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontFamily_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontVariant_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontVariant_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontWeight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_fontSize_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundImage_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundPositionX_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundPositionX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundPositionY_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundPositionY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundRepeat_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundRepeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderLeftColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderLeftColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderTopColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderTopColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderRightColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderRightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderBottomColor_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderBottomColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderTopStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderTopStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderRightStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderRightStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderBottomStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderBottomStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderLeftStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderLeftStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderTopWidth_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderTopWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderRightWidth_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderRightWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderBottomWidth_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderBottomWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderLeftWidth_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderLeftWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_left_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_top_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_width_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_height_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_paddingLeft_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_paddingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_paddingTop_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_paddingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_paddingRight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_paddingRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_paddingBottom_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_paddingBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textAlign_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textDecoration_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textDecoration_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_display_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_display_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_visibility_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_zIndex_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_zIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_letterSpacing_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_letterSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_lineHeight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_lineHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textIndent_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textIndent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_verticalAlign_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_verticalAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_backgroundAttachment_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_backgroundAttachment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_marginTop_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_marginTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_marginRight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_marginRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_marginBottom_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_marginBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_marginLeft_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_marginLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clear_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_listStyleType_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_listStyleType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_listStylePosition_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_listStylePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_listStyleImage_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_listStyleImage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clipTop_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clipTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clipRight_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clipRight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clipBottom_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clipBottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_clipLeft_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_clipLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_overflow_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_overflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_pageBreakBefore_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_pageBreakBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_pageBreakAfter_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_pageBreakAfter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_cursor_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_cursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_tableLayout_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_tableLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderCollapse_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderCollapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_direction_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_behavior_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_getAttribute_Proxy(IHTMLCurrentStyle *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLCurrentStyle_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_unicodeBidi_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_unicodeBidi_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_right_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_bottom_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_imeMode_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_imeMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_rubyAlign_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_rubyAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_rubyPosition_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_rubyPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_rubyOverhang_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_rubyOverhang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textAutospace_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textAutospace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_lineBreak_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_lineBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_wordBreak_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_wordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textJustify_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textJustify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textJustifyTrim_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textJustifyTrim_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textKashida_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textKashida_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_blockDirection_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_blockDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_layoutGridChar_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_layoutGridChar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_layoutGridLine_Proxy(IHTMLCurrentStyle *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle_get_layoutGridLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_layoutGridMode_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_layoutGridMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_layoutGridType_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_layoutGridType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderStyle_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderColor_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_borderWidth_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_borderWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_padding_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_padding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_margin_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_margin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_accelerator_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_accelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_overflowX_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_overflowX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_overflowY_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_overflowY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle_get_textTransform_Proxy(IHTMLCurrentStyle *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle_get_textTransform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLCurrentStyle2_INTERFACE_DEFINED__
#define __IHTMLCurrentStyle2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCurrentStyle2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLCurrentStyle2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_layoutFlow(BSTR *p) = 0;
    virtual HRESULT WINAPI get_wordWrap(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textUnderlinePosition(BSTR *p) = 0;
    virtual HRESULT WINAPI get_hasLayout(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_scrollbarBaseColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarFaceColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbar3dLightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarHighlightColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarDarkShadowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarArrowColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_scrollbarTrackColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_writingMode(BSTR *p) = 0;
    virtual HRESULT WINAPI get_zoom(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_filter(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textAlignLast(BSTR *p) = 0;
    virtual HRESULT WINAPI get_textKashidaSpace(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_isBlock(VARIANT_BOOL *p) = 0;
  };
#else
  typedef struct IHTMLCurrentStyle2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLCurrentStyle2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLCurrentStyle2 *This);
      ULONG (WINAPI *Release)(IHTMLCurrentStyle2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLCurrentStyle2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLCurrentStyle2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLCurrentStyle2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLCurrentStyle2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_layoutFlow)(IHTMLCurrentStyle2 *This,BSTR *p);
      HRESULT (WINAPI *get_wordWrap)(IHTMLCurrentStyle2 *This,BSTR *p);
      HRESULT (WINAPI *get_textUnderlinePosition)(IHTMLCurrentStyle2 *This,BSTR *p);
      HRESULT (WINAPI *get_hasLayout)(IHTMLCurrentStyle2 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_scrollbarBaseColor)(IHTMLCurrentStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *get_scrollbarFaceColor)(IHTMLCurrentStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *get_scrollbar3dLightColor)(IHTMLCurrentStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *get_scrollbarShadowColor)(IHTMLCurrentStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *get_scrollbarHighlightColor)(IHTMLCurrentStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *get_scrollbarDarkShadowColor)(IHTMLCurrentStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *get_scrollbarArrowColor)(IHTMLCurrentStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *get_scrollbarTrackColor)(IHTMLCurrentStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *get_writingMode)(IHTMLCurrentStyle2 *This,BSTR *p);
      HRESULT (WINAPI *get_zoom)(IHTMLCurrentStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *get_filter)(IHTMLCurrentStyle2 *This,BSTR *p);
      HRESULT (WINAPI *get_textAlignLast)(IHTMLCurrentStyle2 *This,BSTR *p);
      HRESULT (WINAPI *get_textKashidaSpace)(IHTMLCurrentStyle2 *This,VARIANT *p);
      HRESULT (WINAPI *get_isBlock)(IHTMLCurrentStyle2 *This,VARIANT_BOOL *p);
    END_INTERFACE
  } IHTMLCurrentStyle2Vtbl;
  interface IHTMLCurrentStyle2 {
    CONST_VTBL struct IHTMLCurrentStyle2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLCurrentStyle2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLCurrentStyle2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLCurrentStyle2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLCurrentStyle2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLCurrentStyle2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLCurrentStyle2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLCurrentStyle2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLCurrentStyle2_get_layoutFlow(This,p) (This)->lpVtbl->get_layoutFlow(This,p)
#define IHTMLCurrentStyle2_get_wordWrap(This,p) (This)->lpVtbl->get_wordWrap(This,p)
#define IHTMLCurrentStyle2_get_textUnderlinePosition(This,p) (This)->lpVtbl->get_textUnderlinePosition(This,p)
#define IHTMLCurrentStyle2_get_hasLayout(This,p) (This)->lpVtbl->get_hasLayout(This,p)
#define IHTMLCurrentStyle2_get_scrollbarBaseColor(This,p) (This)->lpVtbl->get_scrollbarBaseColor(This,p)
#define IHTMLCurrentStyle2_get_scrollbarFaceColor(This,p) (This)->lpVtbl->get_scrollbarFaceColor(This,p)
#define IHTMLCurrentStyle2_get_scrollbar3dLightColor(This,p) (This)->lpVtbl->get_scrollbar3dLightColor(This,p)
#define IHTMLCurrentStyle2_get_scrollbarShadowColor(This,p) (This)->lpVtbl->get_scrollbarShadowColor(This,p)
#define IHTMLCurrentStyle2_get_scrollbarHighlightColor(This,p) (This)->lpVtbl->get_scrollbarHighlightColor(This,p)
#define IHTMLCurrentStyle2_get_scrollbarDarkShadowColor(This,p) (This)->lpVtbl->get_scrollbarDarkShadowColor(This,p)
#define IHTMLCurrentStyle2_get_scrollbarArrowColor(This,p) (This)->lpVtbl->get_scrollbarArrowColor(This,p)
#define IHTMLCurrentStyle2_get_scrollbarTrackColor(This,p) (This)->lpVtbl->get_scrollbarTrackColor(This,p)
#define IHTMLCurrentStyle2_get_writingMode(This,p) (This)->lpVtbl->get_writingMode(This,p)
#define IHTMLCurrentStyle2_get_zoom(This,p) (This)->lpVtbl->get_zoom(This,p)
#define IHTMLCurrentStyle2_get_filter(This,p) (This)->lpVtbl->get_filter(This,p)
#define IHTMLCurrentStyle2_get_textAlignLast(This,p) (This)->lpVtbl->get_textAlignLast(This,p)
#define IHTMLCurrentStyle2_get_textKashidaSpace(This,p) (This)->lpVtbl->get_textKashidaSpace(This,p)
#define IHTMLCurrentStyle2_get_isBlock(This,p) (This)->lpVtbl->get_isBlock(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLCurrentStyle2_get_layoutFlow_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_layoutFlow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_wordWrap_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_wordWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_textUnderlinePosition_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_textUnderlinePosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_hasLayout_Proxy(IHTMLCurrentStyle2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_hasLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarBaseColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarBaseColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarFaceColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarFaceColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbar3dLightColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbar3dLightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarShadowColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarHighlightColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarHighlightColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarDarkShadowColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarDarkShadowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarArrowColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarArrowColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_scrollbarTrackColor_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_scrollbarTrackColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_writingMode_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_writingMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_zoom_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_zoom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_filter_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_filter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_textAlignLast_Proxy(IHTMLCurrentStyle2 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_textAlignLast_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_textKashidaSpace_Proxy(IHTMLCurrentStyle2 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_textKashidaSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle2_get_isBlock_Proxy(IHTMLCurrentStyle2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLCurrentStyle2_get_isBlock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLCurrentStyle3_INTERFACE_DEFINED__
#define __IHTMLCurrentStyle3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCurrentStyle3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLCurrentStyle3 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_textOverflow(BSTR *p) = 0;
    virtual HRESULT WINAPI get_minHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_wordSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_whiteSpace(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLCurrentStyle3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLCurrentStyle3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLCurrentStyle3 *This);
      ULONG (WINAPI *Release)(IHTMLCurrentStyle3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLCurrentStyle3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLCurrentStyle3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLCurrentStyle3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLCurrentStyle3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_textOverflow)(IHTMLCurrentStyle3 *This,BSTR *p);
      HRESULT (WINAPI *get_minHeight)(IHTMLCurrentStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *get_wordSpacing)(IHTMLCurrentStyle3 *This,VARIANT *p);
      HRESULT (WINAPI *get_whiteSpace)(IHTMLCurrentStyle3 *This,BSTR *p);
    END_INTERFACE
  } IHTMLCurrentStyle3Vtbl;
  interface IHTMLCurrentStyle3 {
    CONST_VTBL struct IHTMLCurrentStyle3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLCurrentStyle3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLCurrentStyle3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLCurrentStyle3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLCurrentStyle3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLCurrentStyle3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLCurrentStyle3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLCurrentStyle3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLCurrentStyle3_get_textOverflow(This,p) (This)->lpVtbl->get_textOverflow(This,p)
#define IHTMLCurrentStyle3_get_minHeight(This,p) (This)->lpVtbl->get_minHeight(This,p)
#define IHTMLCurrentStyle3_get_wordSpacing(This,p) (This)->lpVtbl->get_wordSpacing(This,p)
#define IHTMLCurrentStyle3_get_whiteSpace(This,p) (This)->lpVtbl->get_whiteSpace(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLCurrentStyle3_get_textOverflow_Proxy(IHTMLCurrentStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle3_get_textOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle3_get_minHeight_Proxy(IHTMLCurrentStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle3_get_minHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle3_get_wordSpacing_Proxy(IHTMLCurrentStyle3 *This,VARIANT *p);
  void __RPC_STUB IHTMLCurrentStyle3_get_wordSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCurrentStyle3_get_whiteSpace_Proxy(IHTMLCurrentStyle3 *This,BSTR *p);
  void __RPC_STUB IHTMLCurrentStyle3_get_whiteSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLCurrentStyle_DISPINTERFACE_DEFINED__
#define __DispHTMLCurrentStyle_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLCurrentStyle;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLCurrentStyle : public IDispatch {
  };
#else
  typedef struct DispHTMLCurrentStyleVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLCurrentStyle *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLCurrentStyle *This);
      ULONG (WINAPI *Release)(DispHTMLCurrentStyle *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLCurrentStyle *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLCurrentStyle *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLCurrentStyle *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLCurrentStyle *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLCurrentStyleVtbl;
  interface DispHTMLCurrentStyle {
    CONST_VTBL struct DispHTMLCurrentStyleVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLCurrentStyle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLCurrentStyle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLCurrentStyle_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLCurrentStyle_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLCurrentStyle_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLCurrentStyle_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLCurrentStyle_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLCurrentStyle;
#ifdef __cplusplus
  class HTMLCurrentStyle;
#endif

#ifndef __IHTMLElement_INTERFACE_DEFINED__
#define __IHTMLElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLElement : public IDispatch {
  public:
    virtual HRESULT WINAPI setAttribute(BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags = 1) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI removeAttribute(BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI put_className(BSTR v) = 0;
    virtual HRESULT WINAPI get_className(BSTR *p) = 0;
    virtual HRESULT WINAPI put_id(BSTR v) = 0;
    virtual HRESULT WINAPI get_id(BSTR *p) = 0;
    virtual HRESULT WINAPI get_tagName(BSTR *p) = 0;
    virtual HRESULT WINAPI get_parentElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_style(IHTMLStyle **p) = 0;
    virtual HRESULT WINAPI put_onhelp(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onhelp(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onclick(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onclick(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondblclick(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondblclick(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeydown(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeydown(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeyup(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeyup(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeypress(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeypress(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseout(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseout(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseover(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseover(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmousemove(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousemove(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmousedown(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousedown(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseup(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseup(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_document(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_title(BSTR v) = 0;
    virtual HRESULT WINAPI get_title(BSTR *p) = 0;
    virtual HRESULT WINAPI put_language(BSTR v) = 0;
    virtual HRESULT WINAPI get_language(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onselectstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselectstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI scrollIntoView(VARIANT varargStart) = 0;
    virtual HRESULT WINAPI contains(IHTMLElement *pChild,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI get_sourceIndex(long *p) = 0;
    virtual HRESULT WINAPI get_recordNumber(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_lang(BSTR v) = 0;
    virtual HRESULT WINAPI get_lang(BSTR *p) = 0;
    virtual HRESULT WINAPI get_offsetLeft(long *p) = 0;
    virtual HRESULT WINAPI get_offsetTop(long *p) = 0;
    virtual HRESULT WINAPI get_offsetWidth(long *p) = 0;
    virtual HRESULT WINAPI get_offsetHeight(long *p) = 0;
    virtual HRESULT WINAPI get_offsetParent(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_innerHTML(BSTR v) = 0;
    virtual HRESULT WINAPI get_innerHTML(BSTR *p) = 0;
    virtual HRESULT WINAPI put_innerText(BSTR v) = 0;
    virtual HRESULT WINAPI get_innerText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_outerHTML(BSTR v) = 0;
    virtual HRESULT WINAPI get_outerHTML(BSTR *p) = 0;
    virtual HRESULT WINAPI put_outerText(BSTR v) = 0;
    virtual HRESULT WINAPI get_outerText(BSTR *p) = 0;
    virtual HRESULT WINAPI insertAdjacentHTML(BSTR where,BSTR html) = 0;
    virtual HRESULT WINAPI insertAdjacentText(BSTR where,BSTR text) = 0;
    virtual HRESULT WINAPI get_parentTextEdit(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_isTextEdit(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI click(void) = 0;
    virtual HRESULT WINAPI get_filters(IHTMLFiltersCollection **p) = 0;
    virtual HRESULT WINAPI put_ondragstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI put_onbeforeupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerrorupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerrorupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowexit(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowexit(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowenter(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowenter(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondatasetchanged(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondatasetchanged(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondataavailable(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondataavailable(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondatasetcomplete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondatasetcomplete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfilterchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfilterchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_children(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_all(IDispatch **p) = 0;
  };
#else
  typedef struct IHTMLElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLElement *This);
      ULONG (WINAPI *Release)(IHTMLElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *setAttribute)(IHTMLElement *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
      HRESULT (WINAPI *getAttribute)(IHTMLElement *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
      HRESULT (WINAPI *removeAttribute)(IHTMLElement *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
      HRESULT (WINAPI *put_className)(IHTMLElement *This,BSTR v);
      HRESULT (WINAPI *get_className)(IHTMLElement *This,BSTR *p);
      HRESULT (WINAPI *put_id)(IHTMLElement *This,BSTR v);
      HRESULT (WINAPI *get_id)(IHTMLElement *This,BSTR *p);
      HRESULT (WINAPI *get_tagName)(IHTMLElement *This,BSTR *p);
      HRESULT (WINAPI *get_parentElement)(IHTMLElement *This,IHTMLElement **p);
      HRESULT (WINAPI *get_style)(IHTMLElement *This,IHTMLStyle **p);
      HRESULT (WINAPI *put_onhelp)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onhelp)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onclick)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onclick)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_ondblclick)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_ondblclick)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onkeydown)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onkeydown)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onkeyup)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onkeyup)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onkeypress)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onkeypress)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onmouseout)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onmouseout)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onmouseover)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onmouseover)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onmousemove)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onmousemove)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onmousedown)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onmousedown)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onmouseup)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onmouseup)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *get_document)(IHTMLElement *This,IDispatch **p);
      HRESULT (WINAPI *put_title)(IHTMLElement *This,BSTR v);
      HRESULT (WINAPI *get_title)(IHTMLElement *This,BSTR *p);
      HRESULT (WINAPI *put_language)(IHTMLElement *This,BSTR v);
      HRESULT (WINAPI *get_language)(IHTMLElement *This,BSTR *p);
      HRESULT (WINAPI *put_onselectstart)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onselectstart)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *scrollIntoView)(IHTMLElement *This,VARIANT varargStart);
      HRESULT (WINAPI *contains)(IHTMLElement *This,IHTMLElement *pChild,VARIANT_BOOL *pfResult);
      HRESULT (WINAPI *get_sourceIndex)(IHTMLElement *This,long *p);
      HRESULT (WINAPI *get_recordNumber)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_lang)(IHTMLElement *This,BSTR v);
      HRESULT (WINAPI *get_lang)(IHTMLElement *This,BSTR *p);
      HRESULT (WINAPI *get_offsetLeft)(IHTMLElement *This,long *p);
      HRESULT (WINAPI *get_offsetTop)(IHTMLElement *This,long *p);
      HRESULT (WINAPI *get_offsetWidth)(IHTMLElement *This,long *p);
      HRESULT (WINAPI *get_offsetHeight)(IHTMLElement *This,long *p);
      HRESULT (WINAPI *get_offsetParent)(IHTMLElement *This,IHTMLElement **p);
      HRESULT (WINAPI *put_innerHTML)(IHTMLElement *This,BSTR v);
      HRESULT (WINAPI *get_innerHTML)(IHTMLElement *This,BSTR *p);
      HRESULT (WINAPI *put_innerText)(IHTMLElement *This,BSTR v);
      HRESULT (WINAPI *get_innerText)(IHTMLElement *This,BSTR *p);
      HRESULT (WINAPI *put_outerHTML)(IHTMLElement *This,BSTR v);
      HRESULT (WINAPI *get_outerHTML)(IHTMLElement *This,BSTR *p);
      HRESULT (WINAPI *put_outerText)(IHTMLElement *This,BSTR v);
      HRESULT (WINAPI *get_outerText)(IHTMLElement *This,BSTR *p);
      HRESULT (WINAPI *insertAdjacentHTML)(IHTMLElement *This,BSTR where,BSTR html);
      HRESULT (WINAPI *insertAdjacentText)(IHTMLElement *This,BSTR where,BSTR text);
      HRESULT (WINAPI *get_parentTextEdit)(IHTMLElement *This,IHTMLElement **p);
      HRESULT (WINAPI *get_isTextEdit)(IHTMLElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *click)(IHTMLElement *This);
      HRESULT (WINAPI *get_filters)(IHTMLElement *This,IHTMLFiltersCollection **p);
      HRESULT (WINAPI *put_ondragstart)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_ondragstart)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *toString)(IHTMLElement *This,BSTR *String);
      HRESULT (WINAPI *put_onbeforeupdate)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforeupdate)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onafterupdate)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onafterupdate)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onerrorupdate)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onerrorupdate)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onrowexit)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onrowexit)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onrowenter)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onrowenter)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_ondatasetchanged)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_ondatasetchanged)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_ondataavailable)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_ondataavailable)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_ondatasetcomplete)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_ondatasetcomplete)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onfilterchange)(IHTMLElement *This,VARIANT v);
      HRESULT (WINAPI *get_onfilterchange)(IHTMLElement *This,VARIANT *p);
      HRESULT (WINAPI *get_children)(IHTMLElement *This,IDispatch **p);
      HRESULT (WINAPI *get_all)(IHTMLElement *This,IDispatch **p);
    END_INTERFACE
  } IHTMLElementVtbl;
  interface IHTMLElement {
    CONST_VTBL struct IHTMLElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLElement_setAttribute(This,strAttributeName,AttributeValue,lFlags) (This)->lpVtbl->setAttribute(This,strAttributeName,AttributeValue,lFlags)
#define IHTMLElement_getAttribute(This,strAttributeName,lFlags,AttributeValue) (This)->lpVtbl->getAttribute(This,strAttributeName,lFlags,AttributeValue)
#define IHTMLElement_removeAttribute(This,strAttributeName,lFlags,pfSuccess) (This)->lpVtbl->removeAttribute(This,strAttributeName,lFlags,pfSuccess)
#define IHTMLElement_put_className(This,v) (This)->lpVtbl->put_className(This,v)
#define IHTMLElement_get_className(This,p) (This)->lpVtbl->get_className(This,p)
#define IHTMLElement_put_id(This,v) (This)->lpVtbl->put_id(This,v)
#define IHTMLElement_get_id(This,p) (This)->lpVtbl->get_id(This,p)
#define IHTMLElement_get_tagName(This,p) (This)->lpVtbl->get_tagName(This,p)
#define IHTMLElement_get_parentElement(This,p) (This)->lpVtbl->get_parentElement(This,p)
#define IHTMLElement_get_style(This,p) (This)->lpVtbl->get_style(This,p)
#define IHTMLElement_put_onhelp(This,v) (This)->lpVtbl->put_onhelp(This,v)
#define IHTMLElement_get_onhelp(This,p) (This)->lpVtbl->get_onhelp(This,p)
#define IHTMLElement_put_onclick(This,v) (This)->lpVtbl->put_onclick(This,v)
#define IHTMLElement_get_onclick(This,p) (This)->lpVtbl->get_onclick(This,p)
#define IHTMLElement_put_ondblclick(This,v) (This)->lpVtbl->put_ondblclick(This,v)
#define IHTMLElement_get_ondblclick(This,p) (This)->lpVtbl->get_ondblclick(This,p)
#define IHTMLElement_put_onkeydown(This,v) (This)->lpVtbl->put_onkeydown(This,v)
#define IHTMLElement_get_onkeydown(This,p) (This)->lpVtbl->get_onkeydown(This,p)
#define IHTMLElement_put_onkeyup(This,v) (This)->lpVtbl->put_onkeyup(This,v)
#define IHTMLElement_get_onkeyup(This,p) (This)->lpVtbl->get_onkeyup(This,p)
#define IHTMLElement_put_onkeypress(This,v) (This)->lpVtbl->put_onkeypress(This,v)
#define IHTMLElement_get_onkeypress(This,p) (This)->lpVtbl->get_onkeypress(This,p)
#define IHTMLElement_put_onmouseout(This,v) (This)->lpVtbl->put_onmouseout(This,v)
#define IHTMLElement_get_onmouseout(This,p) (This)->lpVtbl->get_onmouseout(This,p)
#define IHTMLElement_put_onmouseover(This,v) (This)->lpVtbl->put_onmouseover(This,v)
#define IHTMLElement_get_onmouseover(This,p) (This)->lpVtbl->get_onmouseover(This,p)
#define IHTMLElement_put_onmousemove(This,v) (This)->lpVtbl->put_onmousemove(This,v)
#define IHTMLElement_get_onmousemove(This,p) (This)->lpVtbl->get_onmousemove(This,p)
#define IHTMLElement_put_onmousedown(This,v) (This)->lpVtbl->put_onmousedown(This,v)
#define IHTMLElement_get_onmousedown(This,p) (This)->lpVtbl->get_onmousedown(This,p)
#define IHTMLElement_put_onmouseup(This,v) (This)->lpVtbl->put_onmouseup(This,v)
#define IHTMLElement_get_onmouseup(This,p) (This)->lpVtbl->get_onmouseup(This,p)
#define IHTMLElement_get_document(This,p) (This)->lpVtbl->get_document(This,p)
#define IHTMLElement_put_title(This,v) (This)->lpVtbl->put_title(This,v)
#define IHTMLElement_get_title(This,p) (This)->lpVtbl->get_title(This,p)
#define IHTMLElement_put_language(This,v) (This)->lpVtbl->put_language(This,v)
#define IHTMLElement_get_language(This,p) (This)->lpVtbl->get_language(This,p)
#define IHTMLElement_put_onselectstart(This,v) (This)->lpVtbl->put_onselectstart(This,v)
#define IHTMLElement_get_onselectstart(This,p) (This)->lpVtbl->get_onselectstart(This,p)
#define IHTMLElement_scrollIntoView(This,varargStart) (This)->lpVtbl->scrollIntoView(This,varargStart)
#define IHTMLElement_contains(This,pChild,pfResult) (This)->lpVtbl->contains(This,pChild,pfResult)
#define IHTMLElement_get_sourceIndex(This,p) (This)->lpVtbl->get_sourceIndex(This,p)
#define IHTMLElement_get_recordNumber(This,p) (This)->lpVtbl->get_recordNumber(This,p)
#define IHTMLElement_put_lang(This,v) (This)->lpVtbl->put_lang(This,v)
#define IHTMLElement_get_lang(This,p) (This)->lpVtbl->get_lang(This,p)
#define IHTMLElement_get_offsetLeft(This,p) (This)->lpVtbl->get_offsetLeft(This,p)
#define IHTMLElement_get_offsetTop(This,p) (This)->lpVtbl->get_offsetTop(This,p)
#define IHTMLElement_get_offsetWidth(This,p) (This)->lpVtbl->get_offsetWidth(This,p)
#define IHTMLElement_get_offsetHeight(This,p) (This)->lpVtbl->get_offsetHeight(This,p)
#define IHTMLElement_get_offsetParent(This,p) (This)->lpVtbl->get_offsetParent(This,p)
#define IHTMLElement_put_innerHTML(This,v) (This)->lpVtbl->put_innerHTML(This,v)
#define IHTMLElement_get_innerHTML(This,p) (This)->lpVtbl->get_innerHTML(This,p)
#define IHTMLElement_put_innerText(This,v) (This)->lpVtbl->put_innerText(This,v)
#define IHTMLElement_get_innerText(This,p) (This)->lpVtbl->get_innerText(This,p)
#define IHTMLElement_put_outerHTML(This,v) (This)->lpVtbl->put_outerHTML(This,v)
#define IHTMLElement_get_outerHTML(This,p) (This)->lpVtbl->get_outerHTML(This,p)
#define IHTMLElement_put_outerText(This,v) (This)->lpVtbl->put_outerText(This,v)
#define IHTMLElement_get_outerText(This,p) (This)->lpVtbl->get_outerText(This,p)
#define IHTMLElement_insertAdjacentHTML(This,where,html) (This)->lpVtbl->insertAdjacentHTML(This,where,html)
#define IHTMLElement_insertAdjacentText(This,where,text) (This)->lpVtbl->insertAdjacentText(This,where,text)
#define IHTMLElement_get_parentTextEdit(This,p) (This)->lpVtbl->get_parentTextEdit(This,p)
#define IHTMLElement_get_isTextEdit(This,p) (This)->lpVtbl->get_isTextEdit(This,p)
#define IHTMLElement_click(This) (This)->lpVtbl->click(This)
#define IHTMLElement_get_filters(This,p) (This)->lpVtbl->get_filters(This,p)
#define IHTMLElement_put_ondragstart(This,v) (This)->lpVtbl->put_ondragstart(This,v)
#define IHTMLElement_get_ondragstart(This,p) (This)->lpVtbl->get_ondragstart(This,p)
#define IHTMLElement_toString(This,String) (This)->lpVtbl->toString(This,String)
#define IHTMLElement_put_onbeforeupdate(This,v) (This)->lpVtbl->put_onbeforeupdate(This,v)
#define IHTMLElement_get_onbeforeupdate(This,p) (This)->lpVtbl->get_onbeforeupdate(This,p)
#define IHTMLElement_put_onafterupdate(This,v) (This)->lpVtbl->put_onafterupdate(This,v)
#define IHTMLElement_get_onafterupdate(This,p) (This)->lpVtbl->get_onafterupdate(This,p)
#define IHTMLElement_put_onerrorupdate(This,v) (This)->lpVtbl->put_onerrorupdate(This,v)
#define IHTMLElement_get_onerrorupdate(This,p) (This)->lpVtbl->get_onerrorupdate(This,p)
#define IHTMLElement_put_onrowexit(This,v) (This)->lpVtbl->put_onrowexit(This,v)
#define IHTMLElement_get_onrowexit(This,p) (This)->lpVtbl->get_onrowexit(This,p)
#define IHTMLElement_put_onrowenter(This,v) (This)->lpVtbl->put_onrowenter(This,v)
#define IHTMLElement_get_onrowenter(This,p) (This)->lpVtbl->get_onrowenter(This,p)
#define IHTMLElement_put_ondatasetchanged(This,v) (This)->lpVtbl->put_ondatasetchanged(This,v)
#define IHTMLElement_get_ondatasetchanged(This,p) (This)->lpVtbl->get_ondatasetchanged(This,p)
#define IHTMLElement_put_ondataavailable(This,v) (This)->lpVtbl->put_ondataavailable(This,v)
#define IHTMLElement_get_ondataavailable(This,p) (This)->lpVtbl->get_ondataavailable(This,p)
#define IHTMLElement_put_ondatasetcomplete(This,v) (This)->lpVtbl->put_ondatasetcomplete(This,v)
#define IHTMLElement_get_ondatasetcomplete(This,p) (This)->lpVtbl->get_ondatasetcomplete(This,p)
#define IHTMLElement_put_onfilterchange(This,v) (This)->lpVtbl->put_onfilterchange(This,v)
#define IHTMLElement_get_onfilterchange(This,p) (This)->lpVtbl->get_onfilterchange(This,p)
#define IHTMLElement_get_children(This,p) (This)->lpVtbl->get_children(This,p)
#define IHTMLElement_get_all(This,p) (This)->lpVtbl->get_all(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLElement_setAttribute_Proxy(IHTMLElement *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
  void __RPC_STUB IHTMLElement_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_getAttribute_Proxy(IHTMLElement *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLElement_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_removeAttribute_Proxy(IHTMLElement *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLElement_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_className_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_className_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_className_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_className_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_id_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_id_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_tagName_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_tagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_parentElement_Proxy(IHTMLElement *This,IHTMLElement **p);
  void __RPC_STUB IHTMLElement_get_parentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_style_Proxy(IHTMLElement *This,IHTMLStyle **p);
  void __RPC_STUB IHTMLElement_get_style_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onhelp_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onhelp_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onclick_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onclick_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondblclick_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondblclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondblclick_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondblclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onkeydown_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onkeydown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onkeydown_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onkeydown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onkeyup_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onkeyup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onkeyup_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onkeyup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onkeypress_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onkeypress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onkeypress_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onkeypress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmouseout_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmouseout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmouseout_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmouseout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmouseover_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmouseover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmouseover_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmouseover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmousemove_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmousemove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmousemove_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmousemove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmousedown_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmousedown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmousedown_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmousedown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onmouseup_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onmouseup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onmouseup_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onmouseup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_document_Proxy(IHTMLElement *This,IDispatch **p);
  void __RPC_STUB IHTMLElement_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_title_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_title_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_language_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_language_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_language_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_language_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onselectstart_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onselectstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onselectstart_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onselectstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_scrollIntoView_Proxy(IHTMLElement *This,VARIANT varargStart);
  void __RPC_STUB IHTMLElement_scrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_contains_Proxy(IHTMLElement *This,IHTMLElement *pChild,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLElement_contains_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_sourceIndex_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_sourceIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_recordNumber_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_recordNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_lang_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_lang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_lang_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_lang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetLeft_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_offsetLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetTop_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_offsetTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetWidth_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_offsetWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetHeight_Proxy(IHTMLElement *This,long *p);
  void __RPC_STUB IHTMLElement_get_offsetHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_offsetParent_Proxy(IHTMLElement *This,IHTMLElement **p);
  void __RPC_STUB IHTMLElement_get_offsetParent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_innerHTML_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_innerHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_innerHTML_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_innerHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_innerText_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_innerText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_innerText_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_innerText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_outerHTML_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_outerHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_outerHTML_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_outerHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_outerText_Proxy(IHTMLElement *This,BSTR v);
  void __RPC_STUB IHTMLElement_put_outerText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_outerText_Proxy(IHTMLElement *This,BSTR *p);
  void __RPC_STUB IHTMLElement_get_outerText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_insertAdjacentHTML_Proxy(IHTMLElement *This,BSTR where,BSTR html);
  void __RPC_STUB IHTMLElement_insertAdjacentHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_insertAdjacentText_Proxy(IHTMLElement *This,BSTR where,BSTR text);
  void __RPC_STUB IHTMLElement_insertAdjacentText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_parentTextEdit_Proxy(IHTMLElement *This,IHTMLElement **p);
  void __RPC_STUB IHTMLElement_get_parentTextEdit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_isTextEdit_Proxy(IHTMLElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement_get_isTextEdit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_click_Proxy(IHTMLElement *This);
  void __RPC_STUB IHTMLElement_click_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_filters_Proxy(IHTMLElement *This,IHTMLFiltersCollection **p);
  void __RPC_STUB IHTMLElement_get_filters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondragstart_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondragstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondragstart_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondragstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_toString_Proxy(IHTMLElement *This,BSTR *String);
  void __RPC_STUB IHTMLElement_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onbeforeupdate_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onbeforeupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onbeforeupdate_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onbeforeupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onafterupdate_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onafterupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onafterupdate_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onafterupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onerrorupdate_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onerrorupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onerrorupdate_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onerrorupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onrowexit_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onrowexit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onrowexit_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onrowexit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onrowenter_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onrowenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onrowenter_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onrowenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondatasetchanged_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondatasetchanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondatasetchanged_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondatasetchanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondataavailable_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondataavailable_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_ondatasetcomplete_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_ondatasetcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_ondatasetcomplete_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_ondatasetcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_put_onfilterchange_Proxy(IHTMLElement *This,VARIANT v);
  void __RPC_STUB IHTMLElement_put_onfilterchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_onfilterchange_Proxy(IHTMLElement *This,VARIANT *p);
  void __RPC_STUB IHTMLElement_get_onfilterchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_children_Proxy(IHTMLElement *This,IDispatch **p);
  void __RPC_STUB IHTMLElement_get_children_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement_get_all_Proxy(IHTMLElement *This,IDispatch **p);
  void __RPC_STUB IHTMLElement_get_all_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRect_INTERFACE_DEFINED__
#define __IHTMLRect_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRect;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLRect : public IDispatch {
  public:
    virtual HRESULT WINAPI put_left(long v) = 0;
    virtual HRESULT WINAPI get_left(long *p) = 0;
    virtual HRESULT WINAPI put_top(long v) = 0;
    virtual HRESULT WINAPI get_top(long *p) = 0;
    virtual HRESULT WINAPI put_right(long v) = 0;
    virtual HRESULT WINAPI get_right(long *p) = 0;
    virtual HRESULT WINAPI put_bottom(long v) = 0;
    virtual HRESULT WINAPI get_bottom(long *p) = 0;
  };
#else
  typedef struct IHTMLRectVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLRect *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLRect *This);
      ULONG (WINAPI *Release)(IHTMLRect *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLRect *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLRect *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLRect *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLRect *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_left)(IHTMLRect *This,long v);
      HRESULT (WINAPI *get_left)(IHTMLRect *This,long *p);
      HRESULT (WINAPI *put_top)(IHTMLRect *This,long v);
      HRESULT (WINAPI *get_top)(IHTMLRect *This,long *p);
      HRESULT (WINAPI *put_right)(IHTMLRect *This,long v);
      HRESULT (WINAPI *get_right)(IHTMLRect *This,long *p);
      HRESULT (WINAPI *put_bottom)(IHTMLRect *This,long v);
      HRESULT (WINAPI *get_bottom)(IHTMLRect *This,long *p);
    END_INTERFACE
  } IHTMLRectVtbl;
  interface IHTMLRect {
    CONST_VTBL struct IHTMLRectVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLRect_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLRect_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLRect_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLRect_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLRect_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLRect_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLRect_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLRect_put_left(This,v) (This)->lpVtbl->put_left(This,v)
#define IHTMLRect_get_left(This,p) (This)->lpVtbl->get_left(This,p)
#define IHTMLRect_put_top(This,v) (This)->lpVtbl->put_top(This,v)
#define IHTMLRect_get_top(This,p) (This)->lpVtbl->get_top(This,p)
#define IHTMLRect_put_right(This,v) (This)->lpVtbl->put_right(This,v)
#define IHTMLRect_get_right(This,p) (This)->lpVtbl->get_right(This,p)
#define IHTMLRect_put_bottom(This,v) (This)->lpVtbl->put_bottom(This,v)
#define IHTMLRect_get_bottom(This,p) (This)->lpVtbl->get_bottom(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLRect_put_left_Proxy(IHTMLRect *This,long v);
  void __RPC_STUB IHTMLRect_put_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_get_left_Proxy(IHTMLRect *This,long *p);
  void __RPC_STUB IHTMLRect_get_left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_put_top_Proxy(IHTMLRect *This,long v);
  void __RPC_STUB IHTMLRect_put_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_get_top_Proxy(IHTMLRect *This,long *p);
  void __RPC_STUB IHTMLRect_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_put_right_Proxy(IHTMLRect *This,long v);
  void __RPC_STUB IHTMLRect_put_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_get_right_Proxy(IHTMLRect *This,long *p);
  void __RPC_STUB IHTMLRect_get_right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_put_bottom_Proxy(IHTMLRect *This,long v);
  void __RPC_STUB IHTMLRect_put_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRect_get_bottom_Proxy(IHTMLRect *This,long *p);
  void __RPC_STUB IHTMLRect_get_bottom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLRectCollection_INTERFACE_DEFINED__
#define __IHTMLRectCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLRectCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLRectCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
  };
#else
  typedef struct IHTMLRectCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLRectCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLRectCollection *This);
      ULONG (WINAPI *Release)(IHTMLRectCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLRectCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLRectCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLRectCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLRectCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLRectCollection *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLRectCollection *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLRectCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
    END_INTERFACE
  } IHTMLRectCollectionVtbl;
  interface IHTMLRectCollection {
    CONST_VTBL struct IHTMLRectCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLRectCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLRectCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLRectCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLRectCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLRectCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLRectCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLRectCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLRectCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLRectCollection_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLRectCollection_item(This,pvarIndex,pvarResult) (This)->lpVtbl->item(This,pvarIndex,pvarResult)
#endif
#endif
  HRESULT WINAPI IHTMLRectCollection_get_length_Proxy(IHTMLRectCollection *This,long *p);
  void __RPC_STUB IHTMLRectCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRectCollection_get__newEnum_Proxy(IHTMLRectCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLRectCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLRectCollection_item_Proxy(IHTMLRectCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLRectCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMNode_INTERFACE_DEFINED__
#define __IHTMLDOMNode_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMNode;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDOMNode : public IDispatch {
  public:
    virtual HRESULT WINAPI get_nodeType(long *p) = 0;
    virtual HRESULT WINAPI get_parentNode(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI hasChildNodes(VARIANT_BOOL *fChildren) = 0;
    virtual HRESULT WINAPI get_childNodes(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_attributes(IDispatch **p) = 0;
    virtual HRESULT WINAPI insertBefore(IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI removeChild(IHTMLDOMNode *oldChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI replaceChild(IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI cloneNode(VARIANT_BOOL fDeep,IHTMLDOMNode **clonedNode) = 0;
    virtual HRESULT WINAPI removeNode(VARIANT_BOOL fDeep,IHTMLDOMNode **removed) = 0;
    virtual HRESULT WINAPI swapNode(IHTMLDOMNode *otherNode,IHTMLDOMNode **swappedNode) = 0;
    virtual HRESULT WINAPI replaceNode(IHTMLDOMNode *replacement,IHTMLDOMNode **replaced) = 0;
    virtual HRESULT WINAPI appendChild(IHTMLDOMNode *newChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI get_nodeName(BSTR *p) = 0;
    virtual HRESULT WINAPI put_nodeValue(VARIANT v) = 0;
    virtual HRESULT WINAPI get_nodeValue(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_firstChild(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_lastChild(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_previousSibling(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_nextSibling(IHTMLDOMNode **p) = 0;
  };
#else
  typedef struct IHTMLDOMNodeVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDOMNode *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDOMNode *This);
      ULONG (WINAPI *Release)(IHTMLDOMNode *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDOMNode *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDOMNode *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDOMNode *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDOMNode *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_nodeType)(IHTMLDOMNode *This,long *p);
      HRESULT (WINAPI *get_parentNode)(IHTMLDOMNode *This,IHTMLDOMNode **p);
      HRESULT (WINAPI *hasChildNodes)(IHTMLDOMNode *This,VARIANT_BOOL *fChildren);
      HRESULT (WINAPI *get_childNodes)(IHTMLDOMNode *This,IDispatch **p);
      HRESULT (WINAPI *get_attributes)(IHTMLDOMNode *This,IDispatch **p);
      HRESULT (WINAPI *insertBefore)(IHTMLDOMNode *This,IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node);
      HRESULT (WINAPI *removeChild)(IHTMLDOMNode *This,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
      HRESULT (WINAPI *replaceChild)(IHTMLDOMNode *This,IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
      HRESULT (WINAPI *cloneNode)(IHTMLDOMNode *This,VARIANT_BOOL fDeep,IHTMLDOMNode **clonedNode);
      HRESULT (WINAPI *removeNode)(IHTMLDOMNode *This,VARIANT_BOOL fDeep,IHTMLDOMNode **removed);
      HRESULT (WINAPI *swapNode)(IHTMLDOMNode *This,IHTMLDOMNode *otherNode,IHTMLDOMNode **swappedNode);
      HRESULT (WINAPI *replaceNode)(IHTMLDOMNode *This,IHTMLDOMNode *replacement,IHTMLDOMNode **replaced);
      HRESULT (WINAPI *appendChild)(IHTMLDOMNode *This,IHTMLDOMNode *newChild,IHTMLDOMNode **node);
      HRESULT (WINAPI *get_nodeName)(IHTMLDOMNode *This,BSTR *p);
      HRESULT (WINAPI *put_nodeValue)(IHTMLDOMNode *This,VARIANT v);
      HRESULT (WINAPI *get_nodeValue)(IHTMLDOMNode *This,VARIANT *p);
      HRESULT (WINAPI *get_firstChild)(IHTMLDOMNode *This,IHTMLDOMNode **p);
      HRESULT (WINAPI *get_lastChild)(IHTMLDOMNode *This,IHTMLDOMNode **p);
      HRESULT (WINAPI *get_previousSibling)(IHTMLDOMNode *This,IHTMLDOMNode **p);
      HRESULT (WINAPI *get_nextSibling)(IHTMLDOMNode *This,IHTMLDOMNode **p);
    END_INTERFACE
  } IHTMLDOMNodeVtbl;
  interface IHTMLDOMNode {
    CONST_VTBL struct IHTMLDOMNodeVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDOMNode_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDOMNode_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDOMNode_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDOMNode_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDOMNode_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDOMNode_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDOMNode_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDOMNode_get_nodeType(This,p) (This)->lpVtbl->get_nodeType(This,p)
#define IHTMLDOMNode_get_parentNode(This,p) (This)->lpVtbl->get_parentNode(This,p)
#define IHTMLDOMNode_hasChildNodes(This,fChildren) (This)->lpVtbl->hasChildNodes(This,fChildren)
#define IHTMLDOMNode_get_childNodes(This,p) (This)->lpVtbl->get_childNodes(This,p)
#define IHTMLDOMNode_get_attributes(This,p) (This)->lpVtbl->get_attributes(This,p)
#define IHTMLDOMNode_insertBefore(This,newChild,refChild,node) (This)->lpVtbl->insertBefore(This,newChild,refChild,node)
#define IHTMLDOMNode_removeChild(This,oldChild,node) (This)->lpVtbl->removeChild(This,oldChild,node)
#define IHTMLDOMNode_replaceChild(This,newChild,oldChild,node) (This)->lpVtbl->replaceChild(This,newChild,oldChild,node)
#define IHTMLDOMNode_cloneNode(This,fDeep,clonedNode) (This)->lpVtbl->cloneNode(This,fDeep,clonedNode)
#define IHTMLDOMNode_removeNode(This,fDeep,removed) (This)->lpVtbl->removeNode(This,fDeep,removed)
#define IHTMLDOMNode_swapNode(This,otherNode,swappedNode) (This)->lpVtbl->swapNode(This,otherNode,swappedNode)
#define IHTMLDOMNode_replaceNode(This,replacement,replaced) (This)->lpVtbl->replaceNode(This,replacement,replaced)
#define IHTMLDOMNode_appendChild(This,newChild,node) (This)->lpVtbl->appendChild(This,newChild,node)
#define IHTMLDOMNode_get_nodeName(This,p) (This)->lpVtbl->get_nodeName(This,p)
#define IHTMLDOMNode_put_nodeValue(This,v) (This)->lpVtbl->put_nodeValue(This,v)
#define IHTMLDOMNode_get_nodeValue(This,p) (This)->lpVtbl->get_nodeValue(This,p)
#define IHTMLDOMNode_get_firstChild(This,p) (This)->lpVtbl->get_firstChild(This,p)
#define IHTMLDOMNode_get_lastChild(This,p) (This)->lpVtbl->get_lastChild(This,p)
#define IHTMLDOMNode_get_previousSibling(This,p) (This)->lpVtbl->get_previousSibling(This,p)
#define IHTMLDOMNode_get_nextSibling(This,p) (This)->lpVtbl->get_nextSibling(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLDOMNode_get_nodeType_Proxy(IHTMLDOMNode *This,long *p);
  void __RPC_STUB IHTMLDOMNode_get_nodeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_parentNode_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_parentNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_hasChildNodes_Proxy(IHTMLDOMNode *This,VARIANT_BOOL *fChildren);
  void __RPC_STUB IHTMLDOMNode_hasChildNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_childNodes_Proxy(IHTMLDOMNode *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMNode_get_childNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_attributes_Proxy(IHTMLDOMNode *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMNode_get_attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_insertBefore_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMNode_insertBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_removeChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMNode_removeChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_replaceChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMNode_replaceChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_cloneNode_Proxy(IHTMLDOMNode *This,VARIANT_BOOL fDeep,IHTMLDOMNode **clonedNode);
  void __RPC_STUB IHTMLDOMNode_cloneNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_removeNode_Proxy(IHTMLDOMNode *This,VARIANT_BOOL fDeep,IHTMLDOMNode **removed);
  void __RPC_STUB IHTMLDOMNode_removeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_swapNode_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *otherNode,IHTMLDOMNode **swappedNode);
  void __RPC_STUB IHTMLDOMNode_swapNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_replaceNode_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *replacement,IHTMLDOMNode **replaced);
  void __RPC_STUB IHTMLDOMNode_replaceNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_appendChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode *newChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMNode_appendChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_nodeName_Proxy(IHTMLDOMNode *This,BSTR *p);
  void __RPC_STUB IHTMLDOMNode_get_nodeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_put_nodeValue_Proxy(IHTMLDOMNode *This,VARIANT v);
  void __RPC_STUB IHTMLDOMNode_put_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_nodeValue_Proxy(IHTMLDOMNode *This,VARIANT *p);
  void __RPC_STUB IHTMLDOMNode_get_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_firstChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_firstChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_lastChild_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_lastChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_previousSibling_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_previousSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMNode_get_nextSibling_Proxy(IHTMLDOMNode *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMNode_get_nextSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMNode2_INTERFACE_DEFINED__
#define __IHTMLDOMNode2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMNode2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDOMNode2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_ownerDocument(IDispatch **p) = 0;
  };
#else
  typedef struct IHTMLDOMNode2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDOMNode2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDOMNode2 *This);
      ULONG (WINAPI *Release)(IHTMLDOMNode2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDOMNode2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDOMNode2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDOMNode2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDOMNode2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_ownerDocument)(IHTMLDOMNode2 *This,IDispatch **p);
    END_INTERFACE
  } IHTMLDOMNode2Vtbl;
  interface IHTMLDOMNode2 {
    CONST_VTBL struct IHTMLDOMNode2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDOMNode2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDOMNode2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDOMNode2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDOMNode2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDOMNode2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDOMNode2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDOMNode2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDOMNode2_get_ownerDocument(This,p) (This)->lpVtbl->get_ownerDocument(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLDOMNode2_get_ownerDocument_Proxy(IHTMLDOMNode2 *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMNode2_get_ownerDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMAttribute_INTERFACE_DEFINED__
#define __IHTMLDOMAttribute_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMAttribute;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDOMAttribute : public IDispatch {
  public:
    virtual HRESULT WINAPI get_nodeName(BSTR *p) = 0;
    virtual HRESULT WINAPI put_nodeValue(VARIANT v) = 0;
    virtual HRESULT WINAPI get_nodeValue(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_specified(VARIANT_BOOL *p) = 0;
  };
#else
  typedef struct IHTMLDOMAttributeVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDOMAttribute *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDOMAttribute *This);
      ULONG (WINAPI *Release)(IHTMLDOMAttribute *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDOMAttribute *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDOMAttribute *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDOMAttribute *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDOMAttribute *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_nodeName)(IHTMLDOMAttribute *This,BSTR *p);
      HRESULT (WINAPI *put_nodeValue)(IHTMLDOMAttribute *This,VARIANT v);
      HRESULT (WINAPI *get_nodeValue)(IHTMLDOMAttribute *This,VARIANT *p);
      HRESULT (WINAPI *get_specified)(IHTMLDOMAttribute *This,VARIANT_BOOL *p);
    END_INTERFACE
  } IHTMLDOMAttributeVtbl;
  interface IHTMLDOMAttribute {
    CONST_VTBL struct IHTMLDOMAttributeVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDOMAttribute_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDOMAttribute_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDOMAttribute_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDOMAttribute_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDOMAttribute_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDOMAttribute_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDOMAttribute_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDOMAttribute_get_nodeName(This,p) (This)->lpVtbl->get_nodeName(This,p)
#define IHTMLDOMAttribute_put_nodeValue(This,v) (This)->lpVtbl->put_nodeValue(This,v)
#define IHTMLDOMAttribute_get_nodeValue(This,p) (This)->lpVtbl->get_nodeValue(This,p)
#define IHTMLDOMAttribute_get_specified(This,p) (This)->lpVtbl->get_specified(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLDOMAttribute_get_nodeName_Proxy(IHTMLDOMAttribute *This,BSTR *p);
  void __RPC_STUB IHTMLDOMAttribute_get_nodeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute_put_nodeValue_Proxy(IHTMLDOMAttribute *This,VARIANT v);
  void __RPC_STUB IHTMLDOMAttribute_put_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute_get_nodeValue_Proxy(IHTMLDOMAttribute *This,VARIANT *p);
  void __RPC_STUB IHTMLDOMAttribute_get_nodeValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute_get_specified_Proxy(IHTMLDOMAttribute *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDOMAttribute_get_specified_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMAttribute2_INTERFACE_DEFINED__
#define __IHTMLDOMAttribute2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMAttribute2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDOMAttribute2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI get_expando(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_nodeType(long *p) = 0;
    virtual HRESULT WINAPI get_parentNode(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_childNodes(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_firstChild(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_lastChild(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_previousSibling(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_nextSibling(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_attributes(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_ownerDocument(IDispatch **p) = 0;
    virtual HRESULT WINAPI insertBefore(IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI replaceChild(IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI removeChild(IHTMLDOMNode *oldChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI appendChild(IHTMLDOMNode *newChild,IHTMLDOMNode **node) = 0;
    virtual HRESULT WINAPI hasChildNodes(VARIANT_BOOL *fChildren) = 0;
    virtual HRESULT WINAPI cloneNode(VARIANT_BOOL fDeep,IHTMLDOMAttribute **clonedNode) = 0;
  };
#else
  typedef struct IHTMLDOMAttribute2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDOMAttribute2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDOMAttribute2 *This);
      ULONG (WINAPI *Release)(IHTMLDOMAttribute2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDOMAttribute2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDOMAttribute2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDOMAttribute2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDOMAttribute2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_name)(IHTMLDOMAttribute2 *This,BSTR *p);
      HRESULT (WINAPI *put_value)(IHTMLDOMAttribute2 *This,BSTR v);
      HRESULT (WINAPI *get_value)(IHTMLDOMAttribute2 *This,BSTR *p);
      HRESULT (WINAPI *get_expando)(IHTMLDOMAttribute2 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_nodeType)(IHTMLDOMAttribute2 *This,long *p);
      HRESULT (WINAPI *get_parentNode)(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
      HRESULT (WINAPI *get_childNodes)(IHTMLDOMAttribute2 *This,IDispatch **p);
      HRESULT (WINAPI *get_firstChild)(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
      HRESULT (WINAPI *get_lastChild)(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
      HRESULT (WINAPI *get_previousSibling)(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
      HRESULT (WINAPI *get_nextSibling)(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
      HRESULT (WINAPI *get_attributes)(IHTMLDOMAttribute2 *This,IDispatch **p);
      HRESULT (WINAPI *get_ownerDocument)(IHTMLDOMAttribute2 *This,IDispatch **p);
      HRESULT (WINAPI *insertBefore)(IHTMLDOMAttribute2 *This,IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node);
      HRESULT (WINAPI *replaceChild)(IHTMLDOMAttribute2 *This,IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
      HRESULT (WINAPI *removeChild)(IHTMLDOMAttribute2 *This,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
      HRESULT (WINAPI *appendChild)(IHTMLDOMAttribute2 *This,IHTMLDOMNode *newChild,IHTMLDOMNode **node);
      HRESULT (WINAPI *hasChildNodes)(IHTMLDOMAttribute2 *This,VARIANT_BOOL *fChildren);
      HRESULT (WINAPI *cloneNode)(IHTMLDOMAttribute2 *This,VARIANT_BOOL fDeep,IHTMLDOMAttribute **clonedNode);
    END_INTERFACE
  } IHTMLDOMAttribute2Vtbl;
  interface IHTMLDOMAttribute2 {
    CONST_VTBL struct IHTMLDOMAttribute2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDOMAttribute2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDOMAttribute2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDOMAttribute2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDOMAttribute2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDOMAttribute2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDOMAttribute2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDOMAttribute2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDOMAttribute2_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLDOMAttribute2_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLDOMAttribute2_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#define IHTMLDOMAttribute2_get_expando(This,p) (This)->lpVtbl->get_expando(This,p)
#define IHTMLDOMAttribute2_get_nodeType(This,p) (This)->lpVtbl->get_nodeType(This,p)
#define IHTMLDOMAttribute2_get_parentNode(This,p) (This)->lpVtbl->get_parentNode(This,p)
#define IHTMLDOMAttribute2_get_childNodes(This,p) (This)->lpVtbl->get_childNodes(This,p)
#define IHTMLDOMAttribute2_get_firstChild(This,p) (This)->lpVtbl->get_firstChild(This,p)
#define IHTMLDOMAttribute2_get_lastChild(This,p) (This)->lpVtbl->get_lastChild(This,p)
#define IHTMLDOMAttribute2_get_previousSibling(This,p) (This)->lpVtbl->get_previousSibling(This,p)
#define IHTMLDOMAttribute2_get_nextSibling(This,p) (This)->lpVtbl->get_nextSibling(This,p)
#define IHTMLDOMAttribute2_get_attributes(This,p) (This)->lpVtbl->get_attributes(This,p)
#define IHTMLDOMAttribute2_get_ownerDocument(This,p) (This)->lpVtbl->get_ownerDocument(This,p)
#define IHTMLDOMAttribute2_insertBefore(This,newChild,refChild,node) (This)->lpVtbl->insertBefore(This,newChild,refChild,node)
#define IHTMLDOMAttribute2_replaceChild(This,newChild,oldChild,node) (This)->lpVtbl->replaceChild(This,newChild,oldChild,node)
#define IHTMLDOMAttribute2_removeChild(This,oldChild,node) (This)->lpVtbl->removeChild(This,oldChild,node)
#define IHTMLDOMAttribute2_appendChild(This,newChild,node) (This)->lpVtbl->appendChild(This,newChild,node)
#define IHTMLDOMAttribute2_hasChildNodes(This,fChildren) (This)->lpVtbl->hasChildNodes(This,fChildren)
#define IHTMLDOMAttribute2_cloneNode(This,fDeep,clonedNode) (This)->lpVtbl->cloneNode(This,fDeep,clonedNode)
#endif
#endif
  HRESULT WINAPI IHTMLDOMAttribute2_get_name_Proxy(IHTMLDOMAttribute2 *This,BSTR *p);
  void __RPC_STUB IHTMLDOMAttribute2_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_put_value_Proxy(IHTMLDOMAttribute2 *This,BSTR v);
  void __RPC_STUB IHTMLDOMAttribute2_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_value_Proxy(IHTMLDOMAttribute2 *This,BSTR *p);
  void __RPC_STUB IHTMLDOMAttribute2_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_expando_Proxy(IHTMLDOMAttribute2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDOMAttribute2_get_expando_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_nodeType_Proxy(IHTMLDOMAttribute2 *This,long *p);
  void __RPC_STUB IHTMLDOMAttribute2_get_nodeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_parentNode_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_parentNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_childNodes_Proxy(IHTMLDOMAttribute2 *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_childNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_firstChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_firstChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_lastChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_lastChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_previousSibling_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_previousSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_nextSibling_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_nextSibling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_attributes_Proxy(IHTMLDOMAttribute2 *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_get_ownerDocument_Proxy(IHTMLDOMAttribute2 *This,IDispatch **p);
  void __RPC_STUB IHTMLDOMAttribute2_get_ownerDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_insertBefore_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode *newChild,VARIANT refChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMAttribute2_insertBefore_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_replaceChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode *newChild,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMAttribute2_replaceChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_removeChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode *oldChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMAttribute2_removeChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_appendChild_Proxy(IHTMLDOMAttribute2 *This,IHTMLDOMNode *newChild,IHTMLDOMNode **node);
  void __RPC_STUB IHTMLDOMAttribute2_appendChild_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_hasChildNodes_Proxy(IHTMLDOMAttribute2 *This,VARIANT_BOOL *fChildren);
  void __RPC_STUB IHTMLDOMAttribute2_hasChildNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMAttribute2_cloneNode_Proxy(IHTMLDOMAttribute2 *This,VARIANT_BOOL fDeep,IHTMLDOMAttribute **clonedNode);
  void __RPC_STUB IHTMLDOMAttribute2_cloneNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMTextNode_INTERFACE_DEFINED__
#define __IHTMLDOMTextNode_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMTextNode;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDOMTextNode : public IDispatch {
  public:
    virtual HRESULT WINAPI put_data(BSTR v) = 0;
    virtual HRESULT WINAPI get_data(BSTR *p) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI splitText(long offset,IHTMLDOMNode **pRetNode) = 0;
  };
#else
  typedef struct IHTMLDOMTextNodeVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDOMTextNode *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDOMTextNode *This);
      ULONG (WINAPI *Release)(IHTMLDOMTextNode *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDOMTextNode *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDOMTextNode *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDOMTextNode *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDOMTextNode *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_data)(IHTMLDOMTextNode *This,BSTR v);
      HRESULT (WINAPI *get_data)(IHTMLDOMTextNode *This,BSTR *p);
      HRESULT (WINAPI *toString)(IHTMLDOMTextNode *This,BSTR *String);
      HRESULT (WINAPI *get_length)(IHTMLDOMTextNode *This,long *p);
      HRESULT (WINAPI *splitText)(IHTMLDOMTextNode *This,long offset,IHTMLDOMNode **pRetNode);
    END_INTERFACE
  } IHTMLDOMTextNodeVtbl;
  interface IHTMLDOMTextNode {
    CONST_VTBL struct IHTMLDOMTextNodeVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDOMTextNode_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDOMTextNode_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDOMTextNode_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDOMTextNode_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDOMTextNode_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDOMTextNode_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDOMTextNode_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDOMTextNode_put_data(This,v) (This)->lpVtbl->put_data(This,v)
#define IHTMLDOMTextNode_get_data(This,p) (This)->lpVtbl->get_data(This,p)
#define IHTMLDOMTextNode_toString(This,String) (This)->lpVtbl->toString(This,String)
#define IHTMLDOMTextNode_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLDOMTextNode_splitText(This,offset,pRetNode) (This)->lpVtbl->splitText(This,offset,pRetNode)
#endif
#endif
  HRESULT WINAPI IHTMLDOMTextNode_put_data_Proxy(IHTMLDOMTextNode *This,BSTR v);
  void __RPC_STUB IHTMLDOMTextNode_put_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode_get_data_Proxy(IHTMLDOMTextNode *This,BSTR *p);
  void __RPC_STUB IHTMLDOMTextNode_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode_toString_Proxy(IHTMLDOMTextNode *This,BSTR *String);
  void __RPC_STUB IHTMLDOMTextNode_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode_get_length_Proxy(IHTMLDOMTextNode *This,long *p);
  void __RPC_STUB IHTMLDOMTextNode_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode_splitText_Proxy(IHTMLDOMTextNode *This,long offset,IHTMLDOMNode **pRetNode);
  void __RPC_STUB IHTMLDOMTextNode_splitText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMTextNode2_INTERFACE_DEFINED__
#define __IHTMLDOMTextNode2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMTextNode2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDOMTextNode2 : public IDispatch {
  public:
    virtual HRESULT WINAPI substringData(long offset,long Count,BSTR *pbstrsubString) = 0;
    virtual HRESULT WINAPI appendData(BSTR bstrstring) = 0;
    virtual HRESULT WINAPI insertData(long offset,BSTR bstrstring) = 0;
    virtual HRESULT WINAPI deleteData(long offset,long Count) = 0;
    virtual HRESULT WINAPI replaceData(long offset,long Count,BSTR bstrstring) = 0;
  };
#else
  typedef struct IHTMLDOMTextNode2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDOMTextNode2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDOMTextNode2 *This);
      ULONG (WINAPI *Release)(IHTMLDOMTextNode2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDOMTextNode2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDOMTextNode2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDOMTextNode2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDOMTextNode2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *substringData)(IHTMLDOMTextNode2 *This,long offset,long Count,BSTR *pbstrsubString);
      HRESULT (WINAPI *appendData)(IHTMLDOMTextNode2 *This,BSTR bstrstring);
      HRESULT (WINAPI *insertData)(IHTMLDOMTextNode2 *This,long offset,BSTR bstrstring);
      HRESULT (WINAPI *deleteData)(IHTMLDOMTextNode2 *This,long offset,long Count);
      HRESULT (WINAPI *replaceData)(IHTMLDOMTextNode2 *This,long offset,long Count,BSTR bstrstring);
    END_INTERFACE
  } IHTMLDOMTextNode2Vtbl;
  interface IHTMLDOMTextNode2 {
    CONST_VTBL struct IHTMLDOMTextNode2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDOMTextNode2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDOMTextNode2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDOMTextNode2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDOMTextNode2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDOMTextNode2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDOMTextNode2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDOMTextNode2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDOMTextNode2_substringData(This,offset,Count,pbstrsubString) (This)->lpVtbl->substringData(This,offset,Count,pbstrsubString)
#define IHTMLDOMTextNode2_appendData(This,bstrstring) (This)->lpVtbl->appendData(This,bstrstring)
#define IHTMLDOMTextNode2_insertData(This,offset,bstrstring) (This)->lpVtbl->insertData(This,offset,bstrstring)
#define IHTMLDOMTextNode2_deleteData(This,offset,Count) (This)->lpVtbl->deleteData(This,offset,Count)
#define IHTMLDOMTextNode2_replaceData(This,offset,Count,bstrstring) (This)->lpVtbl->replaceData(This,offset,Count,bstrstring)
#endif
#endif
  HRESULT WINAPI IHTMLDOMTextNode2_substringData_Proxy(IHTMLDOMTextNode2 *This,long offset,long Count,BSTR *pbstrsubString);
  void __RPC_STUB IHTMLDOMTextNode2_substringData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode2_appendData_Proxy(IHTMLDOMTextNode2 *This,BSTR bstrstring);
  void __RPC_STUB IHTMLDOMTextNode2_appendData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode2_insertData_Proxy(IHTMLDOMTextNode2 *This,long offset,BSTR bstrstring);
  void __RPC_STUB IHTMLDOMTextNode2_insertData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode2_deleteData_Proxy(IHTMLDOMTextNode2 *This,long offset,long Count);
  void __RPC_STUB IHTMLDOMTextNode2_deleteData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMTextNode2_replaceData_Proxy(IHTMLDOMTextNode2 *This,long offset,long Count,BSTR bstrstring);
  void __RPC_STUB IHTMLDOMTextNode2_replaceData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMImplementation_INTERFACE_DEFINED__
#define __IHTMLDOMImplementation_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMImplementation;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDOMImplementation : public IDispatch {
  public:
    virtual HRESULT WINAPI hasFeature(BSTR bstrfeature,VARIANT version,VARIANT_BOOL *pfHasFeature) = 0;
  };
#else
  typedef struct IHTMLDOMImplementationVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDOMImplementation *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDOMImplementation *This);
      ULONG (WINAPI *Release)(IHTMLDOMImplementation *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDOMImplementation *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDOMImplementation *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDOMImplementation *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDOMImplementation *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *hasFeature)(IHTMLDOMImplementation *This,BSTR bstrfeature,VARIANT version,VARIANT_BOOL *pfHasFeature);
    END_INTERFACE
  } IHTMLDOMImplementationVtbl;
  interface IHTMLDOMImplementation {
    CONST_VTBL struct IHTMLDOMImplementationVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDOMImplementation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDOMImplementation_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDOMImplementation_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDOMImplementation_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDOMImplementation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDOMImplementation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDOMImplementation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDOMImplementation_hasFeature(This,bstrfeature,version,pfHasFeature) (This)->lpVtbl->hasFeature(This,bstrfeature,version,pfHasFeature)
#endif
#endif
  HRESULT WINAPI IHTMLDOMImplementation_hasFeature_Proxy(IHTMLDOMImplementation *This,BSTR bstrfeature,VARIANT version,VARIANT_BOOL *pfHasFeature);
  void __RPC_STUB IHTMLDOMImplementation_hasFeature_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDOMAttribute_DISPINTERFACE_DEFINED__
#define __DispHTMLDOMAttribute_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDOMAttribute;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLDOMAttribute : public IDispatch {
  };
#else
  typedef struct DispHTMLDOMAttributeVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLDOMAttribute *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLDOMAttribute *This);
      ULONG (WINAPI *Release)(DispHTMLDOMAttribute *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLDOMAttribute *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLDOMAttribute *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLDOMAttribute *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLDOMAttribute *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLDOMAttributeVtbl;
  interface DispHTMLDOMAttribute {
    CONST_VTBL struct DispHTMLDOMAttributeVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLDOMAttribute_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLDOMAttribute_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLDOMAttribute_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLDOMAttribute_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLDOMAttribute_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLDOMAttribute_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLDOMAttribute_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLDOMAttribute;
#ifdef __cplusplus
  class HTMLDOMAttribute;
#endif

#ifndef __DispHTMLDOMTextNode_DISPINTERFACE_DEFINED__
#define __DispHTMLDOMTextNode_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDOMTextNode;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLDOMTextNode : public IDispatch {
  };
#else
  typedef struct DispHTMLDOMTextNodeVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLDOMTextNode *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLDOMTextNode *This);
      ULONG (WINAPI *Release)(DispHTMLDOMTextNode *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLDOMTextNode *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLDOMTextNode *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLDOMTextNode *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLDOMTextNode *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLDOMTextNodeVtbl;
  interface DispHTMLDOMTextNode {
    CONST_VTBL struct DispHTMLDOMTextNodeVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLDOMTextNode_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLDOMTextNode_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLDOMTextNode_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLDOMTextNode_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLDOMTextNode_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLDOMTextNode_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLDOMTextNode_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLDOMTextNode;
#ifdef __cplusplus
  class HTMLDOMTextNode;
#endif

#ifndef __DispHTMLDOMImplementation_DISPINTERFACE_DEFINED__
#define __DispHTMLDOMImplementation_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDOMImplementation;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLDOMImplementation : public IDispatch {
  };
#else
  typedef struct DispHTMLDOMImplementationVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLDOMImplementation *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLDOMImplementation *This);
      ULONG (WINAPI *Release)(DispHTMLDOMImplementation *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLDOMImplementation *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLDOMImplementation *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLDOMImplementation *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLDOMImplementation *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLDOMImplementationVtbl;
  interface DispHTMLDOMImplementation {
    CONST_VTBL struct DispHTMLDOMImplementationVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLDOMImplementation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLDOMImplementation_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLDOMImplementation_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLDOMImplementation_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLDOMImplementation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLDOMImplementation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLDOMImplementation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLDOMImplementation;
#ifdef __cplusplus
  class HTMLDOMImplementation;
#endif

#ifndef __IHTMLAttributeCollection_INTERFACE_DEFINED__
#define __IHTMLAttributeCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAttributeCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLAttributeCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *name,IDispatch **pdisp) = 0;
  };
#else
  typedef struct IHTMLAttributeCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLAttributeCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLAttributeCollection *This);
      ULONG (WINAPI *Release)(IHTMLAttributeCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLAttributeCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLAttributeCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLAttributeCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLAttributeCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLAttributeCollection *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLAttributeCollection *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLAttributeCollection *This,VARIANT *name,IDispatch **pdisp);
    END_INTERFACE
  } IHTMLAttributeCollectionVtbl;
  interface IHTMLAttributeCollection {
    CONST_VTBL struct IHTMLAttributeCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLAttributeCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLAttributeCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLAttributeCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLAttributeCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLAttributeCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLAttributeCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLAttributeCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLAttributeCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLAttributeCollection_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLAttributeCollection_item(This,name,pdisp) (This)->lpVtbl->item(This,name,pdisp)
#endif
#endif
  HRESULT WINAPI IHTMLAttributeCollection_get_length_Proxy(IHTMLAttributeCollection *This,long *p);
  void __RPC_STUB IHTMLAttributeCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAttributeCollection_get__newEnum_Proxy(IHTMLAttributeCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLAttributeCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAttributeCollection_item_Proxy(IHTMLAttributeCollection *This,VARIANT *name,IDispatch **pdisp);
  void __RPC_STUB IHTMLAttributeCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAttributeCollection2_INTERFACE_DEFINED__
#define __IHTMLAttributeCollection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAttributeCollection2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLAttributeCollection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI getNamedItem(BSTR bstrName,IHTMLDOMAttribute **newretNode) = 0;
    virtual HRESULT WINAPI setNamedItem(IHTMLDOMAttribute *ppNode,IHTMLDOMAttribute **newretNode) = 0;
    virtual HRESULT WINAPI removeNamedItem(BSTR bstrName,IHTMLDOMAttribute **newretNode) = 0;
  };
#else
  typedef struct IHTMLAttributeCollection2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLAttributeCollection2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLAttributeCollection2 *This);
      ULONG (WINAPI *Release)(IHTMLAttributeCollection2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLAttributeCollection2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLAttributeCollection2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLAttributeCollection2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLAttributeCollection2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *getNamedItem)(IHTMLAttributeCollection2 *This,BSTR bstrName,IHTMLDOMAttribute **newretNode);
      HRESULT (WINAPI *setNamedItem)(IHTMLAttributeCollection2 *This,IHTMLDOMAttribute *ppNode,IHTMLDOMAttribute **newretNode);
      HRESULT (WINAPI *removeNamedItem)(IHTMLAttributeCollection2 *This,BSTR bstrName,IHTMLDOMAttribute **newretNode);
    END_INTERFACE
  } IHTMLAttributeCollection2Vtbl;
  interface IHTMLAttributeCollection2 {
    CONST_VTBL struct IHTMLAttributeCollection2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLAttributeCollection2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLAttributeCollection2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLAttributeCollection2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLAttributeCollection2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLAttributeCollection2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLAttributeCollection2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLAttributeCollection2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLAttributeCollection2_getNamedItem(This,bstrName,newretNode) (This)->lpVtbl->getNamedItem(This,bstrName,newretNode)
#define IHTMLAttributeCollection2_setNamedItem(This,ppNode,newretNode) (This)->lpVtbl->setNamedItem(This,ppNode,newretNode)
#define IHTMLAttributeCollection2_removeNamedItem(This,bstrName,newretNode) (This)->lpVtbl->removeNamedItem(This,bstrName,newretNode)
#endif
#endif
  HRESULT WINAPI IHTMLAttributeCollection2_getNamedItem_Proxy(IHTMLAttributeCollection2 *This,BSTR bstrName,IHTMLDOMAttribute **newretNode);
  void __RPC_STUB IHTMLAttributeCollection2_getNamedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAttributeCollection2_setNamedItem_Proxy(IHTMLAttributeCollection2 *This,IHTMLDOMAttribute *ppNode,IHTMLDOMAttribute **newretNode);
  void __RPC_STUB IHTMLAttributeCollection2_setNamedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAttributeCollection2_removeNamedItem_Proxy(IHTMLAttributeCollection2 *This,BSTR bstrName,IHTMLDOMAttribute **newretNode);
  void __RPC_STUB IHTMLAttributeCollection2_removeNamedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDOMChildrenCollection_INTERFACE_DEFINED__
#define __IHTMLDOMChildrenCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDOMChildrenCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDOMChildrenCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(long index,IDispatch **ppItem) = 0;
  };
#else
  typedef struct IHTMLDOMChildrenCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDOMChildrenCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDOMChildrenCollection *This);
      ULONG (WINAPI *Release)(IHTMLDOMChildrenCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDOMChildrenCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDOMChildrenCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDOMChildrenCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDOMChildrenCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLDOMChildrenCollection *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLDOMChildrenCollection *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLDOMChildrenCollection *This,long index,IDispatch **ppItem);
    END_INTERFACE
  } IHTMLDOMChildrenCollectionVtbl;
  interface IHTMLDOMChildrenCollection {
    CONST_VTBL struct IHTMLDOMChildrenCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDOMChildrenCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDOMChildrenCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDOMChildrenCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDOMChildrenCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDOMChildrenCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDOMChildrenCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDOMChildrenCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDOMChildrenCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLDOMChildrenCollection_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLDOMChildrenCollection_item(This,index,ppItem) (This)->lpVtbl->item(This,index,ppItem)
#endif
#endif
  HRESULT WINAPI IHTMLDOMChildrenCollection_get_length_Proxy(IHTMLDOMChildrenCollection *This,long *p);
  void __RPC_STUB IHTMLDOMChildrenCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMChildrenCollection_get__newEnum_Proxy(IHTMLDOMChildrenCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLDOMChildrenCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDOMChildrenCollection_item_Proxy(IHTMLDOMChildrenCollection *This,long index,IDispatch **ppItem);
  void __RPC_STUB IHTMLDOMChildrenCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAttributeCollection_DISPINTERFACE_DEFINED__
#define __DispHTMLAttributeCollection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAttributeCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLAttributeCollection : public IDispatch {
  };
#else
  typedef struct DispHTMLAttributeCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLAttributeCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLAttributeCollection *This);
      ULONG (WINAPI *Release)(DispHTMLAttributeCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLAttributeCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLAttributeCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLAttributeCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLAttributeCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLAttributeCollectionVtbl;
  interface DispHTMLAttributeCollection {
    CONST_VTBL struct DispHTMLAttributeCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLAttributeCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLAttributeCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLAttributeCollection_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLAttributeCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLAttributeCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLAttributeCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLAttributeCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLAttributeCollection;
#ifdef __cplusplus
  class HTMLAttributeCollection;
#endif

#ifndef __DispDOMChildrenCollection_DISPINTERFACE_DEFINED__
#define __DispDOMChildrenCollection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispDOMChildrenCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispDOMChildrenCollection : public IDispatch {
  };
#else
  typedef struct DispDOMChildrenCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispDOMChildrenCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispDOMChildrenCollection *This);
      ULONG (WINAPI *Release)(DispDOMChildrenCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispDOMChildrenCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispDOMChildrenCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispDOMChildrenCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispDOMChildrenCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispDOMChildrenCollectionVtbl;
  interface DispDOMChildrenCollection {
    CONST_VTBL struct DispDOMChildrenCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispDOMChildrenCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispDOMChildrenCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispDOMChildrenCollection_Release(This) (This)->lpVtbl->Release(This)
#define DispDOMChildrenCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispDOMChildrenCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispDOMChildrenCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispDOMChildrenCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_DOMChildrenCollection;
#ifdef __cplusplus
  class DOMChildrenCollection;
#endif

#ifndef __HTMLElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLElementEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLElementEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLElementEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLElementEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLElementEvents2 *This);
      ULONG (WINAPI *Release)(HTMLElementEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLElementEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLElementEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLElementEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLElementEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLElementEvents2Vtbl;
  interface HTMLElementEvents2 {
    CONST_VTBL struct HTMLElementEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLElementEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLElementEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLElementEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLElementEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLElementEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLElementEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLElementEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLElementEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLElementEvents : public IDispatch {
  };
#else
  typedef struct HTMLElementEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLElementEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLElementEvents *This);
      ULONG (WINAPI *Release)(HTMLElementEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLElementEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLElementEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLElementEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLElementEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLElementEventsVtbl;
  interface HTMLElementEvents {
    CONST_VTBL struct HTMLElementEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLElementEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLElementEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLElementEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLElementEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLElementEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLElementEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLElementEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLElementCollection_INTERFACE_DEFINED__
#define __IHTMLElementCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLElementCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI put_length(long v) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT name,VARIANT index,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI tags(VARIANT tagName,IDispatch **pdisp) = 0;
  };
#else
  typedef struct IHTMLElementCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLElementCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLElementCollection *This);
      ULONG (WINAPI *Release)(IHTMLElementCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLElementCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLElementCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLElementCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLElementCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *toString)(IHTMLElementCollection *This,BSTR *String);
      HRESULT (WINAPI *put_length)(IHTMLElementCollection *This,long v);
      HRESULT (WINAPI *get_length)(IHTMLElementCollection *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLElementCollection *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLElementCollection *This,VARIANT name,VARIANT index,IDispatch **pdisp);
      HRESULT (WINAPI *tags)(IHTMLElementCollection *This,VARIANT tagName,IDispatch **pdisp);
    END_INTERFACE
  } IHTMLElementCollectionVtbl;
  interface IHTMLElementCollection {
    CONST_VTBL struct IHTMLElementCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLElementCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLElementCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLElementCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLElementCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLElementCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLElementCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLElementCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLElementCollection_toString(This,String) (This)->lpVtbl->toString(This,String)
#define IHTMLElementCollection_put_length(This,v) (This)->lpVtbl->put_length(This,v)
#define IHTMLElementCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLElementCollection_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLElementCollection_item(This,name,index,pdisp) (This)->lpVtbl->item(This,name,index,pdisp)
#define IHTMLElementCollection_tags(This,tagName,pdisp) (This)->lpVtbl->tags(This,tagName,pdisp)
#endif
#endif
  HRESULT WINAPI IHTMLElementCollection_toString_Proxy(IHTMLElementCollection *This,BSTR *String);
  void __RPC_STUB IHTMLElementCollection_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_put_length_Proxy(IHTMLElementCollection *This,long v);
  void __RPC_STUB IHTMLElementCollection_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_get_length_Proxy(IHTMLElementCollection *This,long *p);
  void __RPC_STUB IHTMLElementCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_get__newEnum_Proxy(IHTMLElementCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLElementCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_item_Proxy(IHTMLElementCollection *This,VARIANT name,VARIANT index,IDispatch **pdisp);
  void __RPC_STUB IHTMLElementCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementCollection_tags_Proxy(IHTMLElementCollection *This,VARIANT tagName,IDispatch **pdisp);
  void __RPC_STUB IHTMLElementCollection_tags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElement2_INTERFACE_DEFINED__
#define __IHTMLElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_scopeName(BSTR *p) = 0;
    virtual HRESULT WINAPI setCapture(VARIANT_BOOL containerCapture = -1) = 0;
    virtual HRESULT WINAPI releaseCapture(void) = 0;
    virtual HRESULT WINAPI put_onlosecapture(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onlosecapture(VARIANT *p) = 0;
    virtual HRESULT WINAPI componentFromPoint(long x,long y,BSTR *component) = 0;
    virtual HRESULT WINAPI doScroll(VARIANT component) = 0;
    virtual HRESULT WINAPI put_onscroll(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onscroll(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondrag(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondrag(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragend(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragend(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragenter(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragenter(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragover(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragover(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragleave(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragleave(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondrop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondrop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforecut(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforecut(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncut(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncut(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforecopy(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforecopy(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncopy(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncopy(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforepaste(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforepaste(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onpaste(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onpaste(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_currentStyle(IHTMLCurrentStyle **p) = 0;
    virtual HRESULT WINAPI put_onpropertychange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onpropertychange(VARIANT *p) = 0;
    virtual HRESULT WINAPI getClientRects(IHTMLRectCollection **pRectCol) = 0;
    virtual HRESULT WINAPI getBoundingClientRect(IHTMLRect **pRect) = 0;
    virtual HRESULT WINAPI setExpression(BSTR propname,BSTR expression,BSTR language = L"") = 0;
    virtual HRESULT WINAPI getExpression(BSTR propname,VARIANT *expression) = 0;
    virtual HRESULT WINAPI removeExpression(BSTR propname,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI put_tabIndex(short v) = 0;
    virtual HRESULT WINAPI get_tabIndex(short *p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI put_accessKey(BSTR v) = 0;
    virtual HRESULT WINAPI get_accessKey(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onresize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresize(VARIANT *p) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
    virtual HRESULT WINAPI addFilter(IUnknown *pUnk) = 0;
    virtual HRESULT WINAPI removeFilter(IUnknown *pUnk) = 0;
    virtual HRESULT WINAPI get_clientHeight(long *p) = 0;
    virtual HRESULT WINAPI get_clientWidth(long *p) = 0;
    virtual HRESULT WINAPI get_clientTop(long *p) = 0;
    virtual HRESULT WINAPI get_clientLeft(long *p) = 0;
    virtual HRESULT WINAPI attachEvent(BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI detachEvent(BSTR event,IDispatch *pDisp) = 0;
    virtual HRESULT WINAPI get_readyState(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowsdelete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowsdelete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowsinserted(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowsinserted(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncellchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncellchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dir(BSTR v) = 0;
    virtual HRESULT WINAPI get_dir(BSTR *p) = 0;
    virtual HRESULT WINAPI createControlRange(IDispatch **range) = 0;
    virtual HRESULT WINAPI get_scrollHeight(long *p) = 0;
    virtual HRESULT WINAPI get_scrollWidth(long *p) = 0;
    virtual HRESULT WINAPI put_scrollTop(long v) = 0;
    virtual HRESULT WINAPI get_scrollTop(long *p) = 0;
    virtual HRESULT WINAPI put_scrollLeft(long v) = 0;
    virtual HRESULT WINAPI get_scrollLeft(long *p) = 0;
    virtual HRESULT WINAPI clearAttributes(void) = 0;
    virtual HRESULT WINAPI mergeAttributes(IHTMLElement *mergeThis) = 0;
    virtual HRESULT WINAPI put_oncontextmenu(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncontextmenu(VARIANT *p) = 0;
    virtual HRESULT WINAPI insertAdjacentElement(BSTR where,IHTMLElement *insertedElement,IHTMLElement **inserted) = 0;
    virtual HRESULT WINAPI applyElement(IHTMLElement *apply,BSTR where,IHTMLElement **applied) = 0;
    virtual HRESULT WINAPI getAdjacentText(BSTR where,BSTR *text) = 0;
    virtual HRESULT WINAPI replaceAdjacentText(BSTR where,BSTR newText,BSTR *oldText) = 0;
    virtual HRESULT WINAPI get_canHaveChildren(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI addBehavior(BSTR bstrUrl,VARIANT *pvarFactory,long *pCookie) = 0;
    virtual HRESULT WINAPI removeBehavior(long cookie,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI get_runtimeStyle(IHTMLStyle **p) = 0;
    virtual HRESULT WINAPI get_behaviorUrns(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_tagUrn(BSTR v) = 0;
    virtual HRESULT WINAPI get_tagUrn(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onbeforeeditfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeeditfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_readyStateValue(long *p) = 0;
    virtual HRESULT WINAPI getElementsByTagName(BSTR v,IHTMLElementCollection **pelColl) = 0;
  };
#else
  typedef struct IHTMLElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLElement2 *This);
      ULONG (WINAPI *Release)(IHTMLElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_scopeName)(IHTMLElement2 *This,BSTR *p);
      HRESULT (WINAPI *setCapture)(IHTMLElement2 *This,VARIANT_BOOL containerCapture);
      HRESULT (WINAPI *releaseCapture)(IHTMLElement2 *This);
      HRESULT (WINAPI *put_onlosecapture)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onlosecapture)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *componentFromPoint)(IHTMLElement2 *This,long x,long y,BSTR *component);
      HRESULT (WINAPI *doScroll)(IHTMLElement2 *This,VARIANT component);
      HRESULT (WINAPI *put_onscroll)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onscroll)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondrag)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_ondrag)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondragend)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_ondragend)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondragenter)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_ondragenter)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondragover)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_ondragover)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondragleave)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_ondragleave)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondrop)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_ondrop)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onbeforecut)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforecut)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_oncut)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_oncut)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onbeforecopy)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforecopy)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_oncopy)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_oncopy)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onbeforepaste)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforepaste)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onpaste)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onpaste)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *get_currentStyle)(IHTMLElement2 *This,IHTMLCurrentStyle **p);
      HRESULT (WINAPI *put_onpropertychange)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onpropertychange)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *getClientRects)(IHTMLElement2 *This,IHTMLRectCollection **pRectCol);
      HRESULT (WINAPI *getBoundingClientRect)(IHTMLElement2 *This,IHTMLRect **pRect);
      HRESULT (WINAPI *setExpression)(IHTMLElement2 *This,BSTR propname,BSTR expression,BSTR language);
      HRESULT (WINAPI *getExpression)(IHTMLElement2 *This,BSTR propname,VARIANT *expression);
      HRESULT (WINAPI *removeExpression)(IHTMLElement2 *This,BSTR propname,VARIANT_BOOL *pfSuccess);
      HRESULT (WINAPI *put_tabIndex)(IHTMLElement2 *This,short v);
      HRESULT (WINAPI *get_tabIndex)(IHTMLElement2 *This,short *p);
      HRESULT (WINAPI *focus)(IHTMLElement2 *This);
      HRESULT (WINAPI *put_accessKey)(IHTMLElement2 *This,BSTR v);
      HRESULT (WINAPI *get_accessKey)(IHTMLElement2 *This,BSTR *p);
      HRESULT (WINAPI *put_onblur)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onblur)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onfocus)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onfocus)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onresize)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onresize)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *blur)(IHTMLElement2 *This);
      HRESULT (WINAPI *addFilter)(IHTMLElement2 *This,IUnknown *pUnk);
      HRESULT (WINAPI *removeFilter)(IHTMLElement2 *This,IUnknown *pUnk);
      HRESULT (WINAPI *get_clientHeight)(IHTMLElement2 *This,long *p);
      HRESULT (WINAPI *get_clientWidth)(IHTMLElement2 *This,long *p);
      HRESULT (WINAPI *get_clientTop)(IHTMLElement2 *This,long *p);
      HRESULT (WINAPI *get_clientLeft)(IHTMLElement2 *This,long *p);
      HRESULT (WINAPI *attachEvent)(IHTMLElement2 *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
      HRESULT (WINAPI *detachEvent)(IHTMLElement2 *This,BSTR event,IDispatch *pDisp);
      HRESULT (WINAPI *get_readyState)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onreadystatechange)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onreadystatechange)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onrowsdelete)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onrowsdelete)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onrowsinserted)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onrowsinserted)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_oncellchange)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_oncellchange)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_dir)(IHTMLElement2 *This,BSTR v);
      HRESULT (WINAPI *get_dir)(IHTMLElement2 *This,BSTR *p);
      HRESULT (WINAPI *createControlRange)(IHTMLElement2 *This,IDispatch **range);
      HRESULT (WINAPI *get_scrollHeight)(IHTMLElement2 *This,long *p);
      HRESULT (WINAPI *get_scrollWidth)(IHTMLElement2 *This,long *p);
      HRESULT (WINAPI *put_scrollTop)(IHTMLElement2 *This,long v);
      HRESULT (WINAPI *get_scrollTop)(IHTMLElement2 *This,long *p);
      HRESULT (WINAPI *put_scrollLeft)(IHTMLElement2 *This,long v);
      HRESULT (WINAPI *get_scrollLeft)(IHTMLElement2 *This,long *p);
      HRESULT (WINAPI *clearAttributes)(IHTMLElement2 *This);
      HRESULT (WINAPI *mergeAttributes)(IHTMLElement2 *This,IHTMLElement *mergeThis);
      HRESULT (WINAPI *put_oncontextmenu)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_oncontextmenu)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *insertAdjacentElement)(IHTMLElement2 *This,BSTR where,IHTMLElement *insertedElement,IHTMLElement **inserted);
      HRESULT (WINAPI *applyElement)(IHTMLElement2 *This,IHTMLElement *apply,BSTR where,IHTMLElement **applied);
      HRESULT (WINAPI *getAdjacentText)(IHTMLElement2 *This,BSTR where,BSTR *text);
      HRESULT (WINAPI *replaceAdjacentText)(IHTMLElement2 *This,BSTR where,BSTR newText,BSTR *oldText);
      HRESULT (WINAPI *get_canHaveChildren)(IHTMLElement2 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *addBehavior)(IHTMLElement2 *This,BSTR bstrUrl,VARIANT *pvarFactory,long *pCookie);
      HRESULT (WINAPI *removeBehavior)(IHTMLElement2 *This,long cookie,VARIANT_BOOL *pfResult);
      HRESULT (WINAPI *get_runtimeStyle)(IHTMLElement2 *This,IHTMLStyle **p);
      HRESULT (WINAPI *get_behaviorUrns)(IHTMLElement2 *This,IDispatch **p);
      HRESULT (WINAPI *put_tagUrn)(IHTMLElement2 *This,BSTR v);
      HRESULT (WINAPI *get_tagUrn)(IHTMLElement2 *This,BSTR *p);
      HRESULT (WINAPI *put_onbeforeeditfocus)(IHTMLElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforeeditfocus)(IHTMLElement2 *This,VARIANT *p);
      HRESULT (WINAPI *get_readyStateValue)(IHTMLElement2 *This,long *p);
      HRESULT (WINAPI *getElementsByTagName)(IHTMLElement2 *This,BSTR v,IHTMLElementCollection **pelColl);
    END_INTERFACE
  } IHTMLElement2Vtbl;
  interface IHTMLElement2 {
    CONST_VTBL struct IHTMLElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLElement2_get_scopeName(This,p) (This)->lpVtbl->get_scopeName(This,p)
#define IHTMLElement2_setCapture(This,containerCapture) (This)->lpVtbl->setCapture(This,containerCapture)
#define IHTMLElement2_releaseCapture(This) (This)->lpVtbl->releaseCapture(This)
#define IHTMLElement2_put_onlosecapture(This,v) (This)->lpVtbl->put_onlosecapture(This,v)
#define IHTMLElement2_get_onlosecapture(This,p) (This)->lpVtbl->get_onlosecapture(This,p)
#define IHTMLElement2_componentFromPoint(This,x,y,component) (This)->lpVtbl->componentFromPoint(This,x,y,component)
#define IHTMLElement2_doScroll(This,component) (This)->lpVtbl->doScroll(This,component)
#define IHTMLElement2_put_onscroll(This,v) (This)->lpVtbl->put_onscroll(This,v)
#define IHTMLElement2_get_onscroll(This,p) (This)->lpVtbl->get_onscroll(This,p)
#define IHTMLElement2_put_ondrag(This,v) (This)->lpVtbl->put_ondrag(This,v)
#define IHTMLElement2_get_ondrag(This,p) (This)->lpVtbl->get_ondrag(This,p)
#define IHTMLElement2_put_ondragend(This,v) (This)->lpVtbl->put_ondragend(This,v)
#define IHTMLElement2_get_ondragend(This,p) (This)->lpVtbl->get_ondragend(This,p)
#define IHTMLElement2_put_ondragenter(This,v) (This)->lpVtbl->put_ondragenter(This,v)
#define IHTMLElement2_get_ondragenter(This,p) (This)->lpVtbl->get_ondragenter(This,p)
#define IHTMLElement2_put_ondragover(This,v) (This)->lpVtbl->put_ondragover(This,v)
#define IHTMLElement2_get_ondragover(This,p) (This)->lpVtbl->get_ondragover(This,p)
#define IHTMLElement2_put_ondragleave(This,v) (This)->lpVtbl->put_ondragleave(This,v)
#define IHTMLElement2_get_ondragleave(This,p) (This)->lpVtbl->get_ondragleave(This,p)
#define IHTMLElement2_put_ondrop(This,v) (This)->lpVtbl->put_ondrop(This,v)
#define IHTMLElement2_get_ondrop(This,p) (This)->lpVtbl->get_ondrop(This,p)
#define IHTMLElement2_put_onbeforecut(This,v) (This)->lpVtbl->put_onbeforecut(This,v)
#define IHTMLElement2_get_onbeforecut(This,p) (This)->lpVtbl->get_onbeforecut(This,p)
#define IHTMLElement2_put_oncut(This,v) (This)->lpVtbl->put_oncut(This,v)
#define IHTMLElement2_get_oncut(This,p) (This)->lpVtbl->get_oncut(This,p)
#define IHTMLElement2_put_onbeforecopy(This,v) (This)->lpVtbl->put_onbeforecopy(This,v)
#define IHTMLElement2_get_onbeforecopy(This,p) (This)->lpVtbl->get_onbeforecopy(This,p)
#define IHTMLElement2_put_oncopy(This,v) (This)->lpVtbl->put_oncopy(This,v)
#define IHTMLElement2_get_oncopy(This,p) (This)->lpVtbl->get_oncopy(This,p)
#define IHTMLElement2_put_onbeforepaste(This,v) (This)->lpVtbl->put_onbeforepaste(This,v)
#define IHTMLElement2_get_onbeforepaste(This,p) (This)->lpVtbl->get_onbeforepaste(This,p)
#define IHTMLElement2_put_onpaste(This,v) (This)->lpVtbl->put_onpaste(This,v)
#define IHTMLElement2_get_onpaste(This,p) (This)->lpVtbl->get_onpaste(This,p)
#define IHTMLElement2_get_currentStyle(This,p) (This)->lpVtbl->get_currentStyle(This,p)
#define IHTMLElement2_put_onpropertychange(This,v) (This)->lpVtbl->put_onpropertychange(This,v)
#define IHTMLElement2_get_onpropertychange(This,p) (This)->lpVtbl->get_onpropertychange(This,p)
#define IHTMLElement2_getClientRects(This,pRectCol) (This)->lpVtbl->getClientRects(This,pRectCol)
#define IHTMLElement2_getBoundingClientRect(This,pRect) (This)->lpVtbl->getBoundingClientRect(This,pRect)
#define IHTMLElement2_setExpression(This,propname,expression,language) (This)->lpVtbl->setExpression(This,propname,expression,language)
#define IHTMLElement2_getExpression(This,propname,expression) (This)->lpVtbl->getExpression(This,propname,expression)
#define IHTMLElement2_removeExpression(This,propname,pfSuccess) (This)->lpVtbl->removeExpression(This,propname,pfSuccess)
#define IHTMLElement2_put_tabIndex(This,v) (This)->lpVtbl->put_tabIndex(This,v)
#define IHTMLElement2_get_tabIndex(This,p) (This)->lpVtbl->get_tabIndex(This,p)
#define IHTMLElement2_focus(This) (This)->lpVtbl->focus(This)
#define IHTMLElement2_put_accessKey(This,v) (This)->lpVtbl->put_accessKey(This,v)
#define IHTMLElement2_get_accessKey(This,p) (This)->lpVtbl->get_accessKey(This,p)
#define IHTMLElement2_put_onblur(This,v) (This)->lpVtbl->put_onblur(This,v)
#define IHTMLElement2_get_onblur(This,p) (This)->lpVtbl->get_onblur(This,p)
#define IHTMLElement2_put_onfocus(This,v) (This)->lpVtbl->put_onfocus(This,v)
#define IHTMLElement2_get_onfocus(This,p) (This)->lpVtbl->get_onfocus(This,p)
#define IHTMLElement2_put_onresize(This,v) (This)->lpVtbl->put_onresize(This,v)
#define IHTMLElement2_get_onresize(This,p) (This)->lpVtbl->get_onresize(This,p)
#define IHTMLElement2_blur(This) (This)->lpVtbl->blur(This)
#define IHTMLElement2_addFilter(This,pUnk) (This)->lpVtbl->addFilter(This,pUnk)
#define IHTMLElement2_removeFilter(This,pUnk) (This)->lpVtbl->removeFilter(This,pUnk)
#define IHTMLElement2_get_clientHeight(This,p) (This)->lpVtbl->get_clientHeight(This,p)
#define IHTMLElement2_get_clientWidth(This,p) (This)->lpVtbl->get_clientWidth(This,p)
#define IHTMLElement2_get_clientTop(This,p) (This)->lpVtbl->get_clientTop(This,p)
#define IHTMLElement2_get_clientLeft(This,p) (This)->lpVtbl->get_clientLeft(This,p)
#define IHTMLElement2_attachEvent(This,event,pDisp,pfResult) (This)->lpVtbl->attachEvent(This,event,pDisp,pfResult)
#define IHTMLElement2_detachEvent(This,event,pDisp) (This)->lpVtbl->detachEvent(This,event,pDisp)
#define IHTMLElement2_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IHTMLElement2_put_onreadystatechange(This,v) (This)->lpVtbl->put_onreadystatechange(This,v)
#define IHTMLElement2_get_onreadystatechange(This,p) (This)->lpVtbl->get_onreadystatechange(This,p)
#define IHTMLElement2_put_onrowsdelete(This,v) (This)->lpVtbl->put_onrowsdelete(This,v)
#define IHTMLElement2_get_onrowsdelete(This,p) (This)->lpVtbl->get_onrowsdelete(This,p)
#define IHTMLElement2_put_onrowsinserted(This,v) (This)->lpVtbl->put_onrowsinserted(This,v)
#define IHTMLElement2_get_onrowsinserted(This,p) (This)->lpVtbl->get_onrowsinserted(This,p)
#define IHTMLElement2_put_oncellchange(This,v) (This)->lpVtbl->put_oncellchange(This,v)
#define IHTMLElement2_get_oncellchange(This,p) (This)->lpVtbl->get_oncellchange(This,p)
#define IHTMLElement2_put_dir(This,v) (This)->lpVtbl->put_dir(This,v)
#define IHTMLElement2_get_dir(This,p) (This)->lpVtbl->get_dir(This,p)
#define IHTMLElement2_createControlRange(This,range) (This)->lpVtbl->createControlRange(This,range)
#define IHTMLElement2_get_scrollHeight(This,p) (This)->lpVtbl->get_scrollHeight(This,p)
#define IHTMLElement2_get_scrollWidth(This,p) (This)->lpVtbl->get_scrollWidth(This,p)
#define IHTMLElement2_put_scrollTop(This,v) (This)->lpVtbl->put_scrollTop(This,v)
#define IHTMLElement2_get_scrollTop(This,p) (This)->lpVtbl->get_scrollTop(This,p)
#define IHTMLElement2_put_scrollLeft(This,v) (This)->lpVtbl->put_scrollLeft(This,v)
#define IHTMLElement2_get_scrollLeft(This,p) (This)->lpVtbl->get_scrollLeft(This,p)
#define IHTMLElement2_clearAttributes(This) (This)->lpVtbl->clearAttributes(This)
#define IHTMLElement2_mergeAttributes(This,mergeThis) (This)->lpVtbl->mergeAttributes(This,mergeThis)
#define IHTMLElement2_put_oncontextmenu(This,v) (This)->lpVtbl->put_oncontextmenu(This,v)
#define IHTMLElement2_get_oncontextmenu(This,p) (This)->lpVtbl->get_oncontextmenu(This,p)
#define IHTMLElement2_insertAdjacentElement(This,where,insertedElement,inserted) (This)->lpVtbl->insertAdjacentElement(This,where,insertedElement,inserted)
#define IHTMLElement2_applyElement(This,apply,where,applied) (This)->lpVtbl->applyElement(This,apply,where,applied)
#define IHTMLElement2_getAdjacentText(This,where,text) (This)->lpVtbl->getAdjacentText(This,where,text)
#define IHTMLElement2_replaceAdjacentText(This,where,newText,oldText) (This)->lpVtbl->replaceAdjacentText(This,where,newText,oldText)
#define IHTMLElement2_get_canHaveChildren(This,p) (This)->lpVtbl->get_canHaveChildren(This,p)
#define IHTMLElement2_addBehavior(This,bstrUrl,pvarFactory,pCookie) (This)->lpVtbl->addBehavior(This,bstrUrl,pvarFactory,pCookie)
#define IHTMLElement2_removeBehavior(This,cookie,pfResult) (This)->lpVtbl->removeBehavior(This,cookie,pfResult)
#define IHTMLElement2_get_runtimeStyle(This,p) (This)->lpVtbl->get_runtimeStyle(This,p)
#define IHTMLElement2_get_behaviorUrns(This,p) (This)->lpVtbl->get_behaviorUrns(This,p)
#define IHTMLElement2_put_tagUrn(This,v) (This)->lpVtbl->put_tagUrn(This,v)
#define IHTMLElement2_get_tagUrn(This,p) (This)->lpVtbl->get_tagUrn(This,p)
#define IHTMLElement2_put_onbeforeeditfocus(This,v) (This)->lpVtbl->put_onbeforeeditfocus(This,v)
#define IHTMLElement2_get_onbeforeeditfocus(This,p) (This)->lpVtbl->get_onbeforeeditfocus(This,p)
#define IHTMLElement2_get_readyStateValue(This,p) (This)->lpVtbl->get_readyStateValue(This,p)
#define IHTMLElement2_getElementsByTagName(This,v,pelColl) (This)->lpVtbl->getElementsByTagName(This,v,pelColl)
#endif
#endif
  HRESULT WINAPI IHTMLElement2_get_scopeName_Proxy(IHTMLElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLElement2_get_scopeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_setCapture_Proxy(IHTMLElement2 *This,VARIANT_BOOL containerCapture);
  void __RPC_STUB IHTMLElement2_setCapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_releaseCapture_Proxy(IHTMLElement2 *This);
  void __RPC_STUB IHTMLElement2_releaseCapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onlosecapture_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onlosecapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onlosecapture_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onlosecapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_componentFromPoint_Proxy(IHTMLElement2 *This,long x,long y,BSTR *component);
  void __RPC_STUB IHTMLElement2_componentFromPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_doScroll_Proxy(IHTMLElement2 *This,VARIANT component);
  void __RPC_STUB IHTMLElement2_doScroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onscroll_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onscroll_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondrag_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondrag_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondragend_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondragend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondragend_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondragend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondragenter_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondragenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondragenter_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondragenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondragover_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondragover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondragover_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondragover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondragleave_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondragleave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondragleave_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondragleave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_ondrop_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_ondrop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_ondrop_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_ondrop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onbeforecut_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onbeforecut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onbeforecut_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onbeforecut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_oncut_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_oncut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_oncut_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_oncut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onbeforecopy_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onbeforecopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onbeforecopy_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onbeforecopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_oncopy_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_oncopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_oncopy_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_oncopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onbeforepaste_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onbeforepaste_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onbeforepaste_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onbeforepaste_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onpaste_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onpaste_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onpaste_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onpaste_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_currentStyle_Proxy(IHTMLElement2 *This,IHTMLCurrentStyle **p);
  void __RPC_STUB IHTMLElement2_get_currentStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onpropertychange_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onpropertychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onpropertychange_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onpropertychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getClientRects_Proxy(IHTMLElement2 *This,IHTMLRectCollection **pRectCol);
  void __RPC_STUB IHTMLElement2_getClientRects_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getBoundingClientRect_Proxy(IHTMLElement2 *This,IHTMLRect **pRect);
  void __RPC_STUB IHTMLElement2_getBoundingClientRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_setExpression_Proxy(IHTMLElement2 *This,BSTR propname,BSTR expression,BSTR language);
  void __RPC_STUB IHTMLElement2_setExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getExpression_Proxy(IHTMLElement2 *This,BSTR propname,VARIANT *expression);
  void __RPC_STUB IHTMLElement2_getExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_removeExpression_Proxy(IHTMLElement2 *This,BSTR propname,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLElement2_removeExpression_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_tabIndex_Proxy(IHTMLElement2 *This,short v);
  void __RPC_STUB IHTMLElement2_put_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_tabIndex_Proxy(IHTMLElement2 *This,short *p);
  void __RPC_STUB IHTMLElement2_get_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_focus_Proxy(IHTMLElement2 *This);
  void __RPC_STUB IHTMLElement2_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_accessKey_Proxy(IHTMLElement2 *This,BSTR v);
  void __RPC_STUB IHTMLElement2_put_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_accessKey_Proxy(IHTMLElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLElement2_get_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onblur_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onblur_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onfocus_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onfocus_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onresize_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onresize_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_blur_Proxy(IHTMLElement2 *This);
  void __RPC_STUB IHTMLElement2_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_addFilter_Proxy(IHTMLElement2 *This,IUnknown *pUnk);
  void __RPC_STUB IHTMLElement2_addFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_removeFilter_Proxy(IHTMLElement2 *This,IUnknown *pUnk);
  void __RPC_STUB IHTMLElement2_removeFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_clientHeight_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_clientHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_clientWidth_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_clientWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_clientTop_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_clientTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_clientLeft_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_clientLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_attachEvent_Proxy(IHTMLElement2 *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLElement2_attachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_detachEvent_Proxy(IHTMLElement2 *This,BSTR event,IDispatch *pDisp);
  void __RPC_STUB IHTMLElement2_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_readyState_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onreadystatechange_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onreadystatechange_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onrowsdelete_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onrowsdelete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onrowsdelete_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onrowsdelete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onrowsinserted_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onrowsinserted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onrowsinserted_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onrowsinserted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_oncellchange_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_oncellchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_oncellchange_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_oncellchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_dir_Proxy(IHTMLElement2 *This,BSTR v);
  void __RPC_STUB IHTMLElement2_put_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_dir_Proxy(IHTMLElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLElement2_get_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_createControlRange_Proxy(IHTMLElement2 *This,IDispatch **range);
  void __RPC_STUB IHTMLElement2_createControlRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_scrollHeight_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_scrollHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_scrollWidth_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_scrollWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_scrollTop_Proxy(IHTMLElement2 *This,long v);
  void __RPC_STUB IHTMLElement2_put_scrollTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_scrollTop_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_scrollTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_scrollLeft_Proxy(IHTMLElement2 *This,long v);
  void __RPC_STUB IHTMLElement2_put_scrollLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_scrollLeft_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_scrollLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_clearAttributes_Proxy(IHTMLElement2 *This);
  void __RPC_STUB IHTMLElement2_clearAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_mergeAttributes_Proxy(IHTMLElement2 *This,IHTMLElement *mergeThis);
  void __RPC_STUB IHTMLElement2_mergeAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_oncontextmenu_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_oncontextmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_oncontextmenu_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_oncontextmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_insertAdjacentElement_Proxy(IHTMLElement2 *This,BSTR where,IHTMLElement *insertedElement,IHTMLElement **inserted);
  void __RPC_STUB IHTMLElement2_insertAdjacentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_applyElement_Proxy(IHTMLElement2 *This,IHTMLElement *apply,BSTR where,IHTMLElement **applied);
  void __RPC_STUB IHTMLElement2_applyElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getAdjacentText_Proxy(IHTMLElement2 *This,BSTR where,BSTR *text);
  void __RPC_STUB IHTMLElement2_getAdjacentText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_replaceAdjacentText_Proxy(IHTMLElement2 *This,BSTR where,BSTR newText,BSTR *oldText);
  void __RPC_STUB IHTMLElement2_replaceAdjacentText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_canHaveChildren_Proxy(IHTMLElement2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement2_get_canHaveChildren_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_addBehavior_Proxy(IHTMLElement2 *This,BSTR bstrUrl,VARIANT *pvarFactory,long *pCookie);
  void __RPC_STUB IHTMLElement2_addBehavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_removeBehavior_Proxy(IHTMLElement2 *This,long cookie,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLElement2_removeBehavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_runtimeStyle_Proxy(IHTMLElement2 *This,IHTMLStyle **p);
  void __RPC_STUB IHTMLElement2_get_runtimeStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_behaviorUrns_Proxy(IHTMLElement2 *This,IDispatch **p);
  void __RPC_STUB IHTMLElement2_get_behaviorUrns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_tagUrn_Proxy(IHTMLElement2 *This,BSTR v);
  void __RPC_STUB IHTMLElement2_put_tagUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_tagUrn_Proxy(IHTMLElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLElement2_get_tagUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_put_onbeforeeditfocus_Proxy(IHTMLElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLElement2_put_onbeforeeditfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_onbeforeeditfocus_Proxy(IHTMLElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement2_get_onbeforeeditfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_get_readyStateValue_Proxy(IHTMLElement2 *This,long *p);
  void __RPC_STUB IHTMLElement2_get_readyStateValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement2_getElementsByTagName_Proxy(IHTMLElement2 *This,BSTR v,IHTMLElementCollection **pelColl);
  void __RPC_STUB IHTMLElement2_getElementsByTagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElement3_INTERFACE_DEFINED__
#define __IHTMLElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElement3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI mergeAttributes(IHTMLElement *mergeThis,VARIANT *pvarFlags) = 0;
    virtual HRESULT WINAPI get_isMultiLine(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_canHaveHTML(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onlayoutcomplete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onlayoutcomplete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onpage(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onpage(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_inflateBlock(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_inflateBlock(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onbeforedeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforedeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI setActive(void) = 0;
    virtual HRESULT WINAPI put_contentEditable(BSTR v) = 0;
    virtual HRESULT WINAPI get_contentEditable(BSTR *p) = 0;
    virtual HRESULT WINAPI get_isContentEditable(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_hideFocus(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_hideFocus(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_isDisabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onmove(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmove(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncontrolselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncontrolselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI fireEvent(BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled) = 0;
    virtual HRESULT WINAPI put_onresizestart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresizestart(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onresizeend(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresizeend(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmovestart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmovestart(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmoveend(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmoveend(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseenter(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseenter(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseleave(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseleave(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI dragDrop(VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI get_glyphMode(LONG *p) = 0;
  };
#else
  typedef struct IHTMLElement3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLElement3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLElement3 *This);
      ULONG (WINAPI *Release)(IHTMLElement3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLElement3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLElement3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLElement3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLElement3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *mergeAttributes)(IHTMLElement3 *This,IHTMLElement *mergeThis,VARIANT *pvarFlags);
      HRESULT (WINAPI *get_isMultiLine)(IHTMLElement3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_canHaveHTML)(IHTMLElement3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_onlayoutcomplete)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_onlayoutcomplete)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *put_onpage)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_onpage)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *put_inflateBlock)(IHTMLElement3 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_inflateBlock)(IHTMLElement3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_onbeforedeactivate)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforedeactivate)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *setActive)(IHTMLElement3 *This);
      HRESULT (WINAPI *put_contentEditable)(IHTMLElement3 *This,BSTR v);
      HRESULT (WINAPI *get_contentEditable)(IHTMLElement3 *This,BSTR *p);
      HRESULT (WINAPI *get_isContentEditable)(IHTMLElement3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_hideFocus)(IHTMLElement3 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_hideFocus)(IHTMLElement3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_disabled)(IHTMLElement3 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLElement3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_isDisabled)(IHTMLElement3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_onmove)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_onmove)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *put_oncontrolselect)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_oncontrolselect)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *fireEvent)(IHTMLElement3 *This,BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled);
      HRESULT (WINAPI *put_onresizestart)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_onresizestart)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *put_onresizeend)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_onresizeend)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *put_onmovestart)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_onmovestart)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *put_onmoveend)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_onmoveend)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *put_onmouseenter)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_onmouseenter)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *put_onmouseleave)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_onmouseleave)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *put_onactivate)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_onactivate)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondeactivate)(IHTMLElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_ondeactivate)(IHTMLElement3 *This,VARIANT *p);
      HRESULT (WINAPI *dragDrop)(IHTMLElement3 *This,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *get_glyphMode)(IHTMLElement3 *This,LONG *p);
    END_INTERFACE
  } IHTMLElement3Vtbl;
  interface IHTMLElement3 {
    CONST_VTBL struct IHTMLElement3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLElement3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLElement3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLElement3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLElement3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLElement3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLElement3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLElement3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLElement3_mergeAttributes(This,mergeThis,pvarFlags) (This)->lpVtbl->mergeAttributes(This,mergeThis,pvarFlags)
#define IHTMLElement3_get_isMultiLine(This,p) (This)->lpVtbl->get_isMultiLine(This,p)
#define IHTMLElement3_get_canHaveHTML(This,p) (This)->lpVtbl->get_canHaveHTML(This,p)
#define IHTMLElement3_put_onlayoutcomplete(This,v) (This)->lpVtbl->put_onlayoutcomplete(This,v)
#define IHTMLElement3_get_onlayoutcomplete(This,p) (This)->lpVtbl->get_onlayoutcomplete(This,p)
#define IHTMLElement3_put_onpage(This,v) (This)->lpVtbl->put_onpage(This,v)
#define IHTMLElement3_get_onpage(This,p) (This)->lpVtbl->get_onpage(This,p)
#define IHTMLElement3_put_inflateBlock(This,v) (This)->lpVtbl->put_inflateBlock(This,v)
#define IHTMLElement3_get_inflateBlock(This,p) (This)->lpVtbl->get_inflateBlock(This,p)
#define IHTMLElement3_put_onbeforedeactivate(This,v) (This)->lpVtbl->put_onbeforedeactivate(This,v)
#define IHTMLElement3_get_onbeforedeactivate(This,p) (This)->lpVtbl->get_onbeforedeactivate(This,p)
#define IHTMLElement3_setActive(This) (This)->lpVtbl->setActive(This)
#define IHTMLElement3_put_contentEditable(This,v) (This)->lpVtbl->put_contentEditable(This,v)
#define IHTMLElement3_get_contentEditable(This,p) (This)->lpVtbl->get_contentEditable(This,p)
#define IHTMLElement3_get_isContentEditable(This,p) (This)->lpVtbl->get_isContentEditable(This,p)
#define IHTMLElement3_put_hideFocus(This,v) (This)->lpVtbl->put_hideFocus(This,v)
#define IHTMLElement3_get_hideFocus(This,p) (This)->lpVtbl->get_hideFocus(This,p)
#define IHTMLElement3_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLElement3_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLElement3_get_isDisabled(This,p) (This)->lpVtbl->get_isDisabled(This,p)
#define IHTMLElement3_put_onmove(This,v) (This)->lpVtbl->put_onmove(This,v)
#define IHTMLElement3_get_onmove(This,p) (This)->lpVtbl->get_onmove(This,p)
#define IHTMLElement3_put_oncontrolselect(This,v) (This)->lpVtbl->put_oncontrolselect(This,v)
#define IHTMLElement3_get_oncontrolselect(This,p) (This)->lpVtbl->get_oncontrolselect(This,p)
#define IHTMLElement3_fireEvent(This,bstrEventName,pvarEventObject,pfCancelled) (This)->lpVtbl->fireEvent(This,bstrEventName,pvarEventObject,pfCancelled)
#define IHTMLElement3_put_onresizestart(This,v) (This)->lpVtbl->put_onresizestart(This,v)
#define IHTMLElement3_get_onresizestart(This,p) (This)->lpVtbl->get_onresizestart(This,p)
#define IHTMLElement3_put_onresizeend(This,v) (This)->lpVtbl->put_onresizeend(This,v)
#define IHTMLElement3_get_onresizeend(This,p) (This)->lpVtbl->get_onresizeend(This,p)
#define IHTMLElement3_put_onmovestart(This,v) (This)->lpVtbl->put_onmovestart(This,v)
#define IHTMLElement3_get_onmovestart(This,p) (This)->lpVtbl->get_onmovestart(This,p)
#define IHTMLElement3_put_onmoveend(This,v) (This)->lpVtbl->put_onmoveend(This,v)
#define IHTMLElement3_get_onmoveend(This,p) (This)->lpVtbl->get_onmoveend(This,p)
#define IHTMLElement3_put_onmouseenter(This,v) (This)->lpVtbl->put_onmouseenter(This,v)
#define IHTMLElement3_get_onmouseenter(This,p) (This)->lpVtbl->get_onmouseenter(This,p)
#define IHTMLElement3_put_onmouseleave(This,v) (This)->lpVtbl->put_onmouseleave(This,v)
#define IHTMLElement3_get_onmouseleave(This,p) (This)->lpVtbl->get_onmouseleave(This,p)
#define IHTMLElement3_put_onactivate(This,v) (This)->lpVtbl->put_onactivate(This,v)
#define IHTMLElement3_get_onactivate(This,p) (This)->lpVtbl->get_onactivate(This,p)
#define IHTMLElement3_put_ondeactivate(This,v) (This)->lpVtbl->put_ondeactivate(This,v)
#define IHTMLElement3_get_ondeactivate(This,p) (This)->lpVtbl->get_ondeactivate(This,p)
#define IHTMLElement3_dragDrop(This,pfRet) (This)->lpVtbl->dragDrop(This,pfRet)
#define IHTMLElement3_get_glyphMode(This,p) (This)->lpVtbl->get_glyphMode(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLElement3_mergeAttributes_Proxy(IHTMLElement3 *This,IHTMLElement *mergeThis,VARIANT *pvarFlags);
  void __RPC_STUB IHTMLElement3_mergeAttributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_isMultiLine_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_isMultiLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_canHaveHTML_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_canHaveHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onlayoutcomplete_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onlayoutcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onlayoutcomplete_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onlayoutcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onpage_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onpage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onpage_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onpage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_inflateBlock_Proxy(IHTMLElement3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElement3_put_inflateBlock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_inflateBlock_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_inflateBlock_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onbeforedeactivate_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onbeforedeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onbeforedeactivate_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onbeforedeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_setActive_Proxy(IHTMLElement3 *This);
  void __RPC_STUB IHTMLElement3_setActive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_contentEditable_Proxy(IHTMLElement3 *This,BSTR v);
  void __RPC_STUB IHTMLElement3_put_contentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_contentEditable_Proxy(IHTMLElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLElement3_get_contentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_isContentEditable_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_isContentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_hideFocus_Proxy(IHTMLElement3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElement3_put_hideFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_hideFocus_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_hideFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_disabled_Proxy(IHTMLElement3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElement3_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_disabled_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_isDisabled_Proxy(IHTMLElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElement3_get_isDisabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmove_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmove_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_oncontrolselect_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_oncontrolselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_oncontrolselect_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_oncontrolselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_fireEvent_Proxy(IHTMLElement3 *This,BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled);
  void __RPC_STUB IHTMLElement3_fireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onresizestart_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onresizestart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onresizestart_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onresizestart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onresizeend_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onresizeend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onresizeend_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onresizeend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmovestart_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmovestart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmovestart_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmovestart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmoveend_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmoveend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmoveend_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmoveend_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmouseenter_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmouseenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmouseenter_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmouseenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onmouseleave_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onmouseleave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onmouseleave_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onmouseleave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_onactivate_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_onactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_onactivate_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_onactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_put_ondeactivate_Proxy(IHTMLElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLElement3_put_ondeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_ondeactivate_Proxy(IHTMLElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement3_get_ondeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_dragDrop_Proxy(IHTMLElement3 *This,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLElement3_dragDrop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement3_get_glyphMode_Proxy(IHTMLElement3 *This,LONG *p);
  void __RPC_STUB IHTMLElement3_get_glyphMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElement4_INTERFACE_DEFINED__
#define __IHTMLElement4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElement4;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLElement4 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_onmousewheel(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousewheel(VARIANT *p) = 0;
    virtual HRESULT WINAPI normalize(void) = 0;
    virtual HRESULT WINAPI getAttributeNode(BSTR bstrname,IHTMLDOMAttribute **ppAttribute) = 0;
    virtual HRESULT WINAPI setAttributeNode(IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute) = 0;
    virtual HRESULT WINAPI removeAttributeNode(IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute) = 0;
    virtual HRESULT WINAPI put_onbeforeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocusin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocusin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocusout(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocusout(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLElement4Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLElement4 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLElement4 *This);
      ULONG (WINAPI *Release)(IHTMLElement4 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLElement4 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLElement4 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLElement4 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLElement4 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_onmousewheel)(IHTMLElement4 *This,VARIANT v);
      HRESULT (WINAPI *get_onmousewheel)(IHTMLElement4 *This,VARIANT *p);
      HRESULT (WINAPI *normalize)(IHTMLElement4 *This);
      HRESULT (WINAPI *getAttributeNode)(IHTMLElement4 *This,BSTR bstrname,IHTMLDOMAttribute **ppAttribute);
      HRESULT (WINAPI *setAttributeNode)(IHTMLElement4 *This,IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute);
      HRESULT (WINAPI *removeAttributeNode)(IHTMLElement4 *This,IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute);
      HRESULT (WINAPI *put_onbeforeactivate)(IHTMLElement4 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforeactivate)(IHTMLElement4 *This,VARIANT *p);
      HRESULT (WINAPI *put_onfocusin)(IHTMLElement4 *This,VARIANT v);
      HRESULT (WINAPI *get_onfocusin)(IHTMLElement4 *This,VARIANT *p);
      HRESULT (WINAPI *put_onfocusout)(IHTMLElement4 *This,VARIANT v);
      HRESULT (WINAPI *get_onfocusout)(IHTMLElement4 *This,VARIANT *p);
    END_INTERFACE
  } IHTMLElement4Vtbl;
  interface IHTMLElement4 {
    CONST_VTBL struct IHTMLElement4Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLElement4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLElement4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLElement4_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLElement4_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLElement4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLElement4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLElement4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLElement4_put_onmousewheel(This,v) (This)->lpVtbl->put_onmousewheel(This,v)
#define IHTMLElement4_get_onmousewheel(This,p) (This)->lpVtbl->get_onmousewheel(This,p)
#define IHTMLElement4_normalize(This) (This)->lpVtbl->normalize(This)
#define IHTMLElement4_getAttributeNode(This,bstrname,ppAttribute) (This)->lpVtbl->getAttributeNode(This,bstrname,ppAttribute)
#define IHTMLElement4_setAttributeNode(This,pattr,ppretAttribute) (This)->lpVtbl->setAttributeNode(This,pattr,ppretAttribute)
#define IHTMLElement4_removeAttributeNode(This,pattr,ppretAttribute) (This)->lpVtbl->removeAttributeNode(This,pattr,ppretAttribute)
#define IHTMLElement4_put_onbeforeactivate(This,v) (This)->lpVtbl->put_onbeforeactivate(This,v)
#define IHTMLElement4_get_onbeforeactivate(This,p) (This)->lpVtbl->get_onbeforeactivate(This,p)
#define IHTMLElement4_put_onfocusin(This,v) (This)->lpVtbl->put_onfocusin(This,v)
#define IHTMLElement4_get_onfocusin(This,p) (This)->lpVtbl->get_onfocusin(This,p)
#define IHTMLElement4_put_onfocusout(This,v) (This)->lpVtbl->put_onfocusout(This,v)
#define IHTMLElement4_get_onfocusout(This,p) (This)->lpVtbl->get_onfocusout(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLElement4_put_onmousewheel_Proxy(IHTMLElement4 *This,VARIANT v);
  void __RPC_STUB IHTMLElement4_put_onmousewheel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_get_onmousewheel_Proxy(IHTMLElement4 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement4_get_onmousewheel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_normalize_Proxy(IHTMLElement4 *This);
  void __RPC_STUB IHTMLElement4_normalize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_getAttributeNode_Proxy(IHTMLElement4 *This,BSTR bstrname,IHTMLDOMAttribute **ppAttribute);
  void __RPC_STUB IHTMLElement4_getAttributeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_setAttributeNode_Proxy(IHTMLElement4 *This,IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute);
  void __RPC_STUB IHTMLElement4_setAttributeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_removeAttributeNode_Proxy(IHTMLElement4 *This,IHTMLDOMAttribute *pattr,IHTMLDOMAttribute **ppretAttribute);
  void __RPC_STUB IHTMLElement4_removeAttributeNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_put_onbeforeactivate_Proxy(IHTMLElement4 *This,VARIANT v);
  void __RPC_STUB IHTMLElement4_put_onbeforeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_get_onbeforeactivate_Proxy(IHTMLElement4 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement4_get_onbeforeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_put_onfocusin_Proxy(IHTMLElement4 *This,VARIANT v);
  void __RPC_STUB IHTMLElement4_put_onfocusin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_get_onfocusin_Proxy(IHTMLElement4 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement4_get_onfocusin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_put_onfocusout_Proxy(IHTMLElement4 *This,VARIANT v);
  void __RPC_STUB IHTMLElement4_put_onfocusout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElement4_get_onfocusout_Proxy(IHTMLElement4 *This,VARIANT *p);
  void __RPC_STUB IHTMLElement4_get_onfocusout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElementRender_INTERFACE_DEFINED__
#define __IHTMLElementRender_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementRender;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLElementRender : public IUnknown {
  public:
    virtual HRESULT WINAPI DrawToDC(HDC hDC) = 0;
    virtual HRESULT WINAPI SetDocumentPrinter(BSTR bstrPrinterName,HDC hDC) = 0;
  };
#else
  typedef struct IHTMLElementRenderVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLElementRender *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLElementRender *This);
      ULONG (WINAPI *Release)(IHTMLElementRender *This);
      HRESULT (WINAPI *DrawToDC)(IHTMLElementRender *This,HDC hDC);
      HRESULT (WINAPI *SetDocumentPrinter)(IHTMLElementRender *This,BSTR bstrPrinterName,HDC hDC);
    END_INTERFACE
  } IHTMLElementRenderVtbl;
  interface IHTMLElementRender {
    CONST_VTBL struct IHTMLElementRenderVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLElementRender_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLElementRender_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLElementRender_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLElementRender_DrawToDC(This,hDC) (This)->lpVtbl->DrawToDC(This,hDC)
#define IHTMLElementRender_SetDocumentPrinter(This,bstrPrinterName,hDC) (This)->lpVtbl->SetDocumentPrinter(This,bstrPrinterName,hDC)
#endif
#endif
  HRESULT WINAPI IHTMLElementRender_DrawToDC_Proxy(IHTMLElementRender *This,HDC hDC);
  void __RPC_STUB IHTMLElementRender_DrawToDC_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementRender_SetDocumentPrinter_Proxy(IHTMLElementRender *This,BSTR bstrPrinterName,HDC hDC);
  void __RPC_STUB IHTMLElementRender_SetDocumentPrinter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLUniqueName_INTERFACE_DEFINED__
#define __IHTMLUniqueName_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLUniqueName;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLUniqueName : public IDispatch {
  public:
    virtual HRESULT WINAPI get_uniqueNumber(long *p) = 0;
    virtual HRESULT WINAPI get_uniqueID(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLUniqueNameVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLUniqueName *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLUniqueName *This);
      ULONG (WINAPI *Release)(IHTMLUniqueName *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLUniqueName *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLUniqueName *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLUniqueName *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLUniqueName *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_uniqueNumber)(IHTMLUniqueName *This,long *p);
      HRESULT (WINAPI *get_uniqueID)(IHTMLUniqueName *This,BSTR *p);
    END_INTERFACE
  } IHTMLUniqueNameVtbl;
  interface IHTMLUniqueName {
    CONST_VTBL struct IHTMLUniqueNameVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLUniqueName_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLUniqueName_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLUniqueName_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLUniqueName_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLUniqueName_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLUniqueName_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLUniqueName_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLUniqueName_get_uniqueNumber(This,p) (This)->lpVtbl->get_uniqueNumber(This,p)
#define IHTMLUniqueName_get_uniqueID(This,p) (This)->lpVtbl->get_uniqueID(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLUniqueName_get_uniqueNumber_Proxy(IHTMLUniqueName *This,long *p);
  void __RPC_STUB IHTMLUniqueName_get_uniqueNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUniqueName_get_uniqueID_Proxy(IHTMLUniqueName *This,BSTR *p);
  void __RPC_STUB IHTMLUniqueName_get_uniqueID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDatabinding_INTERFACE_DEFINED__
#define __IHTMLDatabinding_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDatabinding;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDatabinding : public IDispatch {
  public:
    virtual HRESULT WINAPI put_dataFld(BSTR v) = 0;
    virtual HRESULT WINAPI get_dataFld(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dataSrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_dataSrc(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dataFormatAs(BSTR v) = 0;
    virtual HRESULT WINAPI get_dataFormatAs(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLDatabindingVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDatabinding *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDatabinding *This);
      ULONG (WINAPI *Release)(IHTMLDatabinding *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDatabinding *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDatabinding *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDatabinding *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDatabinding *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_dataFld)(IHTMLDatabinding *This,BSTR v);
      HRESULT (WINAPI *get_dataFld)(IHTMLDatabinding *This,BSTR *p);
      HRESULT (WINAPI *put_dataSrc)(IHTMLDatabinding *This,BSTR v);
      HRESULT (WINAPI *get_dataSrc)(IHTMLDatabinding *This,BSTR *p);
      HRESULT (WINAPI *put_dataFormatAs)(IHTMLDatabinding *This,BSTR v);
      HRESULT (WINAPI *get_dataFormatAs)(IHTMLDatabinding *This,BSTR *p);
    END_INTERFACE
  } IHTMLDatabindingVtbl;
  interface IHTMLDatabinding {
    CONST_VTBL struct IHTMLDatabindingVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDatabinding_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDatabinding_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDatabinding_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDatabinding_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDatabinding_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDatabinding_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDatabinding_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDatabinding_put_dataFld(This,v) (This)->lpVtbl->put_dataFld(This,v)
#define IHTMLDatabinding_get_dataFld(This,p) (This)->lpVtbl->get_dataFld(This,p)
#define IHTMLDatabinding_put_dataSrc(This,v) (This)->lpVtbl->put_dataSrc(This,v)
#define IHTMLDatabinding_get_dataSrc(This,p) (This)->lpVtbl->get_dataSrc(This,p)
#define IHTMLDatabinding_put_dataFormatAs(This,v) (This)->lpVtbl->put_dataFormatAs(This,v)
#define IHTMLDatabinding_get_dataFormatAs(This,p) (This)->lpVtbl->get_dataFormatAs(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLDatabinding_put_dataFld_Proxy(IHTMLDatabinding *This,BSTR v);
  void __RPC_STUB IHTMLDatabinding_put_dataFld_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_get_dataFld_Proxy(IHTMLDatabinding *This,BSTR *p);
  void __RPC_STUB IHTMLDatabinding_get_dataFld_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_put_dataSrc_Proxy(IHTMLDatabinding *This,BSTR v);
  void __RPC_STUB IHTMLDatabinding_put_dataSrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_get_dataSrc_Proxy(IHTMLDatabinding *This,BSTR *p);
  void __RPC_STUB IHTMLDatabinding_get_dataSrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_put_dataFormatAs_Proxy(IHTMLDatabinding *This,BSTR v);
  void __RPC_STUB IHTMLDatabinding_put_dataFormatAs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDatabinding_get_dataFormatAs_Proxy(IHTMLDatabinding *This,BSTR *p);
  void __RPC_STUB IHTMLDatabinding_get_dataFormatAs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDocument_INTERFACE_DEFINED__
#define __IHTMLDocument_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDocument : public IDispatch {
  public:
    virtual HRESULT WINAPI get_Script(IDispatch **p) = 0;
  };
#else
  typedef struct IHTMLDocumentVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDocument *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDocument *This);
      ULONG (WINAPI *Release)(IHTMLDocument *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDocument *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDocument *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDocument *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDocument *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Script)(IHTMLDocument *This,IDispatch **p);
    END_INTERFACE
  } IHTMLDocumentVtbl;
  interface IHTMLDocument {
    CONST_VTBL struct IHTMLDocumentVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDocument_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDocument_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDocument_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDocument_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDocument_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDocument_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDocument_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDocument_get_Script(This,p) (This)->lpVtbl->get_Script(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLDocument_get_Script_Proxy(IHTMLDocument *This,IDispatch **p);
  void __RPC_STUB IHTMLDocument_get_Script_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElementDefaults_INTERFACE_DEFINED__
#define __IHTMLElementDefaults_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementDefaults;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLElementDefaults : public IDispatch {
  public:
    virtual HRESULT WINAPI get_style(IHTMLStyle **p) = 0;
    virtual HRESULT WINAPI put_tabStop(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_tabStop(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_viewInheritStyle(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_viewInheritStyle(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_viewMasterTab(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_viewMasterTab(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_scrollSegmentX(long v) = 0;
    virtual HRESULT WINAPI get_scrollSegmentX(long *p) = 0;
    virtual HRESULT WINAPI put_scrollSegmentY(long v) = 0;
    virtual HRESULT WINAPI get_scrollSegmentY(long *p) = 0;
    virtual HRESULT WINAPI put_isMultiLine(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_isMultiLine(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_contentEditable(BSTR v) = 0;
    virtual HRESULT WINAPI get_contentEditable(BSTR *p) = 0;
    virtual HRESULT WINAPI put_canHaveHTML(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_canHaveHTML(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI putref_viewLink(IHTMLDocument *v) = 0;
    virtual HRESULT WINAPI get_viewLink(IHTMLDocument **p) = 0;
    virtual HRESULT WINAPI put_frozen(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_frozen(VARIANT_BOOL *p) = 0;
  };
#else
  typedef struct IHTMLElementDefaultsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLElementDefaults *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLElementDefaults *This);
      ULONG (WINAPI *Release)(IHTMLElementDefaults *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLElementDefaults *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLElementDefaults *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLElementDefaults *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLElementDefaults *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_style)(IHTMLElementDefaults *This,IHTMLStyle **p);
      HRESULT (WINAPI *put_tabStop)(IHTMLElementDefaults *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_tabStop)(IHTMLElementDefaults *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_viewInheritStyle)(IHTMLElementDefaults *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_viewInheritStyle)(IHTMLElementDefaults *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_viewMasterTab)(IHTMLElementDefaults *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_viewMasterTab)(IHTMLElementDefaults *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_scrollSegmentX)(IHTMLElementDefaults *This,long v);
      HRESULT (WINAPI *get_scrollSegmentX)(IHTMLElementDefaults *This,long *p);
      HRESULT (WINAPI *put_scrollSegmentY)(IHTMLElementDefaults *This,long v);
      HRESULT (WINAPI *get_scrollSegmentY)(IHTMLElementDefaults *This,long *p);
      HRESULT (WINAPI *put_isMultiLine)(IHTMLElementDefaults *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_isMultiLine)(IHTMLElementDefaults *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_contentEditable)(IHTMLElementDefaults *This,BSTR v);
      HRESULT (WINAPI *get_contentEditable)(IHTMLElementDefaults *This,BSTR *p);
      HRESULT (WINAPI *put_canHaveHTML)(IHTMLElementDefaults *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_canHaveHTML)(IHTMLElementDefaults *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *putref_viewLink)(IHTMLElementDefaults *This,IHTMLDocument *v);
      HRESULT (WINAPI *get_viewLink)(IHTMLElementDefaults *This,IHTMLDocument **p);
      HRESULT (WINAPI *put_frozen)(IHTMLElementDefaults *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_frozen)(IHTMLElementDefaults *This,VARIANT_BOOL *p);
    END_INTERFACE
  } IHTMLElementDefaultsVtbl;
  interface IHTMLElementDefaults {
    CONST_VTBL struct IHTMLElementDefaultsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLElementDefaults_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLElementDefaults_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLElementDefaults_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLElementDefaults_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLElementDefaults_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLElementDefaults_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLElementDefaults_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLElementDefaults_get_style(This,p) (This)->lpVtbl->get_style(This,p)
#define IHTMLElementDefaults_put_tabStop(This,v) (This)->lpVtbl->put_tabStop(This,v)
#define IHTMLElementDefaults_get_tabStop(This,p) (This)->lpVtbl->get_tabStop(This,p)
#define IHTMLElementDefaults_put_viewInheritStyle(This,v) (This)->lpVtbl->put_viewInheritStyle(This,v)
#define IHTMLElementDefaults_get_viewInheritStyle(This,p) (This)->lpVtbl->get_viewInheritStyle(This,p)
#define IHTMLElementDefaults_put_viewMasterTab(This,v) (This)->lpVtbl->put_viewMasterTab(This,v)
#define IHTMLElementDefaults_get_viewMasterTab(This,p) (This)->lpVtbl->get_viewMasterTab(This,p)
#define IHTMLElementDefaults_put_scrollSegmentX(This,v) (This)->lpVtbl->put_scrollSegmentX(This,v)
#define IHTMLElementDefaults_get_scrollSegmentX(This,p) (This)->lpVtbl->get_scrollSegmentX(This,p)
#define IHTMLElementDefaults_put_scrollSegmentY(This,v) (This)->lpVtbl->put_scrollSegmentY(This,v)
#define IHTMLElementDefaults_get_scrollSegmentY(This,p) (This)->lpVtbl->get_scrollSegmentY(This,p)
#define IHTMLElementDefaults_put_isMultiLine(This,v) (This)->lpVtbl->put_isMultiLine(This,v)
#define IHTMLElementDefaults_get_isMultiLine(This,p) (This)->lpVtbl->get_isMultiLine(This,p)
#define IHTMLElementDefaults_put_contentEditable(This,v) (This)->lpVtbl->put_contentEditable(This,v)
#define IHTMLElementDefaults_get_contentEditable(This,p) (This)->lpVtbl->get_contentEditable(This,p)
#define IHTMLElementDefaults_put_canHaveHTML(This,v) (This)->lpVtbl->put_canHaveHTML(This,v)
#define IHTMLElementDefaults_get_canHaveHTML(This,p) (This)->lpVtbl->get_canHaveHTML(This,p)
#define IHTMLElementDefaults_putref_viewLink(This,v) (This)->lpVtbl->putref_viewLink(This,v)
#define IHTMLElementDefaults_get_viewLink(This,p) (This)->lpVtbl->get_viewLink(This,p)
#define IHTMLElementDefaults_put_frozen(This,v) (This)->lpVtbl->put_frozen(This,v)
#define IHTMLElementDefaults_get_frozen(This,p) (This)->lpVtbl->get_frozen(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLElementDefaults_get_style_Proxy(IHTMLElementDefaults *This,IHTMLStyle **p);
  void __RPC_STUB IHTMLElementDefaults_get_style_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_tabStop_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_tabStop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_tabStop_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_tabStop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_viewInheritStyle_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_viewInheritStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_viewInheritStyle_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_viewInheritStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_viewMasterTab_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_viewMasterTab_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_viewMasterTab_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_viewMasterTab_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_scrollSegmentX_Proxy(IHTMLElementDefaults *This,long v);
  void __RPC_STUB IHTMLElementDefaults_put_scrollSegmentX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_scrollSegmentX_Proxy(IHTMLElementDefaults *This,long *p);
  void __RPC_STUB IHTMLElementDefaults_get_scrollSegmentX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_scrollSegmentY_Proxy(IHTMLElementDefaults *This,long v);
  void __RPC_STUB IHTMLElementDefaults_put_scrollSegmentY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_scrollSegmentY_Proxy(IHTMLElementDefaults *This,long *p);
  void __RPC_STUB IHTMLElementDefaults_get_scrollSegmentY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_isMultiLine_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_isMultiLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_isMultiLine_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_isMultiLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_contentEditable_Proxy(IHTMLElementDefaults *This,BSTR v);
  void __RPC_STUB IHTMLElementDefaults_put_contentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_contentEditable_Proxy(IHTMLElementDefaults *This,BSTR *p);
  void __RPC_STUB IHTMLElementDefaults_get_contentEditable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_canHaveHTML_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_canHaveHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_canHaveHTML_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_canHaveHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_putref_viewLink_Proxy(IHTMLElementDefaults *This,IHTMLDocument *v);
  void __RPC_STUB IHTMLElementDefaults_putref_viewLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_viewLink_Proxy(IHTMLElementDefaults *This,IHTMLDocument **p);
  void __RPC_STUB IHTMLElementDefaults_get_viewLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_put_frozen_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLElementDefaults_put_frozen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLElementDefaults_get_frozen_Proxy(IHTMLElementDefaults *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLElementDefaults_get_frozen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDefaults_DISPINTERFACE_DEFINED__
#define __DispHTMLDefaults_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDefaults;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLDefaults : public IDispatch {
  };
#else
  typedef struct DispHTMLDefaultsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLDefaults *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLDefaults *This);
      ULONG (WINAPI *Release)(DispHTMLDefaults *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLDefaults *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLDefaults *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLDefaults *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLDefaults *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLDefaultsVtbl;
  interface DispHTMLDefaults {
    CONST_VTBL struct DispHTMLDefaultsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLDefaults_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLDefaults_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLDefaults_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLDefaults_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLDefaults_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLDefaults_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLDefaults_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLDefaults;
#ifdef __cplusplus
  class HTMLDefaults;
#endif

#ifndef __IHTCDefaultDispatch_INTERFACE_DEFINED__
#define __IHTCDefaultDispatch_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCDefaultDispatch;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTCDefaultDispatch : public IDispatch {
  public:
    virtual HRESULT WINAPI get_element(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI createEventObject(IHTMLEventObj **eventObj) = 0;
    virtual HRESULT WINAPI get_defaults(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_document(IDispatch **p) = 0;
  };
#else
  typedef struct IHTCDefaultDispatchVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTCDefaultDispatch *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTCDefaultDispatch *This);
      ULONG (WINAPI *Release)(IHTCDefaultDispatch *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTCDefaultDispatch *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTCDefaultDispatch *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTCDefaultDispatch *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTCDefaultDispatch *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_element)(IHTCDefaultDispatch *This,IHTMLElement **p);
      HRESULT (WINAPI *createEventObject)(IHTCDefaultDispatch *This,IHTMLEventObj **eventObj);
      HRESULT (WINAPI *get_defaults)(IHTCDefaultDispatch *This,IDispatch **p);
      HRESULT (WINAPI *get_document)(IHTCDefaultDispatch *This,IDispatch **p);
    END_INTERFACE
  } IHTCDefaultDispatchVtbl;
  interface IHTCDefaultDispatch {
    CONST_VTBL struct IHTCDefaultDispatchVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTCDefaultDispatch_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTCDefaultDispatch_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTCDefaultDispatch_Release(This) (This)->lpVtbl->Release(This)
#define IHTCDefaultDispatch_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTCDefaultDispatch_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTCDefaultDispatch_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTCDefaultDispatch_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTCDefaultDispatch_get_element(This,p) (This)->lpVtbl->get_element(This,p)
#define IHTCDefaultDispatch_createEventObject(This,eventObj) (This)->lpVtbl->createEventObject(This,eventObj)
#define IHTCDefaultDispatch_get_defaults(This,p) (This)->lpVtbl->get_defaults(This,p)
#define IHTCDefaultDispatch_get_document(This,p) (This)->lpVtbl->get_document(This,p)
#endif
#endif
  HRESULT WINAPI IHTCDefaultDispatch_get_element_Proxy(IHTCDefaultDispatch *This,IHTMLElement **p);
  void __RPC_STUB IHTCDefaultDispatch_get_element_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCDefaultDispatch_createEventObject_Proxy(IHTCDefaultDispatch *This,IHTMLEventObj **eventObj);
  void __RPC_STUB IHTCDefaultDispatch_createEventObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCDefaultDispatch_get_defaults_Proxy(IHTCDefaultDispatch *This,IDispatch **p);
  void __RPC_STUB IHTCDefaultDispatch_get_defaults_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCDefaultDispatch_get_document_Proxy(IHTCDefaultDispatch *This,IDispatch **p);
  void __RPC_STUB IHTCDefaultDispatch_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCPropertyBehavior_INTERFACE_DEFINED__
#define __IHTCPropertyBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCPropertyBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTCPropertyBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI fireChange(void) = 0;
    virtual HRESULT WINAPI put_value(VARIANT v) = 0;
    virtual HRESULT WINAPI get_value(VARIANT *p) = 0;
  };
#else
  typedef struct IHTCPropertyBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTCPropertyBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTCPropertyBehavior *This);
      ULONG (WINAPI *Release)(IHTCPropertyBehavior *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTCPropertyBehavior *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTCPropertyBehavior *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTCPropertyBehavior *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTCPropertyBehavior *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *fireChange)(IHTCPropertyBehavior *This);
      HRESULT (WINAPI *put_value)(IHTCPropertyBehavior *This,VARIANT v);
      HRESULT (WINAPI *get_value)(IHTCPropertyBehavior *This,VARIANT *p);
    END_INTERFACE
  } IHTCPropertyBehaviorVtbl;
  interface IHTCPropertyBehavior {
    CONST_VTBL struct IHTCPropertyBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTCPropertyBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTCPropertyBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTCPropertyBehavior_Release(This) (This)->lpVtbl->Release(This)
#define IHTCPropertyBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTCPropertyBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTCPropertyBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTCPropertyBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTCPropertyBehavior_fireChange(This) (This)->lpVtbl->fireChange(This)
#define IHTCPropertyBehavior_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTCPropertyBehavior_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#endif
#endif
  HRESULT WINAPI IHTCPropertyBehavior_fireChange_Proxy(IHTCPropertyBehavior *This);
  void __RPC_STUB IHTCPropertyBehavior_fireChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCPropertyBehavior_put_value_Proxy(IHTCPropertyBehavior *This,VARIANT v);
  void __RPC_STUB IHTCPropertyBehavior_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCPropertyBehavior_get_value_Proxy(IHTCPropertyBehavior *This,VARIANT *p);
  void __RPC_STUB IHTCPropertyBehavior_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCMethodBehavior_INTERFACE_DEFINED__
#define __IHTCMethodBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCMethodBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTCMethodBehavior : public IDispatch {
  };
#else
  typedef struct IHTCMethodBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTCMethodBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTCMethodBehavior *This);
      ULONG (WINAPI *Release)(IHTCMethodBehavior *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTCMethodBehavior *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTCMethodBehavior *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTCMethodBehavior *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTCMethodBehavior *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } IHTCMethodBehaviorVtbl;
  interface IHTCMethodBehavior {
    CONST_VTBL struct IHTCMethodBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTCMethodBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTCMethodBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTCMethodBehavior_Release(This) (This)->lpVtbl->Release(This)
#define IHTCMethodBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTCMethodBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTCMethodBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTCMethodBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTCEventBehavior_INTERFACE_DEFINED__
#define __IHTCEventBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCEventBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTCEventBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI fire(IHTMLEventObj *pvar) = 0;
  };
#else
  typedef struct IHTCEventBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTCEventBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTCEventBehavior *This);
      ULONG (WINAPI *Release)(IHTCEventBehavior *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTCEventBehavior *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTCEventBehavior *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTCEventBehavior *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTCEventBehavior *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *fire)(IHTCEventBehavior *This,IHTMLEventObj *pvar);
    END_INTERFACE
  } IHTCEventBehaviorVtbl;
  interface IHTCEventBehavior {
    CONST_VTBL struct IHTCEventBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTCEventBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTCEventBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTCEventBehavior_Release(This) (This)->lpVtbl->Release(This)
#define IHTCEventBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTCEventBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTCEventBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTCEventBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTCEventBehavior_fire(This,pvar) (This)->lpVtbl->fire(This,pvar)
#endif
#endif
  HRESULT WINAPI IHTCEventBehavior_fire_Proxy(IHTCEventBehavior *This,IHTMLEventObj *pvar);
  void __RPC_STUB IHTCEventBehavior_fire_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCAttachBehavior_INTERFACE_DEFINED__
#define __IHTCAttachBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCAttachBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTCAttachBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI fireEvent(IDispatch *evt) = 0;
    virtual HRESULT WINAPI detachEvent(void) = 0;
  };
#else
  typedef struct IHTCAttachBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTCAttachBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTCAttachBehavior *This);
      ULONG (WINAPI *Release)(IHTCAttachBehavior *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTCAttachBehavior *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTCAttachBehavior *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTCAttachBehavior *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTCAttachBehavior *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *fireEvent)(IHTCAttachBehavior *This,IDispatch *evt);
      HRESULT (WINAPI *detachEvent)(IHTCAttachBehavior *This);
    END_INTERFACE
  } IHTCAttachBehaviorVtbl;
  interface IHTCAttachBehavior {
    CONST_VTBL struct IHTCAttachBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTCAttachBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTCAttachBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTCAttachBehavior_Release(This) (This)->lpVtbl->Release(This)
#define IHTCAttachBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTCAttachBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTCAttachBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTCAttachBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTCAttachBehavior_fireEvent(This,evt) (This)->lpVtbl->fireEvent(This,evt)
#define IHTCAttachBehavior_detachEvent(This) (This)->lpVtbl->detachEvent(This)
#endif
#endif
  HRESULT WINAPI IHTCAttachBehavior_fireEvent_Proxy(IHTCAttachBehavior *This,IDispatch *evt);
  void __RPC_STUB IHTCAttachBehavior_fireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCAttachBehavior_detachEvent_Proxy(IHTCAttachBehavior *This);
  void __RPC_STUB IHTCAttachBehavior_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCAttachBehavior2_INTERFACE_DEFINED__
#define __IHTCAttachBehavior2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCAttachBehavior2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTCAttachBehavior2 : public IDispatch {
  public:
    virtual HRESULT WINAPI fireEvent(VARIANT evt) = 0;
  };
#else
  typedef struct IHTCAttachBehavior2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTCAttachBehavior2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTCAttachBehavior2 *This);
      ULONG (WINAPI *Release)(IHTCAttachBehavior2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTCAttachBehavior2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTCAttachBehavior2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTCAttachBehavior2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTCAttachBehavior2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *fireEvent)(IHTCAttachBehavior2 *This,VARIANT evt);
    END_INTERFACE
  } IHTCAttachBehavior2Vtbl;
  interface IHTCAttachBehavior2 {
    CONST_VTBL struct IHTCAttachBehavior2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTCAttachBehavior2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTCAttachBehavior2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTCAttachBehavior2_Release(This) (This)->lpVtbl->Release(This)
#define IHTCAttachBehavior2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTCAttachBehavior2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTCAttachBehavior2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTCAttachBehavior2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTCAttachBehavior2_fireEvent(This,evt) (This)->lpVtbl->fireEvent(This,evt)
#endif
#endif
  HRESULT WINAPI IHTCAttachBehavior2_fireEvent_Proxy(IHTCAttachBehavior2 *This,VARIANT evt);
  void __RPC_STUB IHTCAttachBehavior2_fireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTCDescBehavior_INTERFACE_DEFINED__
#define __IHTCDescBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTCDescBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTCDescBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI get_urn(BSTR *p) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
  };
#else
  typedef struct IHTCDescBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTCDescBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTCDescBehavior *This);
      ULONG (WINAPI *Release)(IHTCDescBehavior *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTCDescBehavior *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTCDescBehavior *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTCDescBehavior *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTCDescBehavior *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_urn)(IHTCDescBehavior *This,BSTR *p);
      HRESULT (WINAPI *get_name)(IHTCDescBehavior *This,BSTR *p);
    END_INTERFACE
  } IHTCDescBehaviorVtbl;
  interface IHTCDescBehavior {
    CONST_VTBL struct IHTCDescBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTCDescBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTCDescBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTCDescBehavior_Release(This) (This)->lpVtbl->Release(This)
#define IHTCDescBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTCDescBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTCDescBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTCDescBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTCDescBehavior_get_urn(This,p) (This)->lpVtbl->get_urn(This,p)
#define IHTCDescBehavior_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#endif
#endif
  HRESULT WINAPI IHTCDescBehavior_get_urn_Proxy(IHTCDescBehavior *This,BSTR *p);
  void __RPC_STUB IHTCDescBehavior_get_urn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTCDescBehavior_get_name_Proxy(IHTCDescBehavior *This,BSTR *p);
  void __RPC_STUB IHTCDescBehavior_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTCDefaultDispatch_DISPINTERFACE_DEFINED__
#define __DispHTCDefaultDispatch_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCDefaultDispatch;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTCDefaultDispatch : public IDispatch {
  };
#else
  typedef struct DispHTCDefaultDispatchVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTCDefaultDispatch *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTCDefaultDispatch *This);
      ULONG (WINAPI *Release)(DispHTCDefaultDispatch *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTCDefaultDispatch *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTCDefaultDispatch *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTCDefaultDispatch *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTCDefaultDispatch *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTCDefaultDispatchVtbl;
  interface DispHTCDefaultDispatch {
    CONST_VTBL struct DispHTCDefaultDispatchVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTCDefaultDispatch_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTCDefaultDispatch_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTCDefaultDispatch_Release(This) (This)->lpVtbl->Release(This)
#define DispHTCDefaultDispatch_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTCDefaultDispatch_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTCDefaultDispatch_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTCDefaultDispatch_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTCDefaultDispatch;
#ifdef __cplusplus
  class HTCDefaultDispatch;
#endif

#ifndef __DispHTCPropertyBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCPropertyBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCPropertyBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTCPropertyBehavior : public IDispatch {
  };
#else
  typedef struct DispHTCPropertyBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTCPropertyBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTCPropertyBehavior *This);
      ULONG (WINAPI *Release)(DispHTCPropertyBehavior *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTCPropertyBehavior *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTCPropertyBehavior *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTCPropertyBehavior *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTCPropertyBehavior *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTCPropertyBehaviorVtbl;
  interface DispHTCPropertyBehavior {
    CONST_VTBL struct DispHTCPropertyBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTCPropertyBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTCPropertyBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTCPropertyBehavior_Release(This) (This)->lpVtbl->Release(This)
#define DispHTCPropertyBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTCPropertyBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTCPropertyBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTCPropertyBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTCPropertyBehavior;
#ifdef __cplusplus
  class HTCPropertyBehavior;
#endif

#ifndef __DispHTCMethodBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCMethodBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCMethodBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTCMethodBehavior : public IDispatch {
  };
#else
  typedef struct DispHTCMethodBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTCMethodBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTCMethodBehavior *This);
      ULONG (WINAPI *Release)(DispHTCMethodBehavior *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTCMethodBehavior *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTCMethodBehavior *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTCMethodBehavior *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTCMethodBehavior *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTCMethodBehaviorVtbl;
  interface DispHTCMethodBehavior {
    CONST_VTBL struct DispHTCMethodBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTCMethodBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTCMethodBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTCMethodBehavior_Release(This) (This)->lpVtbl->Release(This)
#define DispHTCMethodBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTCMethodBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTCMethodBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTCMethodBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTCMethodBehavior;
#ifdef __cplusplus
  class HTCMethodBehavior;
#endif

#ifndef __DispHTCEventBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCEventBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCEventBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTCEventBehavior : public IDispatch {
  };
#else
  typedef struct DispHTCEventBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTCEventBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTCEventBehavior *This);
      ULONG (WINAPI *Release)(DispHTCEventBehavior *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTCEventBehavior *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTCEventBehavior *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTCEventBehavior *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTCEventBehavior *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTCEventBehaviorVtbl;
  interface DispHTCEventBehavior {
    CONST_VTBL struct DispHTCEventBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTCEventBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTCEventBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTCEventBehavior_Release(This) (This)->lpVtbl->Release(This)
#define DispHTCEventBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTCEventBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTCEventBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTCEventBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTCEventBehavior;
#ifdef __cplusplus
  class HTCEventBehavior;
#endif

#ifndef __DispHTCAttachBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCAttachBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCAttachBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTCAttachBehavior : public IDispatch {
  };
#else
  typedef struct DispHTCAttachBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTCAttachBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTCAttachBehavior *This);
      ULONG (WINAPI *Release)(DispHTCAttachBehavior *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTCAttachBehavior *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTCAttachBehavior *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTCAttachBehavior *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTCAttachBehavior *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTCAttachBehaviorVtbl;
  interface DispHTCAttachBehavior {
    CONST_VTBL struct DispHTCAttachBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTCAttachBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTCAttachBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTCAttachBehavior_Release(This) (This)->lpVtbl->Release(This)
#define DispHTCAttachBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTCAttachBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTCAttachBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTCAttachBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTCAttachBehavior;
#ifdef __cplusplus
  class HTCAttachBehavior;
#endif

#ifndef __DispHTCDescBehavior_DISPINTERFACE_DEFINED__
#define __DispHTCDescBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTCDescBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTCDescBehavior : public IDispatch {
  };
#else
  typedef struct DispHTCDescBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTCDescBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTCDescBehavior *This);
      ULONG (WINAPI *Release)(DispHTCDescBehavior *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTCDescBehavior *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTCDescBehavior *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTCDescBehavior *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTCDescBehavior *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTCDescBehaviorVtbl;
  interface DispHTCDescBehavior {
    CONST_VTBL struct DispHTCDescBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTCDescBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTCDescBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTCDescBehavior_Release(This) (This)->lpVtbl->Release(This)
#define DispHTCDescBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTCDescBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTCDescBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTCDescBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTCDescBehavior;
#ifdef __cplusplus
  class HTCDescBehavior;
#endif

#ifndef __IHTMLUrnCollection_INTERFACE_DEFINED__
#define __IHTMLUrnCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLUrnCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLUrnCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI item(long index,BSTR *ppUrn) = 0;
  };
#else
  typedef struct IHTMLUrnCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLUrnCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLUrnCollection *This);
      ULONG (WINAPI *Release)(IHTMLUrnCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLUrnCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLUrnCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLUrnCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLUrnCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLUrnCollection *This,long *p);
      HRESULT (WINAPI *item)(IHTMLUrnCollection *This,long index,BSTR *ppUrn);
    END_INTERFACE
  } IHTMLUrnCollectionVtbl;
  interface IHTMLUrnCollection {
    CONST_VTBL struct IHTMLUrnCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLUrnCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLUrnCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLUrnCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLUrnCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLUrnCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLUrnCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLUrnCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLUrnCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLUrnCollection_item(This,index,ppUrn) (This)->lpVtbl->item(This,index,ppUrn)
#endif
#endif
  HRESULT WINAPI IHTMLUrnCollection_get_length_Proxy(IHTMLUrnCollection *This,long *p);
  void __RPC_STUB IHTMLUrnCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUrnCollection_item_Proxy(IHTMLUrnCollection *This,long index,BSTR *ppUrn);
  void __RPC_STUB IHTMLUrnCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLUrnCollection;
#ifdef __cplusplus
  class HTMLUrnCollection;
#endif

#ifndef __IHTMLGenericElement_INTERFACE_DEFINED__
#define __IHTMLGenericElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLGenericElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLGenericElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_recordset(IDispatch **p) = 0;
    virtual HRESULT WINAPI namedRecordset(BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset) = 0;
  };
#else
  typedef struct IHTMLGenericElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLGenericElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLGenericElement *This);
      ULONG (WINAPI *Release)(IHTMLGenericElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLGenericElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLGenericElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLGenericElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLGenericElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_recordset)(IHTMLGenericElement *This,IDispatch **p);
      HRESULT (WINAPI *namedRecordset)(IHTMLGenericElement *This,BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset);
    END_INTERFACE
  } IHTMLGenericElementVtbl;
  interface IHTMLGenericElement {
    CONST_VTBL struct IHTMLGenericElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLGenericElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLGenericElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLGenericElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLGenericElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLGenericElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLGenericElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLGenericElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLGenericElement_get_recordset(This,p) (This)->lpVtbl->get_recordset(This,p)
#define IHTMLGenericElement_namedRecordset(This,dataMember,hierarchy,ppRecordset) (This)->lpVtbl->namedRecordset(This,dataMember,hierarchy,ppRecordset)
#endif
#endif
  HRESULT WINAPI IHTMLGenericElement_get_recordset_Proxy(IHTMLGenericElement *This,IDispatch **p);
  void __RPC_STUB IHTMLGenericElement_get_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLGenericElement_namedRecordset_Proxy(IHTMLGenericElement *This,BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset);
  void __RPC_STUB IHTMLGenericElement_namedRecordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLGenericElement_DISPINTERFACE_DEFINED__
#define __DispHTMLGenericElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLGenericElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLGenericElement : public IDispatch {
  };
#else
  typedef struct DispHTMLGenericElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLGenericElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLGenericElement *This);
      ULONG (WINAPI *Release)(DispHTMLGenericElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLGenericElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLGenericElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLGenericElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLGenericElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLGenericElementVtbl;
  interface DispHTMLGenericElement {
    CONST_VTBL struct DispHTMLGenericElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLGenericElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLGenericElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLGenericElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLGenericElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLGenericElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLGenericElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLGenericElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLGenericElement;
#ifdef __cplusplus
  class HTMLGenericElement;
#endif

#ifndef __IHTMLStyleSheetRule_INTERFACE_DEFINED__
#define __IHTMLStyleSheetRule_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetRule;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLStyleSheetRule : public IDispatch {
  public:
    virtual HRESULT WINAPI put_selectorText(BSTR v) = 0;
    virtual HRESULT WINAPI get_selectorText(BSTR *p) = 0;
    virtual HRESULT WINAPI get_style(IHTMLRuleStyle **p) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
  };
#else
  typedef struct IHTMLStyleSheetRuleVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyleSheetRule *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyleSheetRule *This);
      ULONG (WINAPI *Release)(IHTMLStyleSheetRule *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyleSheetRule *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyleSheetRule *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyleSheetRule *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyleSheetRule *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_selectorText)(IHTMLStyleSheetRule *This,BSTR v);
      HRESULT (WINAPI *get_selectorText)(IHTMLStyleSheetRule *This,BSTR *p);
      HRESULT (WINAPI *get_style)(IHTMLStyleSheetRule *This,IHTMLRuleStyle **p);
      HRESULT (WINAPI *get_readOnly)(IHTMLStyleSheetRule *This,VARIANT_BOOL *p);
    END_INTERFACE
  } IHTMLStyleSheetRuleVtbl;
  interface IHTMLStyleSheetRule {
    CONST_VTBL struct IHTMLStyleSheetRuleVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyleSheetRule_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyleSheetRule_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyleSheetRule_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyleSheetRule_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyleSheetRule_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyleSheetRule_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyleSheetRule_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyleSheetRule_put_selectorText(This,v) (This)->lpVtbl->put_selectorText(This,v)
#define IHTMLStyleSheetRule_get_selectorText(This,p) (This)->lpVtbl->get_selectorText(This,p)
#define IHTMLStyleSheetRule_get_style(This,p) (This)->lpVtbl->get_style(This,p)
#define IHTMLStyleSheetRule_get_readOnly(This,p) (This)->lpVtbl->get_readOnly(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLStyleSheetRule_put_selectorText_Proxy(IHTMLStyleSheetRule *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheetRule_put_selectorText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetRule_get_selectorText_Proxy(IHTMLStyleSheetRule *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheetRule_get_selectorText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetRule_get_style_Proxy(IHTMLStyleSheetRule *This,IHTMLRuleStyle **p);
  void __RPC_STUB IHTMLStyleSheetRule_get_style_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetRule_get_readOnly_Proxy(IHTMLStyleSheetRule *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyleSheetRule_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyleSheetRulesCollection_INTERFACE_DEFINED__
#define __IHTMLStyleSheetRulesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetRulesCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLStyleSheetRulesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI item(long index,IHTMLStyleSheetRule **ppHTMLStyleSheetRule) = 0;
  };
#else
  typedef struct IHTMLStyleSheetRulesCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyleSheetRulesCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyleSheetRulesCollection *This);
      ULONG (WINAPI *Release)(IHTMLStyleSheetRulesCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyleSheetRulesCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyleSheetRulesCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyleSheetRulesCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyleSheetRulesCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLStyleSheetRulesCollection *This,long *p);
      HRESULT (WINAPI *item)(IHTMLStyleSheetRulesCollection *This,long index,IHTMLStyleSheetRule **ppHTMLStyleSheetRule);
    END_INTERFACE
  } IHTMLStyleSheetRulesCollectionVtbl;
  interface IHTMLStyleSheetRulesCollection {
    CONST_VTBL struct IHTMLStyleSheetRulesCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyleSheetRulesCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyleSheetRulesCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyleSheetRulesCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyleSheetRulesCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyleSheetRulesCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyleSheetRulesCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyleSheetRulesCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyleSheetRulesCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLStyleSheetRulesCollection_item(This,index,ppHTMLStyleSheetRule) (This)->lpVtbl->item(This,index,ppHTMLStyleSheetRule)
#endif
#endif
  HRESULT WINAPI IHTMLStyleSheetRulesCollection_get_length_Proxy(IHTMLStyleSheetRulesCollection *This,long *p);
  void __RPC_STUB IHTMLStyleSheetRulesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetRulesCollection_item_Proxy(IHTMLStyleSheetRulesCollection *This,long index,IHTMLStyleSheetRule **ppHTMLStyleSheetRule);
  void __RPC_STUB IHTMLStyleSheetRulesCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetRule;
#ifdef __cplusplus
  class HTMLStyleSheetRule;
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetRulesCollection;
#ifdef __cplusplus
  class HTMLStyleSheetRulesCollection;
#endif

#ifndef __IHTMLStyleSheetPage_INTERFACE_DEFINED__
#define __IHTMLStyleSheetPage_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetPage;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLStyleSheetPage : public IDispatch {
  public:
    virtual HRESULT WINAPI get_selector(BSTR *p) = 0;
    virtual HRESULT WINAPI get_pseudoClass(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLStyleSheetPageVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyleSheetPage *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyleSheetPage *This);
      ULONG (WINAPI *Release)(IHTMLStyleSheetPage *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyleSheetPage *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyleSheetPage *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyleSheetPage *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyleSheetPage *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_selector)(IHTMLStyleSheetPage *This,BSTR *p);
      HRESULT (WINAPI *get_pseudoClass)(IHTMLStyleSheetPage *This,BSTR *p);
    END_INTERFACE
  } IHTMLStyleSheetPageVtbl;
  interface IHTMLStyleSheetPage {
    CONST_VTBL struct IHTMLStyleSheetPageVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyleSheetPage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyleSheetPage_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyleSheetPage_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyleSheetPage_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyleSheetPage_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyleSheetPage_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyleSheetPage_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyleSheetPage_get_selector(This,p) (This)->lpVtbl->get_selector(This,p)
#define IHTMLStyleSheetPage_get_pseudoClass(This,p) (This)->lpVtbl->get_pseudoClass(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLStyleSheetPage_get_selector_Proxy(IHTMLStyleSheetPage *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheetPage_get_selector_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetPage_get_pseudoClass_Proxy(IHTMLStyleSheetPage *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheetPage_get_pseudoClass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyleSheetPagesCollection_INTERFACE_DEFINED__
#define __IHTMLStyleSheetPagesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetPagesCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLStyleSheetPagesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI item(long index,IHTMLStyleSheetPage **ppHTMLStyleSheetPage) = 0;
  };
#else
  typedef struct IHTMLStyleSheetPagesCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyleSheetPagesCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyleSheetPagesCollection *This);
      ULONG (WINAPI *Release)(IHTMLStyleSheetPagesCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyleSheetPagesCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyleSheetPagesCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyleSheetPagesCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyleSheetPagesCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLStyleSheetPagesCollection *This,long *p);
      HRESULT (WINAPI *item)(IHTMLStyleSheetPagesCollection *This,long index,IHTMLStyleSheetPage **ppHTMLStyleSheetPage);
    END_INTERFACE
  } IHTMLStyleSheetPagesCollectionVtbl;
  interface IHTMLStyleSheetPagesCollection {
    CONST_VTBL struct IHTMLStyleSheetPagesCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyleSheetPagesCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyleSheetPagesCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyleSheetPagesCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyleSheetPagesCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyleSheetPagesCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyleSheetPagesCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyleSheetPagesCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyleSheetPagesCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLStyleSheetPagesCollection_item(This,index,ppHTMLStyleSheetPage) (This)->lpVtbl->item(This,index,ppHTMLStyleSheetPage)
#endif
#endif
  HRESULT WINAPI IHTMLStyleSheetPagesCollection_get_length_Proxy(IHTMLStyleSheetPagesCollection *This,long *p);
  void __RPC_STUB IHTMLStyleSheetPagesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetPagesCollection_item_Proxy(IHTMLStyleSheetPagesCollection *This,long index,IHTMLStyleSheetPage **ppHTMLStyleSheetPage);
  void __RPC_STUB IHTMLStyleSheetPagesCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetPage;
#ifdef __cplusplus
  class HTMLStyleSheetPage;
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetPagesCollection;
#ifdef __cplusplus
  class HTMLStyleSheetPagesCollection;
#endif

#ifndef __IHTMLStyleSheetsCollection_INTERFACE_DEFINED__
#define __IHTMLStyleSheetsCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheetsCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLStyleSheetsCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
  };
#else
  typedef struct IHTMLStyleSheetsCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyleSheetsCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyleSheetsCollection *This);
      ULONG (WINAPI *Release)(IHTMLStyleSheetsCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyleSheetsCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyleSheetsCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyleSheetsCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyleSheetsCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLStyleSheetsCollection *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLStyleSheetsCollection *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLStyleSheetsCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
    END_INTERFACE
  } IHTMLStyleSheetsCollectionVtbl;
  interface IHTMLStyleSheetsCollection {
    CONST_VTBL struct IHTMLStyleSheetsCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyleSheetsCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyleSheetsCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyleSheetsCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyleSheetsCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyleSheetsCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyleSheetsCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyleSheetsCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyleSheetsCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLStyleSheetsCollection_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLStyleSheetsCollection_item(This,pvarIndex,pvarResult) (This)->lpVtbl->item(This,pvarIndex,pvarResult)
#endif
#endif
  HRESULT WINAPI IHTMLStyleSheetsCollection_get_length_Proxy(IHTMLStyleSheetsCollection *This,long *p);
  void __RPC_STUB IHTMLStyleSheetsCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetsCollection_get__newEnum_Proxy(IHTMLStyleSheetsCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLStyleSheetsCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheetsCollection_item_Proxy(IHTMLStyleSheetsCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLStyleSheetsCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyleSheet_INTERFACE_DEFINED__
#define __IHTMLStyleSheet_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheet;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLStyleSheet : public IDispatch {
  public:
    virtual HRESULT WINAPI put_title(BSTR v) = 0;
    virtual HRESULT WINAPI get_title(BSTR *p) = 0;
    virtual HRESULT WINAPI get_parentStyleSheet(IHTMLStyleSheet **p) = 0;
    virtual HRESULT WINAPI get_owningElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_imports(IHTMLStyleSheetsCollection **p) = 0;
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_id(BSTR *p) = 0;
    virtual HRESULT WINAPI addImport(BSTR bstrURL,long lIndex,long *plIndex) = 0;
    virtual HRESULT WINAPI addRule(BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex) = 0;
    virtual HRESULT WINAPI removeImport(long lIndex) = 0;
    virtual HRESULT WINAPI removeRule(long lIndex) = 0;
    virtual HRESULT WINAPI put_media(BSTR v) = 0;
    virtual HRESULT WINAPI get_media(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cssText(BSTR v) = 0;
    virtual HRESULT WINAPI get_cssText(BSTR *p) = 0;
    virtual HRESULT WINAPI get_rules(IHTMLStyleSheetRulesCollection **p) = 0;
  };
#else
  typedef struct IHTMLStyleSheetVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyleSheet *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyleSheet *This);
      ULONG (WINAPI *Release)(IHTMLStyleSheet *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyleSheet *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyleSheet *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyleSheet *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyleSheet *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_title)(IHTMLStyleSheet *This,BSTR v);
      HRESULT (WINAPI *get_title)(IHTMLStyleSheet *This,BSTR *p);
      HRESULT (WINAPI *get_parentStyleSheet)(IHTMLStyleSheet *This,IHTMLStyleSheet **p);
      HRESULT (WINAPI *get_owningElement)(IHTMLStyleSheet *This,IHTMLElement **p);
      HRESULT (WINAPI *put_disabled)(IHTMLStyleSheet *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLStyleSheet *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_readOnly)(IHTMLStyleSheet *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_imports)(IHTMLStyleSheet *This,IHTMLStyleSheetsCollection **p);
      HRESULT (WINAPI *put_href)(IHTMLStyleSheet *This,BSTR v);
      HRESULT (WINAPI *get_href)(IHTMLStyleSheet *This,BSTR *p);
      HRESULT (WINAPI *get_type)(IHTMLStyleSheet *This,BSTR *p);
      HRESULT (WINAPI *get_id)(IHTMLStyleSheet *This,BSTR *p);
      HRESULT (WINAPI *addImport)(IHTMLStyleSheet *This,BSTR bstrURL,long lIndex,long *plIndex);
      HRESULT (WINAPI *addRule)(IHTMLStyleSheet *This,BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex);
      HRESULT (WINAPI *removeImport)(IHTMLStyleSheet *This,long lIndex);
      HRESULT (WINAPI *removeRule)(IHTMLStyleSheet *This,long lIndex);
      HRESULT (WINAPI *put_media)(IHTMLStyleSheet *This,BSTR v);
      HRESULT (WINAPI *get_media)(IHTMLStyleSheet *This,BSTR *p);
      HRESULT (WINAPI *put_cssText)(IHTMLStyleSheet *This,BSTR v);
      HRESULT (WINAPI *get_cssText)(IHTMLStyleSheet *This,BSTR *p);
      HRESULT (WINAPI *get_rules)(IHTMLStyleSheet *This,IHTMLStyleSheetRulesCollection **p);
    END_INTERFACE
  } IHTMLStyleSheetVtbl;
  interface IHTMLStyleSheet {
    CONST_VTBL struct IHTMLStyleSheetVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyleSheet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyleSheet_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyleSheet_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyleSheet_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyleSheet_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyleSheet_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyleSheet_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyleSheet_put_title(This,v) (This)->lpVtbl->put_title(This,v)
#define IHTMLStyleSheet_get_title(This,p) (This)->lpVtbl->get_title(This,p)
#define IHTMLStyleSheet_get_parentStyleSheet(This,p) (This)->lpVtbl->get_parentStyleSheet(This,p)
#define IHTMLStyleSheet_get_owningElement(This,p) (This)->lpVtbl->get_owningElement(This,p)
#define IHTMLStyleSheet_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLStyleSheet_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLStyleSheet_get_readOnly(This,p) (This)->lpVtbl->get_readOnly(This,p)
#define IHTMLStyleSheet_get_imports(This,p) (This)->lpVtbl->get_imports(This,p)
#define IHTMLStyleSheet_put_href(This,v) (This)->lpVtbl->put_href(This,v)
#define IHTMLStyleSheet_get_href(This,p) (This)->lpVtbl->get_href(This,p)
#define IHTMLStyleSheet_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLStyleSheet_get_id(This,p) (This)->lpVtbl->get_id(This,p)
#define IHTMLStyleSheet_addImport(This,bstrURL,lIndex,plIndex) (This)->lpVtbl->addImport(This,bstrURL,lIndex,plIndex)
#define IHTMLStyleSheet_addRule(This,bstrSelector,bstrStyle,lIndex,plNewIndex) (This)->lpVtbl->addRule(This,bstrSelector,bstrStyle,lIndex,plNewIndex)
#define IHTMLStyleSheet_removeImport(This,lIndex) (This)->lpVtbl->removeImport(This,lIndex)
#define IHTMLStyleSheet_removeRule(This,lIndex) (This)->lpVtbl->removeRule(This,lIndex)
#define IHTMLStyleSheet_put_media(This,v) (This)->lpVtbl->put_media(This,v)
#define IHTMLStyleSheet_get_media(This,p) (This)->lpVtbl->get_media(This,p)
#define IHTMLStyleSheet_put_cssText(This,v) (This)->lpVtbl->put_cssText(This,v)
#define IHTMLStyleSheet_get_cssText(This,p) (This)->lpVtbl->get_cssText(This,p)
#define IHTMLStyleSheet_get_rules(This,p) (This)->lpVtbl->get_rules(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLStyleSheet_put_title_Proxy(IHTMLStyleSheet *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheet_put_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_title_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_parentStyleSheet_Proxy(IHTMLStyleSheet *This,IHTMLStyleSheet **p);
  void __RPC_STUB IHTMLStyleSheet_get_parentStyleSheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_owningElement_Proxy(IHTMLStyleSheet *This,IHTMLElement **p);
  void __RPC_STUB IHTMLStyleSheet_get_owningElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_put_disabled_Proxy(IHTMLStyleSheet *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyleSheet_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_disabled_Proxy(IHTMLStyleSheet *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyleSheet_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_readOnly_Proxy(IHTMLStyleSheet *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyleSheet_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_imports_Proxy(IHTMLStyleSheet *This,IHTMLStyleSheetsCollection **p);
  void __RPC_STUB IHTMLStyleSheet_get_imports_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_put_href_Proxy(IHTMLStyleSheet *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheet_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_href_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_type_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_id_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_id_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_addImport_Proxy(IHTMLStyleSheet *This,BSTR bstrURL,long lIndex,long *plIndex);
  void __RPC_STUB IHTMLStyleSheet_addImport_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_addRule_Proxy(IHTMLStyleSheet *This,BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex);
  void __RPC_STUB IHTMLStyleSheet_addRule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_removeImport_Proxy(IHTMLStyleSheet *This,long lIndex);
  void __RPC_STUB IHTMLStyleSheet_removeImport_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_removeRule_Proxy(IHTMLStyleSheet *This,long lIndex);
  void __RPC_STUB IHTMLStyleSheet_removeRule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_put_media_Proxy(IHTMLStyleSheet *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheet_put_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_media_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_put_cssText_Proxy(IHTMLStyleSheet *This,BSTR v);
  void __RPC_STUB IHTMLStyleSheet_put_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_cssText_Proxy(IHTMLStyleSheet *This,BSTR *p);
  void __RPC_STUB IHTMLStyleSheet_get_cssText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet_get_rules_Proxy(IHTMLStyleSheet *This,IHTMLStyleSheetRulesCollection **p);
  void __RPC_STUB IHTMLStyleSheet_get_rules_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLStyleSheet2_INTERFACE_DEFINED__
#define __IHTMLStyleSheet2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleSheet2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLStyleSheet2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_pages(IHTMLStyleSheetPagesCollection **p) = 0;
    virtual HRESULT WINAPI addPageRule(BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex) = 0;
  };
#else
  typedef struct IHTMLStyleSheet2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyleSheet2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyleSheet2 *This);
      ULONG (WINAPI *Release)(IHTMLStyleSheet2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyleSheet2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyleSheet2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyleSheet2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyleSheet2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_pages)(IHTMLStyleSheet2 *This,IHTMLStyleSheetPagesCollection **p);
      HRESULT (WINAPI *addPageRule)(IHTMLStyleSheet2 *This,BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex);
    END_INTERFACE
  } IHTMLStyleSheet2Vtbl;
  interface IHTMLStyleSheet2 {
    CONST_VTBL struct IHTMLStyleSheet2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyleSheet2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyleSheet2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyleSheet2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyleSheet2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyleSheet2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyleSheet2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyleSheet2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyleSheet2_get_pages(This,p) (This)->lpVtbl->get_pages(This,p)
#define IHTMLStyleSheet2_addPageRule(This,bstrSelector,bstrStyle,lIndex,plNewIndex) (This)->lpVtbl->addPageRule(This,bstrSelector,bstrStyle,lIndex,plNewIndex)
#endif
#endif
  HRESULT WINAPI IHTMLStyleSheet2_get_pages_Proxy(IHTMLStyleSheet2 *This,IHTMLStyleSheetPagesCollection **p);
  void __RPC_STUB IHTMLStyleSheet2_get_pages_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleSheet2_addPageRule_Proxy(IHTMLStyleSheet2 *This,BSTR bstrSelector,BSTR bstrStyle,long lIndex,long *plNewIndex);
  void __RPC_STUB IHTMLStyleSheet2_addPageRule_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLStyleSheet_DISPINTERFACE_DEFINED__
#define __DispHTMLStyleSheet_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLStyleSheet;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct  DispHTMLStyleSheet : public IDispatch {
  };
#else
  typedef struct DispHTMLStyleSheetVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLStyleSheet *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLStyleSheet *This);
      ULONG (WINAPI *Release)(DispHTMLStyleSheet *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLStyleSheet *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLStyleSheet *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLStyleSheet *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLStyleSheet *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLStyleSheetVtbl;
  interface DispHTMLStyleSheet {
    CONST_VTBL struct DispHTMLStyleSheetVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLStyleSheet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLStyleSheet_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLStyleSheet_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLStyleSheet_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLStyleSheet_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLStyleSheet_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLStyleSheet_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheet;
#ifdef __cplusplus
  class HTMLStyleSheet;
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleSheetsCollection;
#ifdef __cplusplus
  class HTMLStyleSheetsCollection;
#endif

#ifndef __HTMLLinkElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLLinkElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLLinkElementEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLLinkElementEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLLinkElementEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLLinkElementEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLLinkElementEvents2 *This);
      ULONG (WINAPI *Release)(HTMLLinkElementEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLLinkElementEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLLinkElementEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLLinkElementEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLLinkElementEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLLinkElementEvents2Vtbl;
  interface HTMLLinkElementEvents2 {
    CONST_VTBL struct HTMLLinkElementEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLLinkElementEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLLinkElementEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLLinkElementEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLLinkElementEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLLinkElementEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLLinkElementEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLLinkElementEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLLinkElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLLinkElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLLinkElementEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLLinkElementEvents : public IDispatch {
  };
#else
  typedef struct HTMLLinkElementEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLLinkElementEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLLinkElementEvents *This);
      ULONG (WINAPI *Release)(HTMLLinkElementEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLLinkElementEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLLinkElementEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLLinkElementEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLLinkElementEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLLinkElementEventsVtbl;
  interface HTMLLinkElementEvents {
    CONST_VTBL struct HTMLLinkElementEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLLinkElementEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLLinkElementEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLLinkElementEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLLinkElementEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLLinkElementEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLLinkElementEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLLinkElementEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLLinkElement_INTERFACE_DEFINED__
#define __IHTMLLinkElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLinkElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLLinkElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rel(BSTR v) = 0;
    virtual HRESULT WINAPI get_rel(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rev(BSTR v) = 0;
    virtual HRESULT WINAPI get_rev(BSTR *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_styleSheet(IHTMLStyleSheet **p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_media(BSTR v) = 0;
    virtual HRESULT WINAPI get_media(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLLinkElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLLinkElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLLinkElement *This);
      ULONG (WINAPI *Release)(IHTMLLinkElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLLinkElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLLinkElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLLinkElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLLinkElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_href)(IHTMLLinkElement *This,BSTR v);
      HRESULT (WINAPI *get_href)(IHTMLLinkElement *This,BSTR *p);
      HRESULT (WINAPI *put_rel)(IHTMLLinkElement *This,BSTR v);
      HRESULT (WINAPI *get_rel)(IHTMLLinkElement *This,BSTR *p);
      HRESULT (WINAPI *put_rev)(IHTMLLinkElement *This,BSTR v);
      HRESULT (WINAPI *get_rev)(IHTMLLinkElement *This,BSTR *p);
      HRESULT (WINAPI *put_type)(IHTMLLinkElement *This,BSTR v);
      HRESULT (WINAPI *get_type)(IHTMLLinkElement *This,BSTR *p);
      HRESULT (WINAPI *get_readyState)(IHTMLLinkElement *This,BSTR *p);
      HRESULT (WINAPI *put_onreadystatechange)(IHTMLLinkElement *This,VARIANT v);
      HRESULT (WINAPI *get_onreadystatechange)(IHTMLLinkElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onload)(IHTMLLinkElement *This,VARIANT v);
      HRESULT (WINAPI *get_onload)(IHTMLLinkElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onerror)(IHTMLLinkElement *This,VARIANT v);
      HRESULT (WINAPI *get_onerror)(IHTMLLinkElement *This,VARIANT *p);
      HRESULT (WINAPI *get_styleSheet)(IHTMLLinkElement *This,IHTMLStyleSheet **p);
      HRESULT (WINAPI *put_disabled)(IHTMLLinkElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLLinkElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_media)(IHTMLLinkElement *This,BSTR v);
      HRESULT (WINAPI *get_media)(IHTMLLinkElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLLinkElementVtbl;
  interface IHTMLLinkElement {
    CONST_VTBL struct IHTMLLinkElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLLinkElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLLinkElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLLinkElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLLinkElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLLinkElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLLinkElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLLinkElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLLinkElement_put_href(This,v) (This)->lpVtbl->put_href(This,v)
#define IHTMLLinkElement_get_href(This,p) (This)->lpVtbl->get_href(This,p)
#define IHTMLLinkElement_put_rel(This,v) (This)->lpVtbl->put_rel(This,v)
#define IHTMLLinkElement_get_rel(This,p) (This)->lpVtbl->get_rel(This,p)
#define IHTMLLinkElement_put_rev(This,v) (This)->lpVtbl->put_rev(This,v)
#define IHTMLLinkElement_get_rev(This,p) (This)->lpVtbl->get_rev(This,p)
#define IHTMLLinkElement_put_type(This,v) (This)->lpVtbl->put_type(This,v)
#define IHTMLLinkElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLLinkElement_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IHTMLLinkElement_put_onreadystatechange(This,v) (This)->lpVtbl->put_onreadystatechange(This,v)
#define IHTMLLinkElement_get_onreadystatechange(This,p) (This)->lpVtbl->get_onreadystatechange(This,p)
#define IHTMLLinkElement_put_onload(This,v) (This)->lpVtbl->put_onload(This,v)
#define IHTMLLinkElement_get_onload(This,p) (This)->lpVtbl->get_onload(This,p)
#define IHTMLLinkElement_put_onerror(This,v) (This)->lpVtbl->put_onerror(This,v)
#define IHTMLLinkElement_get_onerror(This,p) (This)->lpVtbl->get_onerror(This,p)
#define IHTMLLinkElement_get_styleSheet(This,p) (This)->lpVtbl->get_styleSheet(This,p)
#define IHTMLLinkElement_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLLinkElement_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLLinkElement_put_media(This,v) (This)->lpVtbl->put_media(This,v)
#define IHTMLLinkElement_get_media(This,p) (This)->lpVtbl->get_media(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLLinkElement_put_href_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_href_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_rel_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_rel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_rel_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_rel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_rev_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_rev_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_rev_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_rev_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_type_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_type_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_readyState_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_onreadystatechange_Proxy(IHTMLLinkElement *This,VARIANT v);
  void __RPC_STUB IHTMLLinkElement_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_onreadystatechange_Proxy(IHTMLLinkElement *This,VARIANT *p);
  void __RPC_STUB IHTMLLinkElement_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_onload_Proxy(IHTMLLinkElement *This,VARIANT v);
  void __RPC_STUB IHTMLLinkElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_onload_Proxy(IHTMLLinkElement *This,VARIANT *p);
  void __RPC_STUB IHTMLLinkElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_onerror_Proxy(IHTMLLinkElement *This,VARIANT v);
  void __RPC_STUB IHTMLLinkElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_onerror_Proxy(IHTMLLinkElement *This,VARIANT *p);
  void __RPC_STUB IHTMLLinkElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_styleSheet_Proxy(IHTMLLinkElement *This,IHTMLStyleSheet **p);
  void __RPC_STUB IHTMLLinkElement_get_styleSheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_disabled_Proxy(IHTMLLinkElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLLinkElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_disabled_Proxy(IHTMLLinkElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLLinkElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_put_media_Proxy(IHTMLLinkElement *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement_put_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement_get_media_Proxy(IHTMLLinkElement *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement_get_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLinkElement2_INTERFACE_DEFINED__
#define __IHTMLLinkElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLinkElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLLinkElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLLinkElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLLinkElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLLinkElement2 *This);
      ULONG (WINAPI *Release)(IHTMLLinkElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLLinkElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLLinkElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLLinkElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLLinkElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_target)(IHTMLLinkElement2 *This,BSTR v);
      HRESULT (WINAPI *get_target)(IHTMLLinkElement2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLLinkElement2Vtbl;
  interface IHTMLLinkElement2 {
    CONST_VTBL struct IHTMLLinkElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLLinkElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLLinkElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLLinkElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLLinkElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLLinkElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLLinkElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLLinkElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLLinkElement2_put_target(This,v) (This)->lpVtbl->put_target(This,v)
#define IHTMLLinkElement2_get_target(This,p) (This)->lpVtbl->get_target(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLLinkElement2_put_target_Proxy(IHTMLLinkElement2 *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement2_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement2_get_target_Proxy(IHTMLLinkElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement2_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLinkElement3_INTERFACE_DEFINED__
#define __IHTMLLinkElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLinkElement3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLLinkElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hreflang(BSTR v) = 0;
    virtual HRESULT WINAPI get_hreflang(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLLinkElement3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLLinkElement3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLLinkElement3 *This);
      ULONG (WINAPI *Release)(IHTMLLinkElement3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLLinkElement3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLLinkElement3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLLinkElement3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLLinkElement3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_charset)(IHTMLLinkElement3 *This,BSTR v);
      HRESULT (WINAPI *get_charset)(IHTMLLinkElement3 *This,BSTR *p);
      HRESULT (WINAPI *put_hreflang)(IHTMLLinkElement3 *This,BSTR v);
      HRESULT (WINAPI *get_hreflang)(IHTMLLinkElement3 *This,BSTR *p);
    END_INTERFACE
  } IHTMLLinkElement3Vtbl;
  interface IHTMLLinkElement3 {
    CONST_VTBL struct IHTMLLinkElement3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLLinkElement3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLLinkElement3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLLinkElement3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLLinkElement3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLLinkElement3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLLinkElement3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLLinkElement3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLLinkElement3_put_charset(This,v) (This)->lpVtbl->put_charset(This,v)
#define IHTMLLinkElement3_get_charset(This,p) (This)->lpVtbl->get_charset(This,p)
#define IHTMLLinkElement3_put_hreflang(This,v) (This)->lpVtbl->put_hreflang(This,v)
#define IHTMLLinkElement3_get_hreflang(This,p) (This)->lpVtbl->get_hreflang(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLLinkElement3_put_charset_Proxy(IHTMLLinkElement3 *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement3_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement3_get_charset_Proxy(IHTMLLinkElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement3_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement3_put_hreflang_Proxy(IHTMLLinkElement3 *This,BSTR v);
  void __RPC_STUB IHTMLLinkElement3_put_hreflang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLinkElement3_get_hreflang_Proxy(IHTMLLinkElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLLinkElement3_get_hreflang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLLinkElement_DISPINTERFACE_DEFINED__
#define __DispHTMLLinkElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLLinkElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLLinkElement : public IDispatch {
  };
#else
  typedef struct DispHTMLLinkElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLLinkElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLLinkElement *This);
      ULONG (WINAPI *Release)(DispHTMLLinkElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLLinkElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLLinkElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLLinkElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLLinkElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLLinkElementVtbl;
  interface DispHTMLLinkElement {
    CONST_VTBL struct DispHTMLLinkElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLLinkElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLLinkElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLLinkElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLLinkElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLLinkElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLLinkElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLLinkElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLLinkElement;
#ifdef __cplusplus
  class HTMLLinkElement;
#endif

#ifndef __IHTMLTxtRange_INTERFACE_DEFINED__
#define __IHTMLTxtRange_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTxtRange;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTxtRange : public IDispatch {
  public:
    virtual HRESULT WINAPI get_htmlText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
    virtual HRESULT WINAPI parentElement(IHTMLElement **parent) = 0;
    virtual HRESULT WINAPI duplicate(IHTMLTxtRange **Duplicate) = 0;
    virtual HRESULT WINAPI inRange(IHTMLTxtRange *Range,VARIANT_BOOL *InRange) = 0;
    virtual HRESULT WINAPI isEqual(IHTMLTxtRange *Range,VARIANT_BOOL *IsEqual) = 0;
    virtual HRESULT WINAPI scrollIntoView(VARIANT_BOOL fStart = -1) = 0;
    virtual HRESULT WINAPI collapse(VARIANT_BOOL Start = -1) = 0;
    virtual HRESULT WINAPI expand(BSTR Unit,VARIANT_BOOL *Success) = 0;
    virtual HRESULT WINAPI move(BSTR Unit,long Count,long *ActualCount) = 0;
    virtual HRESULT WINAPI moveStart(BSTR Unit,long Count,long *ActualCount) = 0;
    virtual HRESULT WINAPI moveEnd(BSTR Unit,long Count,long *ActualCount) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI pasteHTML(BSTR html) = 0;
    virtual HRESULT WINAPI moveToElementText(IHTMLElement *element) = 0;
    virtual HRESULT WINAPI setEndPoint(BSTR how,IHTMLTxtRange *SourceRange) = 0;
    virtual HRESULT WINAPI compareEndPoints(BSTR how,IHTMLTxtRange *SourceRange,long *ret) = 0;
    virtual HRESULT WINAPI findText(BSTR String,long count,long Flags,VARIANT_BOOL *Success) = 0;
    virtual HRESULT WINAPI moveToPoint(long x,long y) = 0;
    virtual HRESULT WINAPI getBookmark(BSTR *Boolmark) = 0;
    virtual HRESULT WINAPI moveToBookmark(BSTR Bookmark,VARIANT_BOOL *Success) = 0;
    virtual HRESULT WINAPI queryCommandSupported(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandEnabled(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandState(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandIndeterm(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandText(BSTR cmdID,BSTR *pcmdText) = 0;
    virtual HRESULT WINAPI queryCommandValue(BSTR cmdID,VARIANT *pcmdValue) = 0;
    virtual HRESULT WINAPI execCommand(BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI execCommandShowHelp(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
  };
#else
  typedef struct IHTMLTxtRangeVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTxtRange *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTxtRange *This);
      ULONG (WINAPI *Release)(IHTMLTxtRange *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTxtRange *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTxtRange *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTxtRange *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTxtRange *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_htmlText)(IHTMLTxtRange *This,BSTR *p);
      HRESULT (WINAPI *put_text)(IHTMLTxtRange *This,BSTR v);
      HRESULT (WINAPI *get_text)(IHTMLTxtRange *This,BSTR *p);
      HRESULT (WINAPI *parentElement)(IHTMLTxtRange *This,IHTMLElement **parent);
      HRESULT (WINAPI *duplicate)(IHTMLTxtRange *This,IHTMLTxtRange **Duplicate);
      HRESULT (WINAPI *inRange)(IHTMLTxtRange *This,IHTMLTxtRange *Range,VARIANT_BOOL *InRange);
      HRESULT (WINAPI *isEqual)(IHTMLTxtRange *This,IHTMLTxtRange *Range,VARIANT_BOOL *IsEqual);
      HRESULT (WINAPI *scrollIntoView)(IHTMLTxtRange *This,VARIANT_BOOL fStart);
      HRESULT (WINAPI *collapse)(IHTMLTxtRange *This,VARIANT_BOOL Start);
      HRESULT (WINAPI *expand)(IHTMLTxtRange *This,BSTR Unit,VARIANT_BOOL *Success);
      HRESULT (WINAPI *move)(IHTMLTxtRange *This,BSTR Unit,long Count,long *ActualCount);
      HRESULT (WINAPI *moveStart)(IHTMLTxtRange *This,BSTR Unit,long Count,long *ActualCount);
      HRESULT (WINAPI *moveEnd)(IHTMLTxtRange *This,BSTR Unit,long Count,long *ActualCount);
      HRESULT (WINAPI *select)(IHTMLTxtRange *This);
      HRESULT (WINAPI *pasteHTML)(IHTMLTxtRange *This,BSTR html);
      HRESULT (WINAPI *moveToElementText)(IHTMLTxtRange *This,IHTMLElement *element);
      HRESULT (WINAPI *setEndPoint)(IHTMLTxtRange *This,BSTR how,IHTMLTxtRange *SourceRange);
      HRESULT (WINAPI *compareEndPoints)(IHTMLTxtRange *This,BSTR how,IHTMLTxtRange *SourceRange,long *ret);
      HRESULT (WINAPI *findText)(IHTMLTxtRange *This,BSTR String,long count,long Flags,VARIANT_BOOL *Success);
      HRESULT (WINAPI *moveToPoint)(IHTMLTxtRange *This,long x,long y);
      HRESULT (WINAPI *getBookmark)(IHTMLTxtRange *This,BSTR *Boolmark);
      HRESULT (WINAPI *moveToBookmark)(IHTMLTxtRange *This,BSTR Bookmark,VARIANT_BOOL *Success);
      HRESULT (WINAPI *queryCommandSupported)(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *queryCommandEnabled)(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *queryCommandState)(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *queryCommandIndeterm)(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *queryCommandText)(IHTMLTxtRange *This,BSTR cmdID,BSTR *pcmdText);
      HRESULT (WINAPI *queryCommandValue)(IHTMLTxtRange *This,BSTR cmdID,VARIANT *pcmdValue);
      HRESULT (WINAPI *execCommand)(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *execCommandShowHelp)(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
    END_INTERFACE
  } IHTMLTxtRangeVtbl;
  interface IHTMLTxtRange {
    CONST_VTBL struct IHTMLTxtRangeVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTxtRange_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTxtRange_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTxtRange_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTxtRange_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTxtRange_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTxtRange_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTxtRange_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTxtRange_get_htmlText(This,p) (This)->lpVtbl->get_htmlText(This,p)
#define IHTMLTxtRange_put_text(This,v) (This)->lpVtbl->put_text(This,v)
#define IHTMLTxtRange_get_text(This,p) (This)->lpVtbl->get_text(This,p)
#define IHTMLTxtRange_parentElement(This,parent) (This)->lpVtbl->parentElement(This,parent)
#define IHTMLTxtRange_duplicate(This,Duplicate) (This)->lpVtbl->duplicate(This,Duplicate)
#define IHTMLTxtRange_inRange(This,Range,InRange) (This)->lpVtbl->inRange(This,Range,InRange)
#define IHTMLTxtRange_isEqual(This,Range,IsEqual) (This)->lpVtbl->isEqual(This,Range,IsEqual)
#define IHTMLTxtRange_scrollIntoView(This,fStart) (This)->lpVtbl->scrollIntoView(This,fStart)
#define IHTMLTxtRange_collapse(This,Start) (This)->lpVtbl->collapse(This,Start)
#define IHTMLTxtRange_expand(This,Unit,Success) (This)->lpVtbl->expand(This,Unit,Success)
#define IHTMLTxtRange_move(This,Unit,Count,ActualCount) (This)->lpVtbl->move(This,Unit,Count,ActualCount)
#define IHTMLTxtRange_moveStart(This,Unit,Count,ActualCount) (This)->lpVtbl->moveStart(This,Unit,Count,ActualCount)
#define IHTMLTxtRange_moveEnd(This,Unit,Count,ActualCount) (This)->lpVtbl->moveEnd(This,Unit,Count,ActualCount)
#define IHTMLTxtRange_select(This) (This)->lpVtbl->select(This)
#define IHTMLTxtRange_pasteHTML(This,html) (This)->lpVtbl->pasteHTML(This,html)
#define IHTMLTxtRange_moveToElementText(This,element) (This)->lpVtbl->moveToElementText(This,element)
#define IHTMLTxtRange_setEndPoint(This,how,SourceRange) (This)->lpVtbl->setEndPoint(This,how,SourceRange)
#define IHTMLTxtRange_compareEndPoints(This,how,SourceRange,ret) (This)->lpVtbl->compareEndPoints(This,how,SourceRange,ret)
#define IHTMLTxtRange_findText(This,String,count,Flags,Success) (This)->lpVtbl->findText(This,String,count,Flags,Success)
#define IHTMLTxtRange_moveToPoint(This,x,y) (This)->lpVtbl->moveToPoint(This,x,y)
#define IHTMLTxtRange_getBookmark(This,Boolmark) (This)->lpVtbl->getBookmark(This,Boolmark)
#define IHTMLTxtRange_moveToBookmark(This,Bookmark,Success) (This)->lpVtbl->moveToBookmark(This,Bookmark,Success)
#define IHTMLTxtRange_queryCommandSupported(This,cmdID,pfRet) (This)->lpVtbl->queryCommandSupported(This,cmdID,pfRet)
#define IHTMLTxtRange_queryCommandEnabled(This,cmdID,pfRet) (This)->lpVtbl->queryCommandEnabled(This,cmdID,pfRet)
#define IHTMLTxtRange_queryCommandState(This,cmdID,pfRet) (This)->lpVtbl->queryCommandState(This,cmdID,pfRet)
#define IHTMLTxtRange_queryCommandIndeterm(This,cmdID,pfRet) (This)->lpVtbl->queryCommandIndeterm(This,cmdID,pfRet)
#define IHTMLTxtRange_queryCommandText(This,cmdID,pcmdText) (This)->lpVtbl->queryCommandText(This,cmdID,pcmdText)
#define IHTMLTxtRange_queryCommandValue(This,cmdID,pcmdValue) (This)->lpVtbl->queryCommandValue(This,cmdID,pcmdValue)
#define IHTMLTxtRange_execCommand(This,cmdID,showUI,value,pfRet) (This)->lpVtbl->execCommand(This,cmdID,showUI,value,pfRet)
#define IHTMLTxtRange_execCommandShowHelp(This,cmdID,pfRet) (This)->lpVtbl->execCommandShowHelp(This,cmdID,pfRet)
#endif
#endif
  HRESULT WINAPI IHTMLTxtRange_get_htmlText_Proxy(IHTMLTxtRange *This,BSTR *p);
  void __RPC_STUB IHTMLTxtRange_get_htmlText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_put_text_Proxy(IHTMLTxtRange *This,BSTR v);
  void __RPC_STUB IHTMLTxtRange_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_get_text_Proxy(IHTMLTxtRange *This,BSTR *p);
  void __RPC_STUB IHTMLTxtRange_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_parentElement_Proxy(IHTMLTxtRange *This,IHTMLElement **parent);
  void __RPC_STUB IHTMLTxtRange_parentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_duplicate_Proxy(IHTMLTxtRange *This,IHTMLTxtRange **Duplicate);
  void __RPC_STUB IHTMLTxtRange_duplicate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_inRange_Proxy(IHTMLTxtRange *This,IHTMLTxtRange *Range,VARIANT_BOOL *InRange);
  void __RPC_STUB IHTMLTxtRange_inRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_isEqual_Proxy(IHTMLTxtRange *This,IHTMLTxtRange *Range,VARIANT_BOOL *IsEqual);
  void __RPC_STUB IHTMLTxtRange_isEqual_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_scrollIntoView_Proxy(IHTMLTxtRange *This,VARIANT_BOOL fStart);
  void __RPC_STUB IHTMLTxtRange_scrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_collapse_Proxy(IHTMLTxtRange *This,VARIANT_BOOL Start);
  void __RPC_STUB IHTMLTxtRange_collapse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_expand_Proxy(IHTMLTxtRange *This,BSTR Unit,VARIANT_BOOL *Success);
  void __RPC_STUB IHTMLTxtRange_expand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_move_Proxy(IHTMLTxtRange *This,BSTR Unit,long Count,long *ActualCount);
  void __RPC_STUB IHTMLTxtRange_move_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveStart_Proxy(IHTMLTxtRange *This,BSTR Unit,long Count,long *ActualCount);
  void __RPC_STUB IHTMLTxtRange_moveStart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveEnd_Proxy(IHTMLTxtRange *This,BSTR Unit,long Count,long *ActualCount);
  void __RPC_STUB IHTMLTxtRange_moveEnd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_select_Proxy(IHTMLTxtRange *This);
  void __RPC_STUB IHTMLTxtRange_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_pasteHTML_Proxy(IHTMLTxtRange *This,BSTR html);
  void __RPC_STUB IHTMLTxtRange_pasteHTML_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveToElementText_Proxy(IHTMLTxtRange *This,IHTMLElement *element);
  void __RPC_STUB IHTMLTxtRange_moveToElementText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_setEndPoint_Proxy(IHTMLTxtRange *This,BSTR how,IHTMLTxtRange *SourceRange);
  void __RPC_STUB IHTMLTxtRange_setEndPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_compareEndPoints_Proxy(IHTMLTxtRange *This,BSTR how,IHTMLTxtRange *SourceRange,long *ret);
  void __RPC_STUB IHTMLTxtRange_compareEndPoints_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_findText_Proxy(IHTMLTxtRange *This,BSTR String,long count,long Flags,VARIANT_BOOL *Success);
  void __RPC_STUB IHTMLTxtRange_findText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveToPoint_Proxy(IHTMLTxtRange *This,long x,long y);
  void __RPC_STUB IHTMLTxtRange_moveToPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_getBookmark_Proxy(IHTMLTxtRange *This,BSTR *Boolmark);
  void __RPC_STUB IHTMLTxtRange_getBookmark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_moveToBookmark_Proxy(IHTMLTxtRange *This,BSTR Bookmark,VARIANT_BOOL *Success);
  void __RPC_STUB IHTMLTxtRange_moveToBookmark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandSupported_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_queryCommandSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandEnabled_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_queryCommandEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandState_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_queryCommandState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandIndeterm_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_queryCommandIndeterm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandText_Proxy(IHTMLTxtRange *This,BSTR cmdID,BSTR *pcmdText);
  void __RPC_STUB IHTMLTxtRange_queryCommandText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_queryCommandValue_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT *pcmdValue);
  void __RPC_STUB IHTMLTxtRange_queryCommandValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_execCommand_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_execCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRange_execCommandShowHelp_Proxy(IHTMLTxtRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLTxtRange_execCommandShowHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTextRangeMetrics_INTERFACE_DEFINED__
#define __IHTMLTextRangeMetrics_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextRangeMetrics;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTextRangeMetrics : public IDispatch {
  public:
    virtual HRESULT WINAPI get_offsetTop(long *p) = 0;
    virtual HRESULT WINAPI get_offsetLeft(long *p) = 0;
    virtual HRESULT WINAPI get_boundingTop(long *p) = 0;
    virtual HRESULT WINAPI get_boundingLeft(long *p) = 0;
    virtual HRESULT WINAPI get_boundingWidth(long *p) = 0;
    virtual HRESULT WINAPI get_boundingHeight(long *p) = 0;
  };
#else
  typedef struct IHTMLTextRangeMetricsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTextRangeMetrics *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTextRangeMetrics *This);
      ULONG (WINAPI *Release)(IHTMLTextRangeMetrics *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTextRangeMetrics *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTextRangeMetrics *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTextRangeMetrics *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTextRangeMetrics *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_offsetTop)(IHTMLTextRangeMetrics *This,long *p);
      HRESULT (WINAPI *get_offsetLeft)(IHTMLTextRangeMetrics *This,long *p);
      HRESULT (WINAPI *get_boundingTop)(IHTMLTextRangeMetrics *This,long *p);
      HRESULT (WINAPI *get_boundingLeft)(IHTMLTextRangeMetrics *This,long *p);
      HRESULT (WINAPI *get_boundingWidth)(IHTMLTextRangeMetrics *This,long *p);
      HRESULT (WINAPI *get_boundingHeight)(IHTMLTextRangeMetrics *This,long *p);
    END_INTERFACE
  } IHTMLTextRangeMetricsVtbl;
  interface IHTMLTextRangeMetrics {
    CONST_VTBL struct IHTMLTextRangeMetricsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTextRangeMetrics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTextRangeMetrics_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTextRangeMetrics_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTextRangeMetrics_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTextRangeMetrics_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTextRangeMetrics_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTextRangeMetrics_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTextRangeMetrics_get_offsetTop(This,p) (This)->lpVtbl->get_offsetTop(This,p)
#define IHTMLTextRangeMetrics_get_offsetLeft(This,p) (This)->lpVtbl->get_offsetLeft(This,p)
#define IHTMLTextRangeMetrics_get_boundingTop(This,p) (This)->lpVtbl->get_boundingTop(This,p)
#define IHTMLTextRangeMetrics_get_boundingLeft(This,p) (This)->lpVtbl->get_boundingLeft(This,p)
#define IHTMLTextRangeMetrics_get_boundingWidth(This,p) (This)->lpVtbl->get_boundingWidth(This,p)
#define IHTMLTextRangeMetrics_get_boundingHeight(This,p) (This)->lpVtbl->get_boundingHeight(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLTextRangeMetrics_get_offsetTop_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_offsetTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_offsetLeft_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_offsetLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_boundingTop_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_boundingTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_boundingLeft_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_boundingLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_boundingWidth_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_boundingWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics_get_boundingHeight_Proxy(IHTMLTextRangeMetrics *This,long *p);
  void __RPC_STUB IHTMLTextRangeMetrics_get_boundingHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTextRangeMetrics2_INTERFACE_DEFINED__
#define __IHTMLTextRangeMetrics2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextRangeMetrics2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTextRangeMetrics2 : public IDispatch {
  public:
    virtual HRESULT WINAPI getClientRects(IHTMLRectCollection **pRectCol) = 0;
    virtual HRESULT WINAPI getBoundingClientRect(IHTMLRect **pRect) = 0;
  };
#else
  typedef struct IHTMLTextRangeMetrics2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTextRangeMetrics2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTextRangeMetrics2 *This);
      ULONG (WINAPI *Release)(IHTMLTextRangeMetrics2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTextRangeMetrics2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTextRangeMetrics2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTextRangeMetrics2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTextRangeMetrics2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *getClientRects)(IHTMLTextRangeMetrics2 *This,IHTMLRectCollection **pRectCol);
      HRESULT (WINAPI *getBoundingClientRect)(IHTMLTextRangeMetrics2 *This,IHTMLRect **pRect);
    END_INTERFACE
  } IHTMLTextRangeMetrics2Vtbl;
  interface IHTMLTextRangeMetrics2 {
    CONST_VTBL struct IHTMLTextRangeMetrics2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTextRangeMetrics2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTextRangeMetrics2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTextRangeMetrics2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTextRangeMetrics2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTextRangeMetrics2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTextRangeMetrics2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTextRangeMetrics2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTextRangeMetrics2_getClientRects(This,pRectCol) (This)->lpVtbl->getClientRects(This,pRectCol)
#define IHTMLTextRangeMetrics2_getBoundingClientRect(This,pRect) (This)->lpVtbl->getBoundingClientRect(This,pRect)
#endif
#endif
  HRESULT WINAPI IHTMLTextRangeMetrics2_getClientRects_Proxy(IHTMLTextRangeMetrics2 *This,IHTMLRectCollection **pRectCol);
  void __RPC_STUB IHTMLTextRangeMetrics2_getClientRects_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextRangeMetrics2_getBoundingClientRect_Proxy(IHTMLTextRangeMetrics2 *This,IHTMLRect **pRect);
  void __RPC_STUB IHTMLTextRangeMetrics2_getBoundingClientRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTxtRangeCollection_INTERFACE_DEFINED__
#define __IHTMLTxtRangeCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTxtRangeCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTxtRangeCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
  };
#else
  typedef struct IHTMLTxtRangeCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTxtRangeCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTxtRangeCollection *This);
      ULONG (WINAPI *Release)(IHTMLTxtRangeCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTxtRangeCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTxtRangeCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTxtRangeCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTxtRangeCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLTxtRangeCollection *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLTxtRangeCollection *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLTxtRangeCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
    END_INTERFACE
  } IHTMLTxtRangeCollectionVtbl;
  interface IHTMLTxtRangeCollection {
    CONST_VTBL struct IHTMLTxtRangeCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTxtRangeCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTxtRangeCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTxtRangeCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTxtRangeCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTxtRangeCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTxtRangeCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTxtRangeCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTxtRangeCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLTxtRangeCollection_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLTxtRangeCollection_item(This,pvarIndex,pvarResult) (This)->lpVtbl->item(This,pvarIndex,pvarResult)
#endif
#endif
  HRESULT WINAPI IHTMLTxtRangeCollection_get_length_Proxy(IHTMLTxtRangeCollection *This,long *p);
  void __RPC_STUB IHTMLTxtRangeCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRangeCollection_get__newEnum_Proxy(IHTMLTxtRangeCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLTxtRangeCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTxtRangeCollection_item_Proxy(IHTMLTxtRangeCollection *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLTxtRangeCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __HTMLFormElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLFormElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLFormElementEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLFormElementEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLFormElementEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLFormElementEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLFormElementEvents2 *This);
      ULONG (WINAPI *Release)(HTMLFormElementEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLFormElementEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLFormElementEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLFormElementEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLFormElementEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLFormElementEvents2Vtbl;
  interface HTMLFormElementEvents2 {
    CONST_VTBL struct HTMLFormElementEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLFormElementEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLFormElementEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLFormElementEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLFormElementEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLFormElementEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLFormElementEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLFormElementEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLFormElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLFormElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLFormElementEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLFormElementEvents : public IDispatch {
  };
#else
  typedef struct HTMLFormElementEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLFormElementEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLFormElementEvents *This);
      ULONG (WINAPI *Release)(HTMLFormElementEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLFormElementEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLFormElementEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLFormElementEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLFormElementEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLFormElementEventsVtbl;
  interface HTMLFormElementEvents {
    CONST_VTBL struct HTMLFormElementEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLFormElementEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLFormElementEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLFormElementEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLFormElementEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLFormElementEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLFormElementEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLFormElementEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLFormElement_INTERFACE_DEFINED__
#define __IHTMLFormElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFormElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFormElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_action(BSTR v) = 0;
    virtual HRESULT WINAPI get_action(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dir(BSTR v) = 0;
    virtual HRESULT WINAPI get_dir(BSTR *p) = 0;
    virtual HRESULT WINAPI put_encoding(BSTR v) = 0;
    virtual HRESULT WINAPI get_encoding(BSTR *p) = 0;
    virtual HRESULT WINAPI put_method(BSTR v) = 0;
    virtual HRESULT WINAPI get_method(BSTR *p) = 0;
    virtual HRESULT WINAPI get_elements(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onsubmit(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onsubmit(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreset(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreset(VARIANT *p) = 0;
    virtual HRESULT WINAPI submit(void) = 0;
    virtual HRESULT WINAPI reset(void) = 0;
    virtual HRESULT WINAPI put_length(long v) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT name,VARIANT index,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI tags(VARIANT tagName,IDispatch **pdisp) = 0;
  };
#else
  typedef struct IHTMLFormElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFormElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFormElement *This);
      ULONG (WINAPI *Release)(IHTMLFormElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFormElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFormElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFormElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFormElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_action)(IHTMLFormElement *This,BSTR v);
      HRESULT (WINAPI *get_action)(IHTMLFormElement *This,BSTR *p);
      HRESULT (WINAPI *put_dir)(IHTMLFormElement *This,BSTR v);
      HRESULT (WINAPI *get_dir)(IHTMLFormElement *This,BSTR *p);
      HRESULT (WINAPI *put_encoding)(IHTMLFormElement *This,BSTR v);
      HRESULT (WINAPI *get_encoding)(IHTMLFormElement *This,BSTR *p);
      HRESULT (WINAPI *put_method)(IHTMLFormElement *This,BSTR v);
      HRESULT (WINAPI *get_method)(IHTMLFormElement *This,BSTR *p);
      HRESULT (WINAPI *get_elements)(IHTMLFormElement *This,IDispatch **p);
      HRESULT (WINAPI *put_target)(IHTMLFormElement *This,BSTR v);
      HRESULT (WINAPI *get_target)(IHTMLFormElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLFormElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLFormElement *This,BSTR *p);
      HRESULT (WINAPI *put_onsubmit)(IHTMLFormElement *This,VARIANT v);
      HRESULT (WINAPI *get_onsubmit)(IHTMLFormElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onreset)(IHTMLFormElement *This,VARIANT v);
      HRESULT (WINAPI *get_onreset)(IHTMLFormElement *This,VARIANT *p);
      HRESULT (WINAPI *submit)(IHTMLFormElement *This);
      HRESULT (WINAPI *reset)(IHTMLFormElement *This);
      HRESULT (WINAPI *put_length)(IHTMLFormElement *This,long v);
      HRESULT (WINAPI *get_length)(IHTMLFormElement *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLFormElement *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLFormElement *This,VARIANT name,VARIANT index,IDispatch **pdisp);
      HRESULT (WINAPI *tags)(IHTMLFormElement *This,VARIANT tagName,IDispatch **pdisp);
    END_INTERFACE
  } IHTMLFormElementVtbl;
  interface IHTMLFormElement {
    CONST_VTBL struct IHTMLFormElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFormElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFormElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFormElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFormElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFormElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFormElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFormElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFormElement_put_action(This,v) (This)->lpVtbl->put_action(This,v)
#define IHTMLFormElement_get_action(This,p) (This)->lpVtbl->get_action(This,p)
#define IHTMLFormElement_put_dir(This,v) (This)->lpVtbl->put_dir(This,v)
#define IHTMLFormElement_get_dir(This,p) (This)->lpVtbl->get_dir(This,p)
#define IHTMLFormElement_put_encoding(This,v) (This)->lpVtbl->put_encoding(This,v)
#define IHTMLFormElement_get_encoding(This,p) (This)->lpVtbl->get_encoding(This,p)
#define IHTMLFormElement_put_method(This,v) (This)->lpVtbl->put_method(This,v)
#define IHTMLFormElement_get_method(This,p) (This)->lpVtbl->get_method(This,p)
#define IHTMLFormElement_get_elements(This,p) (This)->lpVtbl->get_elements(This,p)
#define IHTMLFormElement_put_target(This,v) (This)->lpVtbl->put_target(This,v)
#define IHTMLFormElement_get_target(This,p) (This)->lpVtbl->get_target(This,p)
#define IHTMLFormElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLFormElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLFormElement_put_onsubmit(This,v) (This)->lpVtbl->put_onsubmit(This,v)
#define IHTMLFormElement_get_onsubmit(This,p) (This)->lpVtbl->get_onsubmit(This,p)
#define IHTMLFormElement_put_onreset(This,v) (This)->lpVtbl->put_onreset(This,v)
#define IHTMLFormElement_get_onreset(This,p) (This)->lpVtbl->get_onreset(This,p)
#define IHTMLFormElement_submit(This) (This)->lpVtbl->submit(This)
#define IHTMLFormElement_reset(This) (This)->lpVtbl->reset(This)
#define IHTMLFormElement_put_length(This,v) (This)->lpVtbl->put_length(This,v)
#define IHTMLFormElement_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLFormElement_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLFormElement_item(This,name,index,pdisp) (This)->lpVtbl->item(This,name,index,pdisp)
#define IHTMLFormElement_tags(This,tagName,pdisp) (This)->lpVtbl->tags(This,tagName,pdisp)
#endif
#endif
  HRESULT WINAPI IHTMLFormElement_put_action_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_action_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_action_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_action_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_dir_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_dir_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_encoding_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_encoding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_encoding_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_encoding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_method_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_method_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_method_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_method_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_elements_Proxy(IHTMLFormElement *This,IDispatch **p);
  void __RPC_STUB IHTMLFormElement_get_elements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_target_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_target_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_name_Proxy(IHTMLFormElement *This,BSTR v);
  void __RPC_STUB IHTMLFormElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_name_Proxy(IHTMLFormElement *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_onsubmit_Proxy(IHTMLFormElement *This,VARIANT v);
  void __RPC_STUB IHTMLFormElement_put_onsubmit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_onsubmit_Proxy(IHTMLFormElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFormElement_get_onsubmit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_onreset_Proxy(IHTMLFormElement *This,VARIANT v);
  void __RPC_STUB IHTMLFormElement_put_onreset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_onreset_Proxy(IHTMLFormElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFormElement_get_onreset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_submit_Proxy(IHTMLFormElement *This);
  void __RPC_STUB IHTMLFormElement_submit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_reset_Proxy(IHTMLFormElement *This);
  void __RPC_STUB IHTMLFormElement_reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_put_length_Proxy(IHTMLFormElement *This,long v);
  void __RPC_STUB IHTMLFormElement_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get_length_Proxy(IHTMLFormElement *This,long *p);
  void __RPC_STUB IHTMLFormElement_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_get__newEnum_Proxy(IHTMLFormElement *This,IUnknown **p);
  void __RPC_STUB IHTMLFormElement_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_item_Proxy(IHTMLFormElement *This,VARIANT name,VARIANT index,IDispatch **pdisp);
  void __RPC_STUB IHTMLFormElement_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement_tags_Proxy(IHTMLFormElement *This,VARIANT tagName,IDispatch **pdisp);
  void __RPC_STUB IHTMLFormElement_tags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFormElement2_INTERFACE_DEFINED__
#define __IHTMLFormElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFormElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFormElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_acceptCharset(BSTR v) = 0;
    virtual HRESULT WINAPI get_acceptCharset(BSTR *p) = 0;
    virtual HRESULT WINAPI urns(VARIANT urn,IDispatch **pdisp) = 0;
  };
#else
  typedef struct IHTMLFormElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFormElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFormElement2 *This);
      ULONG (WINAPI *Release)(IHTMLFormElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFormElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFormElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFormElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFormElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_acceptCharset)(IHTMLFormElement2 *This,BSTR v);
      HRESULT (WINAPI *get_acceptCharset)(IHTMLFormElement2 *This,BSTR *p);
      HRESULT (WINAPI *urns)(IHTMLFormElement2 *This,VARIANT urn,IDispatch **pdisp);
    END_INTERFACE
  } IHTMLFormElement2Vtbl;
  interface IHTMLFormElement2 {
    CONST_VTBL struct IHTMLFormElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFormElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFormElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFormElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFormElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFormElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFormElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFormElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFormElement2_put_acceptCharset(This,v) (This)->lpVtbl->put_acceptCharset(This,v)
#define IHTMLFormElement2_get_acceptCharset(This,p) (This)->lpVtbl->get_acceptCharset(This,p)
#define IHTMLFormElement2_urns(This,urn,pdisp) (This)->lpVtbl->urns(This,urn,pdisp)
#endif
#endif
  HRESULT WINAPI IHTMLFormElement2_put_acceptCharset_Proxy(IHTMLFormElement2 *This,BSTR v);
  void __RPC_STUB IHTMLFormElement2_put_acceptCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement2_get_acceptCharset_Proxy(IHTMLFormElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLFormElement2_get_acceptCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFormElement2_urns_Proxy(IHTMLFormElement2 *This,VARIANT urn,IDispatch **pdisp);
  void __RPC_STUB IHTMLFormElement2_urns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFormElement3_INTERFACE_DEFINED__
#define __IHTMLFormElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFormElement3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFormElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedItem(BSTR name,IDispatch **pdisp) = 0;
  };
#else
  typedef struct IHTMLFormElement3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFormElement3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFormElement3 *This);
      ULONG (WINAPI *Release)(IHTMLFormElement3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFormElement3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFormElement3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFormElement3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFormElement3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *namedItem)(IHTMLFormElement3 *This,BSTR name,IDispatch **pdisp);
    END_INTERFACE
  } IHTMLFormElement3Vtbl;
  interface IHTMLFormElement3 {
    CONST_VTBL struct IHTMLFormElement3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFormElement3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFormElement3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFormElement3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFormElement3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFormElement3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFormElement3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFormElement3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFormElement3_namedItem(This,name,pdisp) (This)->lpVtbl->namedItem(This,name,pdisp)
#endif
#endif
  HRESULT WINAPI IHTMLFormElement3_namedItem_Proxy(IHTMLFormElement3 *This,BSTR name,IDispatch **pdisp);
  void __RPC_STUB IHTMLFormElement3_namedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSubmitData_INTERFACE_DEFINED__
#define __IHTMLSubmitData_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSubmitData;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLSubmitData : public IDispatch {
  public:
    virtual HRESULT WINAPI appendNameValuePair(BSTR name = L"",BSTR value = L"") = 0;
    virtual HRESULT WINAPI appendNameFilePair(BSTR name = L"",BSTR filename = L"") = 0;
    virtual HRESULT WINAPI appendItemSeparator(void) = 0;
  };
#else
  typedef struct IHTMLSubmitDataVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLSubmitData *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLSubmitData *This);
      ULONG (WINAPI *Release)(IHTMLSubmitData *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLSubmitData *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLSubmitData *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLSubmitData *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLSubmitData *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *appendNameValuePair)(IHTMLSubmitData *This,BSTR name,BSTR value);
      HRESULT (WINAPI *appendNameFilePair)(IHTMLSubmitData *This,BSTR name,BSTR filename);
      HRESULT (WINAPI *appendItemSeparator)(IHTMLSubmitData *This);
    END_INTERFACE
  } IHTMLSubmitDataVtbl;
  interface IHTMLSubmitData {
    CONST_VTBL struct IHTMLSubmitDataVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLSubmitData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLSubmitData_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLSubmitData_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLSubmitData_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLSubmitData_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLSubmitData_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLSubmitData_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLSubmitData_appendNameValuePair(This,name,value) (This)->lpVtbl->appendNameValuePair(This,name,value)
#define IHTMLSubmitData_appendNameFilePair(This,name,filename) (This)->lpVtbl->appendNameFilePair(This,name,filename)
#define IHTMLSubmitData_appendItemSeparator(This) (This)->lpVtbl->appendItemSeparator(This)
#endif
#endif
  HRESULT WINAPI IHTMLSubmitData_appendNameValuePair_Proxy(IHTMLSubmitData *This,BSTR name,BSTR value);
  void __RPC_STUB IHTMLSubmitData_appendNameValuePair_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSubmitData_appendNameFilePair_Proxy(IHTMLSubmitData *This,BSTR name,BSTR filename);
  void __RPC_STUB IHTMLSubmitData_appendNameFilePair_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSubmitData_appendItemSeparator_Proxy(IHTMLSubmitData *This);
  void __RPC_STUB IHTMLSubmitData_appendItemSeparator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFormElement_DISPINTERFACE_DEFINED__
#define __DispHTMLFormElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFormElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLFormElement : public IDispatch {
  };
#else
  typedef struct DispHTMLFormElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLFormElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLFormElement *This);
      ULONG (WINAPI *Release)(DispHTMLFormElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLFormElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLFormElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLFormElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLFormElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLFormElementVtbl;
  interface DispHTMLFormElement {
    CONST_VTBL struct DispHTMLFormElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLFormElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLFormElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLFormElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLFormElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLFormElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLFormElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLFormElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLFormElement;
#ifdef __cplusplus
  class HTMLFormElement;
#endif

#ifndef __HTMLControlElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLControlElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLControlElementEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLControlElementEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLControlElementEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLControlElementEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLControlElementEvents2 *This);
      ULONG (WINAPI *Release)(HTMLControlElementEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLControlElementEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLControlElementEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLControlElementEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLControlElementEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLControlElementEvents2Vtbl;
  interface HTMLControlElementEvents2 {
    CONST_VTBL struct HTMLControlElementEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLControlElementEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLControlElementEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLControlElementEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLControlElementEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLControlElementEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLControlElementEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLControlElementEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLControlElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLControlElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLControlElementEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLControlElementEvents : public IDispatch {
  };
#else
  typedef struct HTMLControlElementEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLControlElementEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLControlElementEvents *This);
      ULONG (WINAPI *Release)(HTMLControlElementEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLControlElementEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLControlElementEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLControlElementEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLControlElementEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLControlElementEventsVtbl;
  interface HTMLControlElementEvents {
    CONST_VTBL struct HTMLControlElementEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLControlElementEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLControlElementEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLControlElementEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLControlElementEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLControlElementEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLControlElementEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLControlElementEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLControlElement_INTERFACE_DEFINED__
#define __IHTMLControlElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLControlElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLControlElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_tabIndex(short v) = 0;
    virtual HRESULT WINAPI get_tabIndex(short *p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI put_accessKey(BSTR v) = 0;
    virtual HRESULT WINAPI get_accessKey(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onresize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresize(VARIANT *p) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
    virtual HRESULT WINAPI addFilter(IUnknown *pUnk) = 0;
    virtual HRESULT WINAPI removeFilter(IUnknown *pUnk) = 0;
    virtual HRESULT WINAPI get_clientHeight(long *p) = 0;
    virtual HRESULT WINAPI get_clientWidth(long *p) = 0;
    virtual HRESULT WINAPI get_clientTop(long *p) = 0;
    virtual HRESULT WINAPI get_clientLeft(long *p) = 0;
  };
#else
  typedef struct IHTMLControlElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLControlElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLControlElement *This);
      ULONG (WINAPI *Release)(IHTMLControlElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLControlElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLControlElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLControlElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLControlElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_tabIndex)(IHTMLControlElement *This,short v);
      HRESULT (WINAPI *get_tabIndex)(IHTMLControlElement *This,short *p);
      HRESULT (WINAPI *focus)(IHTMLControlElement *This);
      HRESULT (WINAPI *put_accessKey)(IHTMLControlElement *This,BSTR v);
      HRESULT (WINAPI *get_accessKey)(IHTMLControlElement *This,BSTR *p);
      HRESULT (WINAPI *put_onblur)(IHTMLControlElement *This,VARIANT v);
      HRESULT (WINAPI *get_onblur)(IHTMLControlElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onfocus)(IHTMLControlElement *This,VARIANT v);
      HRESULT (WINAPI *get_onfocus)(IHTMLControlElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onresize)(IHTMLControlElement *This,VARIANT v);
      HRESULT (WINAPI *get_onresize)(IHTMLControlElement *This,VARIANT *p);
      HRESULT (WINAPI *blur)(IHTMLControlElement *This);
      HRESULT (WINAPI *addFilter)(IHTMLControlElement *This,IUnknown *pUnk);
      HRESULT (WINAPI *removeFilter)(IHTMLControlElement *This,IUnknown *pUnk);
      HRESULT (WINAPI *get_clientHeight)(IHTMLControlElement *This,long *p);
      HRESULT (WINAPI *get_clientWidth)(IHTMLControlElement *This,long *p);
      HRESULT (WINAPI *get_clientTop)(IHTMLControlElement *This,long *p);
      HRESULT (WINAPI *get_clientLeft)(IHTMLControlElement *This,long *p);
    END_INTERFACE
  } IHTMLControlElementVtbl;
  interface IHTMLControlElement {
    CONST_VTBL struct IHTMLControlElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLControlElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLControlElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLControlElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLControlElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLControlElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLControlElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLControlElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLControlElement_put_tabIndex(This,v) (This)->lpVtbl->put_tabIndex(This,v)
#define IHTMLControlElement_get_tabIndex(This,p) (This)->lpVtbl->get_tabIndex(This,p)
#define IHTMLControlElement_focus(This) (This)->lpVtbl->focus(This)
#define IHTMLControlElement_put_accessKey(This,v) (This)->lpVtbl->put_accessKey(This,v)
#define IHTMLControlElement_get_accessKey(This,p) (This)->lpVtbl->get_accessKey(This,p)
#define IHTMLControlElement_put_onblur(This,v) (This)->lpVtbl->put_onblur(This,v)
#define IHTMLControlElement_get_onblur(This,p) (This)->lpVtbl->get_onblur(This,p)
#define IHTMLControlElement_put_onfocus(This,v) (This)->lpVtbl->put_onfocus(This,v)
#define IHTMLControlElement_get_onfocus(This,p) (This)->lpVtbl->get_onfocus(This,p)
#define IHTMLControlElement_put_onresize(This,v) (This)->lpVtbl->put_onresize(This,v)
#define IHTMLControlElement_get_onresize(This,p) (This)->lpVtbl->get_onresize(This,p)
#define IHTMLControlElement_blur(This) (This)->lpVtbl->blur(This)
#define IHTMLControlElement_addFilter(This,pUnk) (This)->lpVtbl->addFilter(This,pUnk)
#define IHTMLControlElement_removeFilter(This,pUnk) (This)->lpVtbl->removeFilter(This,pUnk)
#define IHTMLControlElement_get_clientHeight(This,p) (This)->lpVtbl->get_clientHeight(This,p)
#define IHTMLControlElement_get_clientWidth(This,p) (This)->lpVtbl->get_clientWidth(This,p)
#define IHTMLControlElement_get_clientTop(This,p) (This)->lpVtbl->get_clientTop(This,p)
#define IHTMLControlElement_get_clientLeft(This,p) (This)->lpVtbl->get_clientLeft(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLControlElement_put_tabIndex_Proxy(IHTMLControlElement *This,short v);
  void __RPC_STUB IHTMLControlElement_put_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_tabIndex_Proxy(IHTMLControlElement *This,short *p);
  void __RPC_STUB IHTMLControlElement_get_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_focus_Proxy(IHTMLControlElement *This);
  void __RPC_STUB IHTMLControlElement_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_put_accessKey_Proxy(IHTMLControlElement *This,BSTR v);
  void __RPC_STUB IHTMLControlElement_put_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_accessKey_Proxy(IHTMLControlElement *This,BSTR *p);
  void __RPC_STUB IHTMLControlElement_get_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_put_onblur_Proxy(IHTMLControlElement *This,VARIANT v);
  void __RPC_STUB IHTMLControlElement_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_onblur_Proxy(IHTMLControlElement *This,VARIANT *p);
  void __RPC_STUB IHTMLControlElement_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_put_onfocus_Proxy(IHTMLControlElement *This,VARIANT v);
  void __RPC_STUB IHTMLControlElement_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_onfocus_Proxy(IHTMLControlElement *This,VARIANT *p);
  void __RPC_STUB IHTMLControlElement_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_put_onresize_Proxy(IHTMLControlElement *This,VARIANT v);
  void __RPC_STUB IHTMLControlElement_put_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_onresize_Proxy(IHTMLControlElement *This,VARIANT *p);
  void __RPC_STUB IHTMLControlElement_get_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_blur_Proxy(IHTMLControlElement *This);
  void __RPC_STUB IHTMLControlElement_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_addFilter_Proxy(IHTMLControlElement *This,IUnknown *pUnk);
  void __RPC_STUB IHTMLControlElement_addFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_removeFilter_Proxy(IHTMLControlElement *This,IUnknown *pUnk);
  void __RPC_STUB IHTMLControlElement_removeFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_clientHeight_Proxy(IHTMLControlElement *This,long *p);
  void __RPC_STUB IHTMLControlElement_get_clientHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_clientWidth_Proxy(IHTMLControlElement *This,long *p);
  void __RPC_STUB IHTMLControlElement_get_clientWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_clientTop_Proxy(IHTMLControlElement *This,long *p);
  void __RPC_STUB IHTMLControlElement_get_clientTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlElement_get_clientLeft_Proxy(IHTMLControlElement *This,long *p);
  void __RPC_STUB IHTMLControlElement_get_clientLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTextElement_INTERFACE_DEFINED__
#define __IHTMLTextElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTextElement : public IDispatch {
  };
#else
  typedef struct IHTMLTextElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTextElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTextElement *This);
      ULONG (WINAPI *Release)(IHTMLTextElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTextElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTextElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTextElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTextElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } IHTMLTextElementVtbl;
  interface IHTMLTextElement {
    CONST_VTBL struct IHTMLTextElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTextElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTextElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTextElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTextElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTextElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTextElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTextElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __DispHTMLTextElement_DISPINTERFACE_DEFINED__
#define __DispHTMLTextElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTextElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLTextElement : public IDispatch {
  };
#else
  typedef struct DispHTMLTextElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLTextElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLTextElement *This);
      ULONG (WINAPI *Release)(DispHTMLTextElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLTextElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLTextElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLTextElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLTextElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLTextElementVtbl;
  interface DispHTMLTextElement {
    CONST_VTBL struct DispHTMLTextElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLTextElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLTextElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLTextElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLTextElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLTextElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLTextElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLTextElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLTextElement;
#ifdef __cplusplus
  class HTMLTextElement;
#endif

#ifndef __HTMLTextContainerEvents2_DISPINTERFACE_DEFINED__
#define __HTMLTextContainerEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLTextContainerEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLTextContainerEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLTextContainerEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLTextContainerEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLTextContainerEvents2 *This);
      ULONG (WINAPI *Release)(HTMLTextContainerEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLTextContainerEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLTextContainerEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLTextContainerEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLTextContainerEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLTextContainerEvents2Vtbl;
  interface HTMLTextContainerEvents2 {
    CONST_VTBL struct HTMLTextContainerEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLTextContainerEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLTextContainerEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLTextContainerEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLTextContainerEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLTextContainerEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLTextContainerEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLTextContainerEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLTextContainerEvents_DISPINTERFACE_DEFINED__
#define __HTMLTextContainerEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLTextContainerEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLTextContainerEvents : public IDispatch {
  };
#else
  typedef struct HTMLTextContainerEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLTextContainerEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLTextContainerEvents *This);
      ULONG (WINAPI *Release)(HTMLTextContainerEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLTextContainerEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLTextContainerEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLTextContainerEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLTextContainerEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLTextContainerEventsVtbl;
  interface HTMLTextContainerEvents {
    CONST_VTBL struct HTMLTextContainerEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLTextContainerEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLTextContainerEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLTextContainerEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLTextContainerEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLTextContainerEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLTextContainerEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLTextContainerEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLTextContainer_INTERFACE_DEFINED__
#define __IHTMLTextContainer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextContainer;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTextContainer : public IDispatch {
  public:
    virtual HRESULT WINAPI createControlRange(IDispatch **range) = 0;
    virtual HRESULT WINAPI get_scrollHeight(long *p) = 0;
    virtual HRESULT WINAPI get_scrollWidth(long *p) = 0;
    virtual HRESULT WINAPI put_scrollTop(long v) = 0;
    virtual HRESULT WINAPI get_scrollTop(long *p) = 0;
    virtual HRESULT WINAPI put_scrollLeft(long v) = 0;
    virtual HRESULT WINAPI get_scrollLeft(long *p) = 0;
    virtual HRESULT WINAPI put_onscroll(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onscroll(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLTextContainerVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTextContainer *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTextContainer *This);
      ULONG (WINAPI *Release)(IHTMLTextContainer *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTextContainer *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTextContainer *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTextContainer *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTextContainer *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *createControlRange)(IHTMLTextContainer *This,IDispatch **range);
      HRESULT (WINAPI *get_scrollHeight)(IHTMLTextContainer *This,long *p);
      HRESULT (WINAPI *get_scrollWidth)(IHTMLTextContainer *This,long *p);
      HRESULT (WINAPI *put_scrollTop)(IHTMLTextContainer *This,long v);
      HRESULT (WINAPI *get_scrollTop)(IHTMLTextContainer *This,long *p);
      HRESULT (WINAPI *put_scrollLeft)(IHTMLTextContainer *This,long v);
      HRESULT (WINAPI *get_scrollLeft)(IHTMLTextContainer *This,long *p);
      HRESULT (WINAPI *put_onscroll)(IHTMLTextContainer *This,VARIANT v);
      HRESULT (WINAPI *get_onscroll)(IHTMLTextContainer *This,VARIANT *p);
    END_INTERFACE
  } IHTMLTextContainerVtbl;
  interface IHTMLTextContainer {
    CONST_VTBL struct IHTMLTextContainerVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTextContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTextContainer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTextContainer_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTextContainer_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTextContainer_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTextContainer_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTextContainer_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTextContainer_createControlRange(This,range) (This)->lpVtbl->createControlRange(This,range)
#define IHTMLTextContainer_get_scrollHeight(This,p) (This)->lpVtbl->get_scrollHeight(This,p)
#define IHTMLTextContainer_get_scrollWidth(This,p) (This)->lpVtbl->get_scrollWidth(This,p)
#define IHTMLTextContainer_put_scrollTop(This,v) (This)->lpVtbl->put_scrollTop(This,v)
#define IHTMLTextContainer_get_scrollTop(This,p) (This)->lpVtbl->get_scrollTop(This,p)
#define IHTMLTextContainer_put_scrollLeft(This,v) (This)->lpVtbl->put_scrollLeft(This,v)
#define IHTMLTextContainer_get_scrollLeft(This,p) (This)->lpVtbl->get_scrollLeft(This,p)
#define IHTMLTextContainer_put_onscroll(This,v) (This)->lpVtbl->put_onscroll(This,v)
#define IHTMLTextContainer_get_onscroll(This,p) (This)->lpVtbl->get_onscroll(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLTextContainer_createControlRange_Proxy(IHTMLTextContainer *This,IDispatch **range);
  void __RPC_STUB IHTMLTextContainer_createControlRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_scrollHeight_Proxy(IHTMLTextContainer *This,long *p);
  void __RPC_STUB IHTMLTextContainer_get_scrollHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_scrollWidth_Proxy(IHTMLTextContainer *This,long *p);
  void __RPC_STUB IHTMLTextContainer_get_scrollWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_put_scrollTop_Proxy(IHTMLTextContainer *This,long v);
  void __RPC_STUB IHTMLTextContainer_put_scrollTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_scrollTop_Proxy(IHTMLTextContainer *This,long *p);
  void __RPC_STUB IHTMLTextContainer_get_scrollTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_put_scrollLeft_Proxy(IHTMLTextContainer *This,long v);
  void __RPC_STUB IHTMLTextContainer_put_scrollLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_scrollLeft_Proxy(IHTMLTextContainer *This,long *p);
  void __RPC_STUB IHTMLTextContainer_get_scrollLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_put_onscroll_Proxy(IHTMLTextContainer *This,VARIANT v);
  void __RPC_STUB IHTMLTextContainer_put_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextContainer_get_onscroll_Proxy(IHTMLTextContainer *This,VARIANT *p);
  void __RPC_STUB IHTMLTextContainer_get_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLControlRange_INTERFACE_DEFINED__
#define __IHTMLControlRange_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLControlRange;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLControlRange : public IDispatch {
  public:
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI add(IHTMLControlElement *item) = 0;
    virtual HRESULT WINAPI remove(long index) = 0;
    virtual HRESULT WINAPI item(long index,IHTMLElement **pdisp) = 0;
    virtual HRESULT WINAPI scrollIntoView(VARIANT varargStart) = 0;
    virtual HRESULT WINAPI queryCommandSupported(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandEnabled(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandState(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandIndeterm(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandText(BSTR cmdID,BSTR *pcmdText) = 0;
    virtual HRESULT WINAPI queryCommandValue(BSTR cmdID,VARIANT *pcmdValue) = 0;
    virtual HRESULT WINAPI execCommand(BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI execCommandShowHelp(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI commonParentElement(IHTMLElement **parent) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
  };
#else
  typedef struct IHTMLControlRangeVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLControlRange *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLControlRange *This);
      ULONG (WINAPI *Release)(IHTMLControlRange *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLControlRange *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLControlRange *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLControlRange *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLControlRange *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *select)(IHTMLControlRange *This);
      HRESULT (WINAPI *add)(IHTMLControlRange *This,IHTMLControlElement *item);
      HRESULT (WINAPI *remove)(IHTMLControlRange *This,long index);
      HRESULT (WINAPI *item)(IHTMLControlRange *This,long index,IHTMLElement **pdisp);
      HRESULT (WINAPI *scrollIntoView)(IHTMLControlRange *This,VARIANT varargStart);
      HRESULT (WINAPI *queryCommandSupported)(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *queryCommandEnabled)(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *queryCommandState)(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *queryCommandIndeterm)(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *queryCommandText)(IHTMLControlRange *This,BSTR cmdID,BSTR *pcmdText);
      HRESULT (WINAPI *queryCommandValue)(IHTMLControlRange *This,BSTR cmdID,VARIANT *pcmdValue);
      HRESULT (WINAPI *execCommand)(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *execCommandShowHelp)(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *commonParentElement)(IHTMLControlRange *This,IHTMLElement **parent);
      HRESULT (WINAPI *get_length)(IHTMLControlRange *This,long *p);
    END_INTERFACE
  } IHTMLControlRangeVtbl;
  interface IHTMLControlRange {
    CONST_VTBL struct IHTMLControlRangeVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLControlRange_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLControlRange_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLControlRange_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLControlRange_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLControlRange_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLControlRange_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLControlRange_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLControlRange_select(This) (This)->lpVtbl->select(This)
#define IHTMLControlRange_add(This,item) (This)->lpVtbl->add(This,item)
#define IHTMLControlRange_remove(This,index) (This)->lpVtbl->remove(This,index)
#define IHTMLControlRange_item(This,index,pdisp) (This)->lpVtbl->item(This,index,pdisp)
#define IHTMLControlRange_scrollIntoView(This,varargStart) (This)->lpVtbl->scrollIntoView(This,varargStart)
#define IHTMLControlRange_queryCommandSupported(This,cmdID,pfRet) (This)->lpVtbl->queryCommandSupported(This,cmdID,pfRet)
#define IHTMLControlRange_queryCommandEnabled(This,cmdID,pfRet) (This)->lpVtbl->queryCommandEnabled(This,cmdID,pfRet)
#define IHTMLControlRange_queryCommandState(This,cmdID,pfRet) (This)->lpVtbl->queryCommandState(This,cmdID,pfRet)
#define IHTMLControlRange_queryCommandIndeterm(This,cmdID,pfRet) (This)->lpVtbl->queryCommandIndeterm(This,cmdID,pfRet)
#define IHTMLControlRange_queryCommandText(This,cmdID,pcmdText) (This)->lpVtbl->queryCommandText(This,cmdID,pcmdText)
#define IHTMLControlRange_queryCommandValue(This,cmdID,pcmdValue) (This)->lpVtbl->queryCommandValue(This,cmdID,pcmdValue)
#define IHTMLControlRange_execCommand(This,cmdID,showUI,value,pfRet) (This)->lpVtbl->execCommand(This,cmdID,showUI,value,pfRet)
#define IHTMLControlRange_execCommandShowHelp(This,cmdID,pfRet) (This)->lpVtbl->execCommandShowHelp(This,cmdID,pfRet)
#define IHTMLControlRange_commonParentElement(This,parent) (This)->lpVtbl->commonParentElement(This,parent)
#define IHTMLControlRange_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLControlRange_select_Proxy(IHTMLControlRange *This);
  void __RPC_STUB IHTMLControlRange_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_add_Proxy(IHTMLControlRange *This,IHTMLControlElement *item);
  void __RPC_STUB IHTMLControlRange_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_remove_Proxy(IHTMLControlRange *This,long index);
  void __RPC_STUB IHTMLControlRange_remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_item_Proxy(IHTMLControlRange *This,long index,IHTMLElement **pdisp);
  void __RPC_STUB IHTMLControlRange_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_scrollIntoView_Proxy(IHTMLControlRange *This,VARIANT varargStart);
  void __RPC_STUB IHTMLControlRange_scrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandSupported_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_queryCommandSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandEnabled_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_queryCommandEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandState_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_queryCommandState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandIndeterm_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_queryCommandIndeterm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandText_Proxy(IHTMLControlRange *This,BSTR cmdID,BSTR *pcmdText);
  void __RPC_STUB IHTMLControlRange_queryCommandText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_queryCommandValue_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT *pcmdValue);
  void __RPC_STUB IHTMLControlRange_queryCommandValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_execCommand_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_execCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_execCommandShowHelp_Proxy(IHTMLControlRange *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLControlRange_execCommandShowHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_commonParentElement_Proxy(IHTMLControlRange *This,IHTMLElement **parent);
  void __RPC_STUB IHTMLControlRange_commonParentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLControlRange_get_length_Proxy(IHTMLControlRange *This,long *p);
  void __RPC_STUB IHTMLControlRange_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLControlRange2_INTERFACE_DEFINED__
#define __IHTMLControlRange2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLControlRange2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLControlRange2 : public IDispatch {
  public:
    virtual HRESULT WINAPI addElement(IHTMLElement *item) = 0;
  };
#else
  typedef struct IHTMLControlRange2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLControlRange2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLControlRange2 *This);
      ULONG (WINAPI *Release)(IHTMLControlRange2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLControlRange2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLControlRange2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLControlRange2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLControlRange2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *addElement)(IHTMLControlRange2 *This,IHTMLElement *item);
    END_INTERFACE
  } IHTMLControlRange2Vtbl;
  interface IHTMLControlRange2 {
    CONST_VTBL struct IHTMLControlRange2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLControlRange2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLControlRange2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLControlRange2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLControlRange2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLControlRange2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLControlRange2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLControlRange2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLControlRange2_addElement(This,item) (This)->lpVtbl->addElement(This,item)
#endif
#endif
  HRESULT WINAPI IHTMLControlRange2_addElement_Proxy(IHTMLControlRange2 *This,IHTMLElement *item);
  void __RPC_STUB IHTMLControlRange2_addElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __HTMLImgEvents2_DISPINTERFACE_DEFINED__
#define __HTMLImgEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLImgEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLImgEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLImgEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLImgEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLImgEvents2 *This);
      ULONG (WINAPI *Release)(HTMLImgEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLImgEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLImgEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLImgEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLImgEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLImgEvents2Vtbl;
  interface HTMLImgEvents2 {
    CONST_VTBL struct HTMLImgEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLImgEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLImgEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLImgEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLImgEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLImgEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLImgEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLImgEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLImgEvents_DISPINTERFACE_DEFINED__
#define __HTMLImgEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLImgEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLImgEvents : public IDispatch {
  };
#else
  typedef struct HTMLImgEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLImgEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLImgEvents *This);
      ULONG (WINAPI *Release)(HTMLImgEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLImgEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLImgEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLImgEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLImgEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLImgEventsVtbl;
  interface HTMLImgEvents {
    CONST_VTBL struct HTMLImgEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLImgEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLImgEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLImgEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLImgEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLImgEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLImgEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLImgEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLImgElement_INTERFACE_DEFINED__
#define __IHTMLImgElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLImgElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLImgElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_isMap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_isMap(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_useMap(BSTR v) = 0;
    virtual HRESULT WINAPI get_useMap(BSTR *p) = 0;
    virtual HRESULT WINAPI get_mimeType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileSize(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileCreatedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileModifiedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileUpdatedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI get_nameProp(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lowsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_lowsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vrml(BSTR v) = 0;
    virtual HRESULT WINAPI get_vrml(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dynsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_dynsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI get_complete(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_loop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_loop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onabort(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onabort(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(long v) = 0;
    virtual HRESULT WINAPI get_width(long *p) = 0;
    virtual HRESULT WINAPI put_height(long v) = 0;
    virtual HRESULT WINAPI get_height(long *p) = 0;
    virtual HRESULT WINAPI put_start(BSTR v) = 0;
    virtual HRESULT WINAPI get_start(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLImgElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLImgElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLImgElement *This);
      ULONG (WINAPI *Release)(IHTMLImgElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLImgElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLImgElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLImgElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLImgElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_isMap)(IHTMLImgElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_isMap)(IHTMLImgElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_useMap)(IHTMLImgElement *This,BSTR v);
      HRESULT (WINAPI *get_useMap)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *get_mimeType)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *get_fileSize)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *get_fileCreatedDate)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *get_fileModifiedDate)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *get_fileUpdatedDate)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *get_protocol)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *get_href)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *get_nameProp)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *put_border)(IHTMLImgElement *This,VARIANT v);
      HRESULT (WINAPI *get_border)(IHTMLImgElement *This,VARIANT *p);
      HRESULT (WINAPI *put_vspace)(IHTMLImgElement *This,long v);
      HRESULT (WINAPI *get_vspace)(IHTMLImgElement *This,long *p);
      HRESULT (WINAPI *put_hspace)(IHTMLImgElement *This,long v);
      HRESULT (WINAPI *get_hspace)(IHTMLImgElement *This,long *p);
      HRESULT (WINAPI *put_alt)(IHTMLImgElement *This,BSTR v);
      HRESULT (WINAPI *get_alt)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *put_src)(IHTMLImgElement *This,BSTR v);
      HRESULT (WINAPI *get_src)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *put_lowsrc)(IHTMLImgElement *This,BSTR v);
      HRESULT (WINAPI *get_lowsrc)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *put_vrml)(IHTMLImgElement *This,BSTR v);
      HRESULT (WINAPI *get_vrml)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *put_dynsrc)(IHTMLImgElement *This,BSTR v);
      HRESULT (WINAPI *get_dynsrc)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *get_readyState)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *get_complete)(IHTMLImgElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_loop)(IHTMLImgElement *This,VARIANT v);
      HRESULT (WINAPI *get_loop)(IHTMLImgElement *This,VARIANT *p);
      HRESULT (WINAPI *put_align)(IHTMLImgElement *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *put_onload)(IHTMLImgElement *This,VARIANT v);
      HRESULT (WINAPI *get_onload)(IHTMLImgElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onerror)(IHTMLImgElement *This,VARIANT v);
      HRESULT (WINAPI *get_onerror)(IHTMLImgElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onabort)(IHTMLImgElement *This,VARIANT v);
      HRESULT (WINAPI *get_onabort)(IHTMLImgElement *This,VARIANT *p);
      HRESULT (WINAPI *put_name)(IHTMLImgElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLImgElement *This,BSTR *p);
      HRESULT (WINAPI *put_width)(IHTMLImgElement *This,long v);
      HRESULT (WINAPI *get_width)(IHTMLImgElement *This,long *p);
      HRESULT (WINAPI *put_height)(IHTMLImgElement *This,long v);
      HRESULT (WINAPI *get_height)(IHTMLImgElement *This,long *p);
      HRESULT (WINAPI *put_start)(IHTMLImgElement *This,BSTR v);
      HRESULT (WINAPI *get_start)(IHTMLImgElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLImgElementVtbl;
  interface IHTMLImgElement {
    CONST_VTBL struct IHTMLImgElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLImgElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLImgElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLImgElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLImgElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLImgElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLImgElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLImgElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLImgElement_put_isMap(This,v) (This)->lpVtbl->put_isMap(This,v)
#define IHTMLImgElement_get_isMap(This,p) (This)->lpVtbl->get_isMap(This,p)
#define IHTMLImgElement_put_useMap(This,v) (This)->lpVtbl->put_useMap(This,v)
#define IHTMLImgElement_get_useMap(This,p) (This)->lpVtbl->get_useMap(This,p)
#define IHTMLImgElement_get_mimeType(This,p) (This)->lpVtbl->get_mimeType(This,p)
#define IHTMLImgElement_get_fileSize(This,p) (This)->lpVtbl->get_fileSize(This,p)
#define IHTMLImgElement_get_fileCreatedDate(This,p) (This)->lpVtbl->get_fileCreatedDate(This,p)
#define IHTMLImgElement_get_fileModifiedDate(This,p) (This)->lpVtbl->get_fileModifiedDate(This,p)
#define IHTMLImgElement_get_fileUpdatedDate(This,p) (This)->lpVtbl->get_fileUpdatedDate(This,p)
#define IHTMLImgElement_get_protocol(This,p) (This)->lpVtbl->get_protocol(This,p)
#define IHTMLImgElement_get_href(This,p) (This)->lpVtbl->get_href(This,p)
#define IHTMLImgElement_get_nameProp(This,p) (This)->lpVtbl->get_nameProp(This,p)
#define IHTMLImgElement_put_border(This,v) (This)->lpVtbl->put_border(This,v)
#define IHTMLImgElement_get_border(This,p) (This)->lpVtbl->get_border(This,p)
#define IHTMLImgElement_put_vspace(This,v) (This)->lpVtbl->put_vspace(This,v)
#define IHTMLImgElement_get_vspace(This,p) (This)->lpVtbl->get_vspace(This,p)
#define IHTMLImgElement_put_hspace(This,v) (This)->lpVtbl->put_hspace(This,v)
#define IHTMLImgElement_get_hspace(This,p) (This)->lpVtbl->get_hspace(This,p)
#define IHTMLImgElement_put_alt(This,v) (This)->lpVtbl->put_alt(This,v)
#define IHTMLImgElement_get_alt(This,p) (This)->lpVtbl->get_alt(This,p)
#define IHTMLImgElement_put_src(This,v) (This)->lpVtbl->put_src(This,v)
#define IHTMLImgElement_get_src(This,p) (This)->lpVtbl->get_src(This,p)
#define IHTMLImgElement_put_lowsrc(This,v) (This)->lpVtbl->put_lowsrc(This,v)
#define IHTMLImgElement_get_lowsrc(This,p) (This)->lpVtbl->get_lowsrc(This,p)
#define IHTMLImgElement_put_vrml(This,v) (This)->lpVtbl->put_vrml(This,v)
#define IHTMLImgElement_get_vrml(This,p) (This)->lpVtbl->get_vrml(This,p)
#define IHTMLImgElement_put_dynsrc(This,v) (This)->lpVtbl->put_dynsrc(This,v)
#define IHTMLImgElement_get_dynsrc(This,p) (This)->lpVtbl->get_dynsrc(This,p)
#define IHTMLImgElement_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IHTMLImgElement_get_complete(This,p) (This)->lpVtbl->get_complete(This,p)
#define IHTMLImgElement_put_loop(This,v) (This)->lpVtbl->put_loop(This,v)
#define IHTMLImgElement_get_loop(This,p) (This)->lpVtbl->get_loop(This,p)
#define IHTMLImgElement_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLImgElement_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#define IHTMLImgElement_put_onload(This,v) (This)->lpVtbl->put_onload(This,v)
#define IHTMLImgElement_get_onload(This,p) (This)->lpVtbl->get_onload(This,p)
#define IHTMLImgElement_put_onerror(This,v) (This)->lpVtbl->put_onerror(This,v)
#define IHTMLImgElement_get_onerror(This,p) (This)->lpVtbl->get_onerror(This,p)
#define IHTMLImgElement_put_onabort(This,v) (This)->lpVtbl->put_onabort(This,v)
#define IHTMLImgElement_get_onabort(This,p) (This)->lpVtbl->get_onabort(This,p)
#define IHTMLImgElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLImgElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLImgElement_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLImgElement_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLImgElement_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLImgElement_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLImgElement_put_start(This,v) (This)->lpVtbl->put_start(This,v)
#define IHTMLImgElement_get_start(This,p) (This)->lpVtbl->get_start(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLImgElement_put_isMap_Proxy(IHTMLImgElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLImgElement_put_isMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_isMap_Proxy(IHTMLImgElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLImgElement_get_isMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_useMap_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_useMap_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_mimeType_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_mimeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_fileSize_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_fileSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_fileCreatedDate_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_fileCreatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_fileModifiedDate_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_fileModifiedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_fileUpdatedDate_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_fileUpdatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_protocol_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_href_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_nameProp_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_nameProp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_border_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_border_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_vspace_Proxy(IHTMLImgElement *This,long v);
  void __RPC_STUB IHTMLImgElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_vspace_Proxy(IHTMLImgElement *This,long *p);
  void __RPC_STUB IHTMLImgElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_hspace_Proxy(IHTMLImgElement *This,long v);
  void __RPC_STUB IHTMLImgElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_hspace_Proxy(IHTMLImgElement *This,long *p);
  void __RPC_STUB IHTMLImgElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_alt_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_alt_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_src_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_src_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_lowsrc_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_lowsrc_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_vrml_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_vrml_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_dynsrc_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_dynsrc_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_readyState_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_complete_Proxy(IHTMLImgElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLImgElement_get_complete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_loop_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_loop_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_align_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_align_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_onload_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_onload_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_onerror_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_onerror_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_onabort_Proxy(IHTMLImgElement *This,VARIANT v);
  void __RPC_STUB IHTMLImgElement_put_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_onabort_Proxy(IHTMLImgElement *This,VARIANT *p);
  void __RPC_STUB IHTMLImgElement_get_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_name_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_name_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_width_Proxy(IHTMLImgElement *This,long v);
  void __RPC_STUB IHTMLImgElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_width_Proxy(IHTMLImgElement *This,long *p);
  void __RPC_STUB IHTMLImgElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_height_Proxy(IHTMLImgElement *This,long v);
  void __RPC_STUB IHTMLImgElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_height_Proxy(IHTMLImgElement *This,long *p);
  void __RPC_STUB IHTMLImgElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_put_start_Proxy(IHTMLImgElement *This,BSTR v);
  void __RPC_STUB IHTMLImgElement_put_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement_get_start_Proxy(IHTMLImgElement *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement_get_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLImgElement2_INTERFACE_DEFINED__
#define __IHTMLImgElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLImgElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLImgElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_longDesc(BSTR v) = 0;
    virtual HRESULT WINAPI get_longDesc(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLImgElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLImgElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLImgElement2 *This);
      ULONG (WINAPI *Release)(IHTMLImgElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLImgElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLImgElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLImgElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLImgElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_longDesc)(IHTMLImgElement2 *This,BSTR v);
      HRESULT (WINAPI *get_longDesc)(IHTMLImgElement2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLImgElement2Vtbl;
  interface IHTMLImgElement2 {
    CONST_VTBL struct IHTMLImgElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLImgElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLImgElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLImgElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLImgElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLImgElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLImgElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLImgElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLImgElement2_put_longDesc(This,v) (This)->lpVtbl->put_longDesc(This,v)
#define IHTMLImgElement2_get_longDesc(This,p) (This)->lpVtbl->get_longDesc(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLImgElement2_put_longDesc_Proxy(IHTMLImgElement2 *This,BSTR v);
  void __RPC_STUB IHTMLImgElement2_put_longDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLImgElement2_get_longDesc_Proxy(IHTMLImgElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLImgElement2_get_longDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLImageElementFactory_INTERFACE_DEFINED__
#define __IHTMLImageElementFactory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLImageElementFactory;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLImageElementFactory : public IDispatch {
  public:
    virtual HRESULT WINAPI create(VARIANT width,VARIANT height,IHTMLImgElement **__MIDL_0011) = 0;
  };
#else
  typedef struct IHTMLImageElementFactoryVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLImageElementFactory *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLImageElementFactory *This);
      ULONG (WINAPI *Release)(IHTMLImageElementFactory *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLImageElementFactory *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLImageElementFactory *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLImageElementFactory *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLImageElementFactory *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *create)(IHTMLImageElementFactory *This,VARIANT width,VARIANT height,IHTMLImgElement **__MIDL_0011);
    END_INTERFACE
  } IHTMLImageElementFactoryVtbl;
  interface IHTMLImageElementFactory {
    CONST_VTBL struct IHTMLImageElementFactoryVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLImageElementFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLImageElementFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLImageElementFactory_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLImageElementFactory_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLImageElementFactory_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLImageElementFactory_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLImageElementFactory_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLImageElementFactory_create(This,width,height,__MIDL_0011) (This)->lpVtbl->create(This,width,height,__MIDL_0011)
#endif
#endif
  HRESULT WINAPI IHTMLImageElementFactory_create_Proxy(IHTMLImageElementFactory *This,VARIANT width,VARIANT height,IHTMLImgElement **__MIDL_0011);
  void __RPC_STUB IHTMLImageElementFactory_create_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLImg_DISPINTERFACE_DEFINED__
#define __DispHTMLImg_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLImg;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLImg : public IDispatch {
  };
#else
  typedef struct DispHTMLImgVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLImg *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLImg *This);
      ULONG (WINAPI *Release)(DispHTMLImg *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLImg *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLImg *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLImg *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLImg *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLImgVtbl;
  interface DispHTMLImg {
    CONST_VTBL struct DispHTMLImgVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLImg_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLImg_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLImg_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLImg_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLImg_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLImg_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLImg_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLImg;
#ifdef __cplusplus
  class HTMLImg;
#endif
  EXTERN_C const CLSID CLSID_HTMLImageElementFactory;
#ifdef __cplusplus
  class HTMLImageElementFactory;
#endif

#ifndef __IHTMLBodyElement_INTERFACE_DEFINED__
#define __IHTMLBodyElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBodyElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLBodyElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgProperties(BSTR v) = 0;
    virtual HRESULT WINAPI get_bgProperties(BSTR *p) = 0;
    virtual HRESULT WINAPI put_leftMargin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_leftMargin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_topMargin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_topMargin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_rightMargin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_rightMargin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_bottomMargin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bottomMargin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_text(VARIANT v) = 0;
    virtual HRESULT WINAPI get_text(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_link(VARIANT v) = 0;
    virtual HRESULT WINAPI get_link(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vLink(VARIANT v) = 0;
    virtual HRESULT WINAPI get_vLink(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_aLink(VARIANT v) = 0;
    virtual HRESULT WINAPI get_aLink(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scroll(BSTR v) = 0;
    virtual HRESULT WINAPI get_scroll(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforeunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
#else
  typedef struct IHTMLBodyElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLBodyElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLBodyElement *This);
      ULONG (WINAPI *Release)(IHTMLBodyElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLBodyElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLBodyElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLBodyElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLBodyElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_background)(IHTMLBodyElement *This,BSTR v);
      HRESULT (WINAPI *get_background)(IHTMLBodyElement *This,BSTR *p);
      HRESULT (WINAPI *put_bgProperties)(IHTMLBodyElement *This,BSTR v);
      HRESULT (WINAPI *get_bgProperties)(IHTMLBodyElement *This,BSTR *p);
      HRESULT (WINAPI *put_leftMargin)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_leftMargin)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *put_topMargin)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_topMargin)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *put_rightMargin)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_rightMargin)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *put_bottomMargin)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_bottomMargin)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *put_noWrap)(IHTMLBodyElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_noWrap)(IHTMLBodyElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_bgColor)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_bgColor)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *put_text)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_text)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *put_link)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_link)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *put_vLink)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_vLink)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *put_aLink)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_aLink)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onload)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_onload)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onunload)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_onunload)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *put_scroll)(IHTMLBodyElement *This,BSTR v);
      HRESULT (WINAPI *get_scroll)(IHTMLBodyElement *This,BSTR *p);
      HRESULT (WINAPI *put_onselect)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_onselect)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onbeforeunload)(IHTMLBodyElement *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforeunload)(IHTMLBodyElement *This,VARIANT *p);
      HRESULT (WINAPI *createTextRange)(IHTMLBodyElement *This,IHTMLTxtRange **range);
    END_INTERFACE
  } IHTMLBodyElementVtbl;
  interface IHTMLBodyElement {
    CONST_VTBL struct IHTMLBodyElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLBodyElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLBodyElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLBodyElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLBodyElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLBodyElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLBodyElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLBodyElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLBodyElement_put_background(This,v) (This)->lpVtbl->put_background(This,v)
#define IHTMLBodyElement_get_background(This,p) (This)->lpVtbl->get_background(This,p)
#define IHTMLBodyElement_put_bgProperties(This,v) (This)->lpVtbl->put_bgProperties(This,v)
#define IHTMLBodyElement_get_bgProperties(This,p) (This)->lpVtbl->get_bgProperties(This,p)
#define IHTMLBodyElement_put_leftMargin(This,v) (This)->lpVtbl->put_leftMargin(This,v)
#define IHTMLBodyElement_get_leftMargin(This,p) (This)->lpVtbl->get_leftMargin(This,p)
#define IHTMLBodyElement_put_topMargin(This,v) (This)->lpVtbl->put_topMargin(This,v)
#define IHTMLBodyElement_get_topMargin(This,p) (This)->lpVtbl->get_topMargin(This,p)
#define IHTMLBodyElement_put_rightMargin(This,v) (This)->lpVtbl->put_rightMargin(This,v)
#define IHTMLBodyElement_get_rightMargin(This,p) (This)->lpVtbl->get_rightMargin(This,p)
#define IHTMLBodyElement_put_bottomMargin(This,v) (This)->lpVtbl->put_bottomMargin(This,v)
#define IHTMLBodyElement_get_bottomMargin(This,p) (This)->lpVtbl->get_bottomMargin(This,p)
#define IHTMLBodyElement_put_noWrap(This,v) (This)->lpVtbl->put_noWrap(This,v)
#define IHTMLBodyElement_get_noWrap(This,p) (This)->lpVtbl->get_noWrap(This,p)
#define IHTMLBodyElement_put_bgColor(This,v) (This)->lpVtbl->put_bgColor(This,v)
#define IHTMLBodyElement_get_bgColor(This,p) (This)->lpVtbl->get_bgColor(This,p)
#define IHTMLBodyElement_put_text(This,v) (This)->lpVtbl->put_text(This,v)
#define IHTMLBodyElement_get_text(This,p) (This)->lpVtbl->get_text(This,p)
#define IHTMLBodyElement_put_link(This,v) (This)->lpVtbl->put_link(This,v)
#define IHTMLBodyElement_get_link(This,p) (This)->lpVtbl->get_link(This,p)
#define IHTMLBodyElement_put_vLink(This,v) (This)->lpVtbl->put_vLink(This,v)
#define IHTMLBodyElement_get_vLink(This,p) (This)->lpVtbl->get_vLink(This,p)
#define IHTMLBodyElement_put_aLink(This,v) (This)->lpVtbl->put_aLink(This,v)
#define IHTMLBodyElement_get_aLink(This,p) (This)->lpVtbl->get_aLink(This,p)
#define IHTMLBodyElement_put_onload(This,v) (This)->lpVtbl->put_onload(This,v)
#define IHTMLBodyElement_get_onload(This,p) (This)->lpVtbl->get_onload(This,p)
#define IHTMLBodyElement_put_onunload(This,v) (This)->lpVtbl->put_onunload(This,v)
#define IHTMLBodyElement_get_onunload(This,p) (This)->lpVtbl->get_onunload(This,p)
#define IHTMLBodyElement_put_scroll(This,v) (This)->lpVtbl->put_scroll(This,v)
#define IHTMLBodyElement_get_scroll(This,p) (This)->lpVtbl->get_scroll(This,p)
#define IHTMLBodyElement_put_onselect(This,v) (This)->lpVtbl->put_onselect(This,v)
#define IHTMLBodyElement_get_onselect(This,p) (This)->lpVtbl->get_onselect(This,p)
#define IHTMLBodyElement_put_onbeforeunload(This,v) (This)->lpVtbl->put_onbeforeunload(This,v)
#define IHTMLBodyElement_get_onbeforeunload(This,p) (This)->lpVtbl->get_onbeforeunload(This,p)
#define IHTMLBodyElement_createTextRange(This,range) (This)->lpVtbl->createTextRange(This,range)
#endif
#endif
  HRESULT WINAPI IHTMLBodyElement_put_background_Proxy(IHTMLBodyElement *This,BSTR v);
  void __RPC_STUB IHTMLBodyElement_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_background_Proxy(IHTMLBodyElement *This,BSTR *p);
  void __RPC_STUB IHTMLBodyElement_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_bgProperties_Proxy(IHTMLBodyElement *This,BSTR v);
  void __RPC_STUB IHTMLBodyElement_put_bgProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_bgProperties_Proxy(IHTMLBodyElement *This,BSTR *p);
  void __RPC_STUB IHTMLBodyElement_get_bgProperties_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_leftMargin_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_leftMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_leftMargin_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_leftMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_topMargin_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_topMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_topMargin_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_topMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_rightMargin_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_rightMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_rightMargin_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_rightMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_bottomMargin_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_bottomMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_bottomMargin_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_bottomMargin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_noWrap_Proxy(IHTMLBodyElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLBodyElement_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_noWrap_Proxy(IHTMLBodyElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLBodyElement_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_bgColor_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_bgColor_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_text_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_text_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_link_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_link_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_link_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_link_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_vLink_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_vLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_vLink_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_vLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_aLink_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_aLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_aLink_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_aLink_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_onload_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_onload_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_onunload_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_onunload_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_scroll_Proxy(IHTMLBodyElement *This,BSTR v);
  void __RPC_STUB IHTMLBodyElement_put_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_scroll_Proxy(IHTMLBodyElement *This,BSTR *p);
  void __RPC_STUB IHTMLBodyElement_get_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_onselect_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_onselect_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_put_onbeforeunload_Proxy(IHTMLBodyElement *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement_put_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_get_onbeforeunload_Proxy(IHTMLBodyElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement_get_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement_createTextRange_Proxy(IHTMLBodyElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLBodyElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLBodyElement2_INTERFACE_DEFINED__
#define __IHTMLBodyElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBodyElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLBodyElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_onbeforeprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeprint(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterprint(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLBodyElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLBodyElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLBodyElement2 *This);
      ULONG (WINAPI *Release)(IHTMLBodyElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLBodyElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLBodyElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLBodyElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLBodyElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_onbeforeprint)(IHTMLBodyElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforeprint)(IHTMLBodyElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onafterprint)(IHTMLBodyElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onafterprint)(IHTMLBodyElement2 *This,VARIANT *p);
    END_INTERFACE
  } IHTMLBodyElement2Vtbl;
  interface IHTMLBodyElement2 {
    CONST_VTBL struct IHTMLBodyElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLBodyElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLBodyElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLBodyElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLBodyElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLBodyElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLBodyElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLBodyElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLBodyElement2_put_onbeforeprint(This,v) (This)->lpVtbl->put_onbeforeprint(This,v)
#define IHTMLBodyElement2_get_onbeforeprint(This,p) (This)->lpVtbl->get_onbeforeprint(This,p)
#define IHTMLBodyElement2_put_onafterprint(This,v) (This)->lpVtbl->put_onafterprint(This,v)
#define IHTMLBodyElement2_get_onafterprint(This,p) (This)->lpVtbl->get_onafterprint(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLBodyElement2_put_onbeforeprint_Proxy(IHTMLBodyElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement2_put_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement2_get_onbeforeprint_Proxy(IHTMLBodyElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement2_get_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement2_put_onafterprint_Proxy(IHTMLBodyElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLBodyElement2_put_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBodyElement2_get_onafterprint_Proxy(IHTMLBodyElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLBodyElement2_get_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBody_DISPINTERFACE_DEFINED__
#define __DispHTMLBody_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBody;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLBody : public IDispatch {
  };
#else
  typedef struct DispHTMLBodyVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLBody *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLBody *This);
      ULONG (WINAPI *Release)(DispHTMLBody *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLBody *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLBody *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLBody *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLBody *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLBodyVtbl;
  interface DispHTMLBody {
    CONST_VTBL struct DispHTMLBodyVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLBody_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLBody_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLBody_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLBody_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLBody_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLBody_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLBody_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLBody;
#ifdef __cplusplus
  class HTMLBody;
#endif

#ifndef __IHTMLFontElement_INTERFACE_DEFINED__
#define __IHTMLFontElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFontElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFontElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_face(BSTR v) = 0;
    virtual HRESULT WINAPI get_face(BSTR *p) = 0;
    virtual HRESULT WINAPI put_size(VARIANT v) = 0;
    virtual HRESULT WINAPI get_size(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLFontElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFontElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFontElement *This);
      ULONG (WINAPI *Release)(IHTMLFontElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFontElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFontElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFontElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFontElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_color)(IHTMLFontElement *This,VARIANT v);
      HRESULT (WINAPI *get_color)(IHTMLFontElement *This,VARIANT *p);
      HRESULT (WINAPI *put_face)(IHTMLFontElement *This,BSTR v);
      HRESULT (WINAPI *get_face)(IHTMLFontElement *This,BSTR *p);
      HRESULT (WINAPI *put_size)(IHTMLFontElement *This,VARIANT v);
      HRESULT (WINAPI *get_size)(IHTMLFontElement *This,VARIANT *p);
    END_INTERFACE
  } IHTMLFontElementVtbl;
  interface IHTMLFontElement {
    CONST_VTBL struct IHTMLFontElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFontElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFontElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFontElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFontElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFontElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFontElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFontElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFontElement_put_color(This,v) (This)->lpVtbl->put_color(This,v)
#define IHTMLFontElement_get_color(This,p) (This)->lpVtbl->get_color(This,p)
#define IHTMLFontElement_put_face(This,v) (This)->lpVtbl->put_face(This,v)
#define IHTMLFontElement_get_face(This,p) (This)->lpVtbl->get_face(This,p)
#define IHTMLFontElement_put_size(This,v) (This)->lpVtbl->put_size(This,v)
#define IHTMLFontElement_get_size(This,p) (This)->lpVtbl->get_size(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLFontElement_put_color_Proxy(IHTMLFontElement *This,VARIANT v);
  void __RPC_STUB IHTMLFontElement_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_get_color_Proxy(IHTMLFontElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFontElement_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_put_face_Proxy(IHTMLFontElement *This,BSTR v);
  void __RPC_STUB IHTMLFontElement_put_face_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_get_face_Proxy(IHTMLFontElement *This,BSTR *p);
  void __RPC_STUB IHTMLFontElement_get_face_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_put_size_Proxy(IHTMLFontElement *This,VARIANT v);
  void __RPC_STUB IHTMLFontElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontElement_get_size_Proxy(IHTMLFontElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFontElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFontElement_DISPINTERFACE_DEFINED__
#define __DispHTMLFontElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFontElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLFontElement : public IDispatch {
  };
#else
  typedef struct DispHTMLFontElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLFontElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLFontElement *This);
      ULONG (WINAPI *Release)(DispHTMLFontElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLFontElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLFontElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLFontElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLFontElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLFontElementVtbl;
  interface DispHTMLFontElement {
    CONST_VTBL struct DispHTMLFontElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLFontElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLFontElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLFontElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLFontElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLFontElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLFontElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLFontElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLFontElement;
#ifdef __cplusplus
  class HTMLFontElement;
#endif

#ifndef __HTMLAnchorEvents2_DISPINTERFACE_DEFINED__
#define __HTMLAnchorEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLAnchorEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLAnchorEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLAnchorEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLAnchorEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLAnchorEvents2 *This);
      ULONG (WINAPI *Release)(HTMLAnchorEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLAnchorEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLAnchorEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLAnchorEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLAnchorEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLAnchorEvents2Vtbl;
  interface HTMLAnchorEvents2 {
    CONST_VTBL struct HTMLAnchorEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLAnchorEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLAnchorEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLAnchorEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLAnchorEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLAnchorEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLAnchorEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLAnchorEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLAnchorEvents_DISPINTERFACE_DEFINED__
#define __HTMLAnchorEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLAnchorEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLAnchorEvents : public IDispatch {
  };
#else
  typedef struct HTMLAnchorEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLAnchorEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLAnchorEvents *This);
      ULONG (WINAPI *Release)(HTMLAnchorEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLAnchorEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLAnchorEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLAnchorEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLAnchorEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLAnchorEventsVtbl;
  interface HTMLAnchorEvents {
    CONST_VTBL struct HTMLAnchorEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLAnchorEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLAnchorEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLAnchorEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLAnchorEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLAnchorEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLAnchorEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLAnchorEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLAnchorElement_INTERFACE_DEFINED__
#define __IHTMLAnchorElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAnchorElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLAnchorElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rel(BSTR v) = 0;
    virtual HRESULT WINAPI get_rel(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rev(BSTR v) = 0;
    virtual HRESULT WINAPI get_rev(BSTR *p) = 0;
    virtual HRESULT WINAPI put_urn(BSTR v) = 0;
    virtual HRESULT WINAPI get_urn(BSTR *p) = 0;
    virtual HRESULT WINAPI put_Methods(BSTR v) = 0;
    virtual HRESULT WINAPI get_Methods(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_host(BSTR v) = 0;
    virtual HRESULT WINAPI get_host(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hostname(BSTR v) = 0;
    virtual HRESULT WINAPI get_hostname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pathname(BSTR v) = 0;
    virtual HRESULT WINAPI get_pathname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_port(BSTR v) = 0;
    virtual HRESULT WINAPI get_port(BSTR *p) = 0;
    virtual HRESULT WINAPI put_protocol(BSTR v) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI put_search(BSTR v) = 0;
    virtual HRESULT WINAPI get_search(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hash(BSTR v) = 0;
    virtual HRESULT WINAPI get_hash(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_accessKey(BSTR v) = 0;
    virtual HRESULT WINAPI get_accessKey(BSTR *p) = 0;
    virtual HRESULT WINAPI get_protocolLong(BSTR *p) = 0;
    virtual HRESULT WINAPI get_mimeType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_nameProp(BSTR *p) = 0;
    virtual HRESULT WINAPI put_tabIndex(short v) = 0;
    virtual HRESULT WINAPI get_tabIndex(short *p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
  };
#else
  typedef struct IHTMLAnchorElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLAnchorElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLAnchorElement *This);
      ULONG (WINAPI *Release)(IHTMLAnchorElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLAnchorElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLAnchorElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLAnchorElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLAnchorElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_href)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_href)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_target)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_target)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_rel)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_rel)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_rev)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_rev)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_urn)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_urn)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_Methods)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_Methods)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_host)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_host)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_hostname)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_hostname)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_pathname)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_pathname)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_port)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_port)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_protocol)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_protocol)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_search)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_search)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_hash)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_hash)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_onblur)(IHTMLAnchorElement *This,VARIANT v);
      HRESULT (WINAPI *get_onblur)(IHTMLAnchorElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onfocus)(IHTMLAnchorElement *This,VARIANT v);
      HRESULT (WINAPI *get_onfocus)(IHTMLAnchorElement *This,VARIANT *p);
      HRESULT (WINAPI *put_accessKey)(IHTMLAnchorElement *This,BSTR v);
      HRESULT (WINAPI *get_accessKey)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *get_protocolLong)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *get_mimeType)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *get_nameProp)(IHTMLAnchorElement *This,BSTR *p);
      HRESULT (WINAPI *put_tabIndex)(IHTMLAnchorElement *This,short v);
      HRESULT (WINAPI *get_tabIndex)(IHTMLAnchorElement *This,short *p);
      HRESULT (WINAPI *focus)(IHTMLAnchorElement *This);
      HRESULT (WINAPI *blur)(IHTMLAnchorElement *This);
    END_INTERFACE
  } IHTMLAnchorElementVtbl;
  interface IHTMLAnchorElement {
    CONST_VTBL struct IHTMLAnchorElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLAnchorElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLAnchorElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLAnchorElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLAnchorElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLAnchorElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLAnchorElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLAnchorElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLAnchorElement_put_href(This,v) (This)->lpVtbl->put_href(This,v)
#define IHTMLAnchorElement_get_href(This,p) (This)->lpVtbl->get_href(This,p)
#define IHTMLAnchorElement_put_target(This,v) (This)->lpVtbl->put_target(This,v)
#define IHTMLAnchorElement_get_target(This,p) (This)->lpVtbl->get_target(This,p)
#define IHTMLAnchorElement_put_rel(This,v) (This)->lpVtbl->put_rel(This,v)
#define IHTMLAnchorElement_get_rel(This,p) (This)->lpVtbl->get_rel(This,p)
#define IHTMLAnchorElement_put_rev(This,v) (This)->lpVtbl->put_rev(This,v)
#define IHTMLAnchorElement_get_rev(This,p) (This)->lpVtbl->get_rev(This,p)
#define IHTMLAnchorElement_put_urn(This,v) (This)->lpVtbl->put_urn(This,v)
#define IHTMLAnchorElement_get_urn(This,p) (This)->lpVtbl->get_urn(This,p)
#define IHTMLAnchorElement_put_Methods(This,v) (This)->lpVtbl->put_Methods(This,v)
#define IHTMLAnchorElement_get_Methods(This,p) (This)->lpVtbl->get_Methods(This,p)
#define IHTMLAnchorElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLAnchorElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLAnchorElement_put_host(This,v) (This)->lpVtbl->put_host(This,v)
#define IHTMLAnchorElement_get_host(This,p) (This)->lpVtbl->get_host(This,p)
#define IHTMLAnchorElement_put_hostname(This,v) (This)->lpVtbl->put_hostname(This,v)
#define IHTMLAnchorElement_get_hostname(This,p) (This)->lpVtbl->get_hostname(This,p)
#define IHTMLAnchorElement_put_pathname(This,v) (This)->lpVtbl->put_pathname(This,v)
#define IHTMLAnchorElement_get_pathname(This,p) (This)->lpVtbl->get_pathname(This,p)
#define IHTMLAnchorElement_put_port(This,v) (This)->lpVtbl->put_port(This,v)
#define IHTMLAnchorElement_get_port(This,p) (This)->lpVtbl->get_port(This,p)
#define IHTMLAnchorElement_put_protocol(This,v) (This)->lpVtbl->put_protocol(This,v)
#define IHTMLAnchorElement_get_protocol(This,p) (This)->lpVtbl->get_protocol(This,p)
#define IHTMLAnchorElement_put_search(This,v) (This)->lpVtbl->put_search(This,v)
#define IHTMLAnchorElement_get_search(This,p) (This)->lpVtbl->get_search(This,p)
#define IHTMLAnchorElement_put_hash(This,v) (This)->lpVtbl->put_hash(This,v)
#define IHTMLAnchorElement_get_hash(This,p) (This)->lpVtbl->get_hash(This,p)
#define IHTMLAnchorElement_put_onblur(This,v) (This)->lpVtbl->put_onblur(This,v)
#define IHTMLAnchorElement_get_onblur(This,p) (This)->lpVtbl->get_onblur(This,p)
#define IHTMLAnchorElement_put_onfocus(This,v) (This)->lpVtbl->put_onfocus(This,v)
#define IHTMLAnchorElement_get_onfocus(This,p) (This)->lpVtbl->get_onfocus(This,p)
#define IHTMLAnchorElement_put_accessKey(This,v) (This)->lpVtbl->put_accessKey(This,v)
#define IHTMLAnchorElement_get_accessKey(This,p) (This)->lpVtbl->get_accessKey(This,p)
#define IHTMLAnchorElement_get_protocolLong(This,p) (This)->lpVtbl->get_protocolLong(This,p)
#define IHTMLAnchorElement_get_mimeType(This,p) (This)->lpVtbl->get_mimeType(This,p)
#define IHTMLAnchorElement_get_nameProp(This,p) (This)->lpVtbl->get_nameProp(This,p)
#define IHTMLAnchorElement_put_tabIndex(This,v) (This)->lpVtbl->put_tabIndex(This,v)
#define IHTMLAnchorElement_get_tabIndex(This,p) (This)->lpVtbl->get_tabIndex(This,p)
#define IHTMLAnchorElement_focus(This) (This)->lpVtbl->focus(This)
#define IHTMLAnchorElement_blur(This) (This)->lpVtbl->blur(This)
#endif
#endif
  HRESULT WINAPI IHTMLAnchorElement_put_href_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_href_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_target_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_target_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_rel_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_rel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_rel_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_rel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_rev_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_rev_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_rev_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_rev_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_urn_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_urn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_urn_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_urn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_Methods_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_Methods_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_Methods_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_Methods_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_name_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_name_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_host_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_host_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_hostname_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_hostname_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_pathname_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_pathname_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_port_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_port_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_protocol_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_protocol_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_search_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_search_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_hash_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_hash_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_onblur_Proxy(IHTMLAnchorElement *This,VARIANT v);
  void __RPC_STUB IHTMLAnchorElement_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_onblur_Proxy(IHTMLAnchorElement *This,VARIANT *p);
  void __RPC_STUB IHTMLAnchorElement_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_onfocus_Proxy(IHTMLAnchorElement *This,VARIANT v);
  void __RPC_STUB IHTMLAnchorElement_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_onfocus_Proxy(IHTMLAnchorElement *This,VARIANT *p);
  void __RPC_STUB IHTMLAnchorElement_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_accessKey_Proxy(IHTMLAnchorElement *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement_put_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_accessKey_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_protocolLong_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_protocolLong_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_mimeType_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_mimeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_nameProp_Proxy(IHTMLAnchorElement *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement_get_nameProp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_put_tabIndex_Proxy(IHTMLAnchorElement *This,short v);
  void __RPC_STUB IHTMLAnchorElement_put_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_get_tabIndex_Proxy(IHTMLAnchorElement *This,short *p);
  void __RPC_STUB IHTMLAnchorElement_get_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_focus_Proxy(IHTMLAnchorElement *This);
  void __RPC_STUB IHTMLAnchorElement_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement_blur_Proxy(IHTMLAnchorElement *This);
  void __RPC_STUB IHTMLAnchorElement_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAnchorElement2_INTERFACE_DEFINED__
#define __IHTMLAnchorElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAnchorElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLAnchorElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
    virtual HRESULT WINAPI put_coords(BSTR v) = 0;
    virtual HRESULT WINAPI get_coords(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hreflang(BSTR v) = 0;
    virtual HRESULT WINAPI get_hreflang(BSTR *p) = 0;
    virtual HRESULT WINAPI put_shape(BSTR v) = 0;
    virtual HRESULT WINAPI get_shape(BSTR *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLAnchorElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLAnchorElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLAnchorElement2 *This);
      ULONG (WINAPI *Release)(IHTMLAnchorElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLAnchorElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLAnchorElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLAnchorElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLAnchorElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_charset)(IHTMLAnchorElement2 *This,BSTR v);
      HRESULT (WINAPI *get_charset)(IHTMLAnchorElement2 *This,BSTR *p);
      HRESULT (WINAPI *put_coords)(IHTMLAnchorElement2 *This,BSTR v);
      HRESULT (WINAPI *get_coords)(IHTMLAnchorElement2 *This,BSTR *p);
      HRESULT (WINAPI *put_hreflang)(IHTMLAnchorElement2 *This,BSTR v);
      HRESULT (WINAPI *get_hreflang)(IHTMLAnchorElement2 *This,BSTR *p);
      HRESULT (WINAPI *put_shape)(IHTMLAnchorElement2 *This,BSTR v);
      HRESULT (WINAPI *get_shape)(IHTMLAnchorElement2 *This,BSTR *p);
      HRESULT (WINAPI *put_type)(IHTMLAnchorElement2 *This,BSTR v);
      HRESULT (WINAPI *get_type)(IHTMLAnchorElement2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLAnchorElement2Vtbl;
  interface IHTMLAnchorElement2 {
    CONST_VTBL struct IHTMLAnchorElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLAnchorElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLAnchorElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLAnchorElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLAnchorElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLAnchorElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLAnchorElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLAnchorElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLAnchorElement2_put_charset(This,v) (This)->lpVtbl->put_charset(This,v)
#define IHTMLAnchorElement2_get_charset(This,p) (This)->lpVtbl->get_charset(This,p)
#define IHTMLAnchorElement2_put_coords(This,v) (This)->lpVtbl->put_coords(This,v)
#define IHTMLAnchorElement2_get_coords(This,p) (This)->lpVtbl->get_coords(This,p)
#define IHTMLAnchorElement2_put_hreflang(This,v) (This)->lpVtbl->put_hreflang(This,v)
#define IHTMLAnchorElement2_get_hreflang(This,p) (This)->lpVtbl->get_hreflang(This,p)
#define IHTMLAnchorElement2_put_shape(This,v) (This)->lpVtbl->put_shape(This,v)
#define IHTMLAnchorElement2_get_shape(This,p) (This)->lpVtbl->get_shape(This,p)
#define IHTMLAnchorElement2_put_type(This,v) (This)->lpVtbl->put_type(This,v)
#define IHTMLAnchorElement2_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLAnchorElement2_put_charset_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_charset_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_put_coords_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_coords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_coords_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_coords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_put_hreflang_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_hreflang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_hreflang_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_hreflang_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_put_shape_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_shape_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_shape_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_shape_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_put_type_Proxy(IHTMLAnchorElement2 *This,BSTR v);
  void __RPC_STUB IHTMLAnchorElement2_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAnchorElement2_get_type_Proxy(IHTMLAnchorElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLAnchorElement2_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAnchorElement_DISPINTERFACE_DEFINED__
#define __DispHTMLAnchorElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAnchorElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLAnchorElement : public IDispatch {
  };
#else
  typedef struct DispHTMLAnchorElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLAnchorElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLAnchorElement *This);
      ULONG (WINAPI *Release)(DispHTMLAnchorElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLAnchorElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLAnchorElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLAnchorElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLAnchorElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLAnchorElementVtbl;
  interface DispHTMLAnchorElement {
    CONST_VTBL struct DispHTMLAnchorElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLAnchorElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLAnchorElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLAnchorElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLAnchorElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLAnchorElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLAnchorElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLAnchorElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLAnchorElement;
#ifdef __cplusplus
  class HTMLAnchorElement;
#endif

#ifndef __HTMLLabelEvents2_DISPINTERFACE_DEFINED__
#define __HTMLLabelEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLLabelEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLLabelEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLLabelEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLLabelEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLLabelEvents2 *This);
      ULONG (WINAPI *Release)(HTMLLabelEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLLabelEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLLabelEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLLabelEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLLabelEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLLabelEvents2Vtbl;
  interface HTMLLabelEvents2 {
    CONST_VTBL struct HTMLLabelEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLLabelEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLLabelEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLLabelEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLLabelEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLLabelEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLLabelEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLLabelEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLLabelEvents_DISPINTERFACE_DEFINED__
#define __HTMLLabelEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLLabelEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLLabelEvents : public IDispatch {
  };
#else
  typedef struct HTMLLabelEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLLabelEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLLabelEvents *This);
      ULONG (WINAPI *Release)(HTMLLabelEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLLabelEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLLabelEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLLabelEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLLabelEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLLabelEventsVtbl;
  interface HTMLLabelEvents {
    CONST_VTBL struct HTMLLabelEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLLabelEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLLabelEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLLabelEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLLabelEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLLabelEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLLabelEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLLabelEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLLabelElement_INTERFACE_DEFINED__
#define __IHTMLLabelElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLabelElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLLabelElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_htmlFor(BSTR v) = 0;
    virtual HRESULT WINAPI get_htmlFor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_accessKey(BSTR v) = 0;
    virtual HRESULT WINAPI get_accessKey(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLLabelElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLLabelElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLLabelElement *This);
      ULONG (WINAPI *Release)(IHTMLLabelElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLLabelElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLLabelElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLLabelElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLLabelElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_htmlFor)(IHTMLLabelElement *This,BSTR v);
      HRESULT (WINAPI *get_htmlFor)(IHTMLLabelElement *This,BSTR *p);
      HRESULT (WINAPI *put_accessKey)(IHTMLLabelElement *This,BSTR v);
      HRESULT (WINAPI *get_accessKey)(IHTMLLabelElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLLabelElementVtbl;
  interface IHTMLLabelElement {
    CONST_VTBL struct IHTMLLabelElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLLabelElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLLabelElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLLabelElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLLabelElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLLabelElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLLabelElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLLabelElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLLabelElement_put_htmlFor(This,v) (This)->lpVtbl->put_htmlFor(This,v)
#define IHTMLLabelElement_get_htmlFor(This,p) (This)->lpVtbl->get_htmlFor(This,p)
#define IHTMLLabelElement_put_accessKey(This,v) (This)->lpVtbl->put_accessKey(This,v)
#define IHTMLLabelElement_get_accessKey(This,p) (This)->lpVtbl->get_accessKey(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLLabelElement_put_htmlFor_Proxy(IHTMLLabelElement *This,BSTR v);
  void __RPC_STUB IHTMLLabelElement_put_htmlFor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLabelElement_get_htmlFor_Proxy(IHTMLLabelElement *This,BSTR *p);
  void __RPC_STUB IHTMLLabelElement_get_htmlFor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLabelElement_put_accessKey_Proxy(IHTMLLabelElement *This,BSTR v);
  void __RPC_STUB IHTMLLabelElement_put_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLabelElement_get_accessKey_Proxy(IHTMLLabelElement *This,BSTR *p);
  void __RPC_STUB IHTMLLabelElement_get_accessKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLabelElement2_INTERFACE_DEFINED__
#define __IHTMLLabelElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLabelElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLLabelElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
#else
  typedef struct IHTMLLabelElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLLabelElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLLabelElement2 *This);
      ULONG (WINAPI *Release)(IHTMLLabelElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLLabelElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLLabelElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLLabelElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLLabelElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_form)(IHTMLLabelElement2 *This,IHTMLFormElement **p);
    END_INTERFACE
  } IHTMLLabelElement2Vtbl;
  interface IHTMLLabelElement2 {
    CONST_VTBL struct IHTMLLabelElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLLabelElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLLabelElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLLabelElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLLabelElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLLabelElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLLabelElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLLabelElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLLabelElement2_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLLabelElement2_get_form_Proxy(IHTMLLabelElement2 *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLLabelElement2_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLLabelElement_DISPINTERFACE_DEFINED__
#define __DispHTMLLabelElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLLabelElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLLabelElement : public IDispatch {
  };
#else
  typedef struct DispHTMLLabelElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLLabelElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLLabelElement *This);
      ULONG (WINAPI *Release)(DispHTMLLabelElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLLabelElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLLabelElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLLabelElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLLabelElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLLabelElementVtbl;
  interface DispHTMLLabelElement {
    CONST_VTBL struct DispHTMLLabelElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLLabelElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLLabelElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLLabelElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLLabelElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLLabelElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLLabelElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLLabelElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLLabelElement;
#ifdef __cplusplus
  class HTMLLabelElement;
#endif

#ifndef __IHTMLListElement_INTERFACE_DEFINED__
#define __IHTMLListElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLListElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLListElement : public IDispatch {
  };
#else
  typedef struct IHTMLListElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLListElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLListElement *This);
      ULONG (WINAPI *Release)(IHTMLListElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLListElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLListElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLListElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLListElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } IHTMLListElementVtbl;
  interface IHTMLListElement {
    CONST_VTBL struct IHTMLListElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLListElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLListElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLListElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLListElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLListElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLListElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLListElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLListElement2_INTERFACE_DEFINED__
#define __IHTMLListElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLListElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLListElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_compact(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_compact(VARIANT_BOOL *p) = 0;
  };
#else
  typedef struct IHTMLListElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLListElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLListElement2 *This);
      ULONG (WINAPI *Release)(IHTMLListElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLListElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLListElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLListElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLListElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_compact)(IHTMLListElement2 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_compact)(IHTMLListElement2 *This,VARIANT_BOOL *p);
    END_INTERFACE
  } IHTMLListElement2Vtbl;
  interface IHTMLListElement2 {
    CONST_VTBL struct IHTMLListElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLListElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLListElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLListElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLListElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLListElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLListElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLListElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLListElement2_put_compact(This,v) (This)->lpVtbl->put_compact(This,v)
#define IHTMLListElement2_get_compact(This,p) (This)->lpVtbl->get_compact(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLListElement2_put_compact_Proxy(IHTMLListElement2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLListElement2_put_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLListElement2_get_compact_Proxy(IHTMLListElement2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLListElement2_get_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLListElement_DISPINTERFACE_DEFINED__
#define __DispHTMLListElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLListElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLListElement : public IDispatch {
  };
#else
  typedef struct DispHTMLListElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLListElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLListElement *This);
      ULONG (WINAPI *Release)(DispHTMLListElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLListElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLListElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLListElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLListElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLListElementVtbl;
  interface DispHTMLListElement {
    CONST_VTBL struct DispHTMLListElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLListElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLListElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLListElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLListElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLListElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLListElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLListElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLListElement;
#ifdef __cplusplus
  class HTMLListElement;
#endif

#ifndef __IHTMLUListElement_INTERFACE_DEFINED__
#define __IHTMLUListElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLUListElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLUListElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_compact(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_compact(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLUListElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLUListElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLUListElement *This);
      ULONG (WINAPI *Release)(IHTMLUListElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLUListElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLUListElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLUListElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLUListElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_compact)(IHTMLUListElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_compact)(IHTMLUListElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_type)(IHTMLUListElement *This,BSTR v);
      HRESULT (WINAPI *get_type)(IHTMLUListElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLUListElementVtbl;
  interface IHTMLUListElement {
    CONST_VTBL struct IHTMLUListElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLUListElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLUListElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLUListElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLUListElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLUListElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLUListElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLUListElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLUListElement_put_compact(This,v) (This)->lpVtbl->put_compact(This,v)
#define IHTMLUListElement_get_compact(This,p) (This)->lpVtbl->get_compact(This,p)
#define IHTMLUListElement_put_type(This,v) (This)->lpVtbl->put_type(This,v)
#define IHTMLUListElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLUListElement_put_compact_Proxy(IHTMLUListElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLUListElement_put_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUListElement_get_compact_Proxy(IHTMLUListElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLUListElement_get_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUListElement_put_type_Proxy(IHTMLUListElement *This,BSTR v);
  void __RPC_STUB IHTMLUListElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLUListElement_get_type_Proxy(IHTMLUListElement *This,BSTR *p);
  void __RPC_STUB IHTMLUListElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLUListElement_DISPINTERFACE_DEFINED__
#define __DispHTMLUListElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLUListElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLUListElement : public IDispatch {
  };
#else
  typedef struct DispHTMLUListElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLUListElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLUListElement *This);
      ULONG (WINAPI *Release)(DispHTMLUListElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLUListElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLUListElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLUListElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLUListElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLUListElementVtbl;
  interface DispHTMLUListElement {
    CONST_VTBL struct DispHTMLUListElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLUListElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLUListElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLUListElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLUListElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLUListElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLUListElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLUListElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLUListElement;
#ifdef __cplusplus
  class HTMLUListElement;
#endif

#ifndef __IHTMLOListElement_INTERFACE_DEFINED__
#define __IHTMLOListElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOListElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLOListElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_compact(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_compact(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_start(long v) = 0;
    virtual HRESULT WINAPI get_start(long *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLOListElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLOListElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLOListElement *This);
      ULONG (WINAPI *Release)(IHTMLOListElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLOListElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLOListElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLOListElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLOListElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_compact)(IHTMLOListElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_compact)(IHTMLOListElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_start)(IHTMLOListElement *This,long v);
      HRESULT (WINAPI *get_start)(IHTMLOListElement *This,long *p);
      HRESULT (WINAPI *put_type)(IHTMLOListElement *This,BSTR v);
      HRESULT (WINAPI *get_type)(IHTMLOListElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLOListElementVtbl;
  interface IHTMLOListElement {
    CONST_VTBL struct IHTMLOListElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLOListElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLOListElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLOListElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLOListElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLOListElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLOListElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLOListElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLOListElement_put_compact(This,v) (This)->lpVtbl->put_compact(This,v)
#define IHTMLOListElement_get_compact(This,p) (This)->lpVtbl->get_compact(This,p)
#define IHTMLOListElement_put_start(This,v) (This)->lpVtbl->put_start(This,v)
#define IHTMLOListElement_get_start(This,p) (This)->lpVtbl->get_start(This,p)
#define IHTMLOListElement_put_type(This,v) (This)->lpVtbl->put_type(This,v)
#define IHTMLOListElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLOListElement_put_compact_Proxy(IHTMLOListElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOListElement_put_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_get_compact_Proxy(IHTMLOListElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOListElement_get_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_put_start_Proxy(IHTMLOListElement *This,long v);
  void __RPC_STUB IHTMLOListElement_put_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_get_start_Proxy(IHTMLOListElement *This,long *p);
  void __RPC_STUB IHTMLOListElement_get_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_put_type_Proxy(IHTMLOListElement *This,BSTR v);
  void __RPC_STUB IHTMLOListElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOListElement_get_type_Proxy(IHTMLOListElement *This,BSTR *p);
  void __RPC_STUB IHTMLOListElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLOListElement_DISPINTERFACE_DEFINED__
#define __DispHTMLOListElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLOListElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLOListElement : public IDispatch {
  };
#else
  typedef struct DispHTMLOListElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLOListElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLOListElement *This);
      ULONG (WINAPI *Release)(DispHTMLOListElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLOListElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLOListElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLOListElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLOListElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLOListElementVtbl;
  interface DispHTMLOListElement {
    CONST_VTBL struct DispHTMLOListElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLOListElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLOListElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLOListElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLOListElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLOListElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLOListElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLOListElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLOListElement;
#ifdef __cplusplus
  class HTMLOListElement;
#endif

#ifndef __IHTMLLIElement_INTERFACE_DEFINED__
#define __IHTMLLIElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLIElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLLIElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(long v) = 0;
    virtual HRESULT WINAPI get_value(long *p) = 0;
  };
#else
  typedef struct IHTMLLIElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLLIElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLLIElement *This);
      ULONG (WINAPI *Release)(IHTMLLIElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLLIElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLLIElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLLIElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLLIElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_type)(IHTMLLIElement *This,BSTR v);
      HRESULT (WINAPI *get_type)(IHTMLLIElement *This,BSTR *p);
      HRESULT (WINAPI *put_value)(IHTMLLIElement *This,long v);
      HRESULT (WINAPI *get_value)(IHTMLLIElement *This,long *p);
    END_INTERFACE
  } IHTMLLIElementVtbl;
  interface IHTMLLIElement {
    CONST_VTBL struct IHTMLLIElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLLIElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLLIElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLLIElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLLIElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLLIElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLLIElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLLIElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLLIElement_put_type(This,v) (This)->lpVtbl->put_type(This,v)
#define IHTMLLIElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLLIElement_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLLIElement_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLLIElement_put_type_Proxy(IHTMLLIElement *This,BSTR v);
  void __RPC_STUB IHTMLLIElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLIElement_get_type_Proxy(IHTMLLIElement *This,BSTR *p);
  void __RPC_STUB IHTMLLIElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLIElement_put_value_Proxy(IHTMLLIElement *This,long v);
  void __RPC_STUB IHTMLLIElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLIElement_get_value_Proxy(IHTMLLIElement *This,long *p);
  void __RPC_STUB IHTMLLIElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLLIElement_DISPINTERFACE_DEFINED__
#define __DispHTMLLIElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLLIElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLLIElement : public IDispatch {
  };
#else
  typedef struct DispHTMLLIElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLLIElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLLIElement *This);
      ULONG (WINAPI *Release)(DispHTMLLIElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLLIElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLLIElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLLIElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLLIElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLLIElementVtbl;
  interface DispHTMLLIElement {
    CONST_VTBL struct DispHTMLLIElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLLIElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLLIElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLLIElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLLIElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLLIElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLLIElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLLIElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLLIElement;
#ifdef __cplusplus
  class HTMLLIElement;
#endif

#ifndef __IHTMLBlockElement_INTERFACE_DEFINED__
#define __IHTMLBlockElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBlockElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLBlockElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_clear(BSTR v) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLBlockElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLBlockElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLBlockElement *This);
      ULONG (WINAPI *Release)(IHTMLBlockElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLBlockElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLBlockElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLBlockElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLBlockElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_clear)(IHTMLBlockElement *This,BSTR v);
      HRESULT (WINAPI *get_clear)(IHTMLBlockElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLBlockElementVtbl;
  interface IHTMLBlockElement {
    CONST_VTBL struct IHTMLBlockElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLBlockElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLBlockElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLBlockElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLBlockElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLBlockElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLBlockElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLBlockElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLBlockElement_put_clear(This,v) (This)->lpVtbl->put_clear(This,v)
#define IHTMLBlockElement_get_clear(This,p) (This)->lpVtbl->get_clear(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLBlockElement_put_clear_Proxy(IHTMLBlockElement *This,BSTR v);
  void __RPC_STUB IHTMLBlockElement_put_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBlockElement_get_clear_Proxy(IHTMLBlockElement *This,BSTR *p);
  void __RPC_STUB IHTMLBlockElement_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLBlockElement2_INTERFACE_DEFINED__
#define __IHTMLBlockElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBlockElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLBlockElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_cite(BSTR v) = 0;
    virtual HRESULT WINAPI get_cite(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(BSTR v) = 0;
    virtual HRESULT WINAPI get_width(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLBlockElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLBlockElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLBlockElement2 *This);
      ULONG (WINAPI *Release)(IHTMLBlockElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLBlockElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLBlockElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLBlockElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLBlockElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_cite)(IHTMLBlockElement2 *This,BSTR v);
      HRESULT (WINAPI *get_cite)(IHTMLBlockElement2 *This,BSTR *p);
      HRESULT (WINAPI *put_width)(IHTMLBlockElement2 *This,BSTR v);
      HRESULT (WINAPI *get_width)(IHTMLBlockElement2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLBlockElement2Vtbl;
  interface IHTMLBlockElement2 {
    CONST_VTBL struct IHTMLBlockElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLBlockElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLBlockElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLBlockElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLBlockElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLBlockElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLBlockElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLBlockElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLBlockElement2_put_cite(This,v) (This)->lpVtbl->put_cite(This,v)
#define IHTMLBlockElement2_get_cite(This,p) (This)->lpVtbl->get_cite(This,p)
#define IHTMLBlockElement2_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLBlockElement2_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLBlockElement2_put_cite_Proxy(IHTMLBlockElement2 *This,BSTR v);
  void __RPC_STUB IHTMLBlockElement2_put_cite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBlockElement2_get_cite_Proxy(IHTMLBlockElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLBlockElement2_get_cite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBlockElement2_put_width_Proxy(IHTMLBlockElement2 *This,BSTR v);
  void __RPC_STUB IHTMLBlockElement2_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBlockElement2_get_width_Proxy(IHTMLBlockElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLBlockElement2_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBlockElement_DISPINTERFACE_DEFINED__
#define __DispHTMLBlockElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBlockElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLBlockElement : public IDispatch {
  };
#else
  typedef struct DispHTMLBlockElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLBlockElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLBlockElement *This);
      ULONG (WINAPI *Release)(DispHTMLBlockElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLBlockElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLBlockElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLBlockElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLBlockElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLBlockElementVtbl;
  interface DispHTMLBlockElement {
    CONST_VTBL struct DispHTMLBlockElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLBlockElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLBlockElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLBlockElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLBlockElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLBlockElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLBlockElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLBlockElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLBlockElement;
#ifdef __cplusplus
  class HTMLBlockElement;
#endif

#ifndef __IHTMLDivElement_INTERFACE_DEFINED__
#define __IHTMLDivElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDivElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDivElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
  };
#else
  typedef struct IHTMLDivElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDivElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDivElement *This);
      ULONG (WINAPI *Release)(IHTMLDivElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDivElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDivElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDivElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDivElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_align)(IHTMLDivElement *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLDivElement *This,BSTR *p);
      HRESULT (WINAPI *put_noWrap)(IHTMLDivElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_noWrap)(IHTMLDivElement *This,VARIANT_BOOL *p);
    END_INTERFACE
  } IHTMLDivElementVtbl;
  interface IHTMLDivElement {
    CONST_VTBL struct IHTMLDivElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDivElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDivElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDivElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDivElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDivElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDivElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDivElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDivElement_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLDivElement_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#define IHTMLDivElement_put_noWrap(This,v) (This)->lpVtbl->put_noWrap(This,v)
#define IHTMLDivElement_get_noWrap(This,p) (This)->lpVtbl->get_noWrap(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLDivElement_put_align_Proxy(IHTMLDivElement *This,BSTR v);
  void __RPC_STUB IHTMLDivElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDivElement_get_align_Proxy(IHTMLDivElement *This,BSTR *p);
  void __RPC_STUB IHTMLDivElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDivElement_put_noWrap_Proxy(IHTMLDivElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDivElement_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDivElement_get_noWrap_Proxy(IHTMLDivElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDivElement_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDivElement_DISPINTERFACE_DEFINED__
#define __DispHTMLDivElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDivElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLDivElement : public IDispatch {
  };
#else
  typedef struct DispHTMLDivElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLDivElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLDivElement *This);
      ULONG (WINAPI *Release)(DispHTMLDivElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLDivElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLDivElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLDivElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLDivElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLDivElementVtbl;
  interface DispHTMLDivElement {
    CONST_VTBL struct DispHTMLDivElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLDivElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLDivElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLDivElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLDivElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLDivElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLDivElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLDivElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLDivElement;
#ifdef __cplusplus
  class HTMLDivElement;
#endif

#ifndef __IHTMLDDElement_INTERFACE_DEFINED__
#define __IHTMLDDElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDDElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDDElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
  };
#else
  typedef struct IHTMLDDElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDDElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDDElement *This);
      ULONG (WINAPI *Release)(IHTMLDDElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDDElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDDElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDDElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDDElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_noWrap)(IHTMLDDElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_noWrap)(IHTMLDDElement *This,VARIANT_BOOL *p);
    END_INTERFACE
  } IHTMLDDElementVtbl;
  interface IHTMLDDElement {
    CONST_VTBL struct IHTMLDDElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDDElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDDElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDDElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDDElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDDElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDDElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDDElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDDElement_put_noWrap(This,v) (This)->lpVtbl->put_noWrap(This,v)
#define IHTMLDDElement_get_noWrap(This,p) (This)->lpVtbl->get_noWrap(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLDDElement_put_noWrap_Proxy(IHTMLDDElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDDElement_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDDElement_get_noWrap_Proxy(IHTMLDDElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDDElement_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDDElement_DISPINTERFACE_DEFINED__
#define __DispHTMLDDElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDDElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLDDElement : public IDispatch {
  };
#else
  typedef struct DispHTMLDDElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLDDElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLDDElement *This);
      ULONG (WINAPI *Release)(DispHTMLDDElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLDDElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLDDElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLDDElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLDDElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLDDElementVtbl;
  interface DispHTMLDDElement {
    CONST_VTBL struct DispHTMLDDElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLDDElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLDDElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLDDElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLDDElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLDDElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLDDElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLDDElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLDDElement;
#ifdef __cplusplus
  class HTMLDDElement;
#endif

#ifndef __IHTMLDTElement_INTERFACE_DEFINED__
#define __IHTMLDTElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDTElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDTElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
  };
#else
  typedef struct IHTMLDTElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDTElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDTElement *This);
      ULONG (WINAPI *Release)(IHTMLDTElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDTElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDTElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDTElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDTElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_noWrap)(IHTMLDTElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_noWrap)(IHTMLDTElement *This,VARIANT_BOOL *p);
    END_INTERFACE
  } IHTMLDTElementVtbl;
  interface IHTMLDTElement {
    CONST_VTBL struct IHTMLDTElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDTElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDTElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDTElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDTElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDTElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDTElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDTElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDTElement_put_noWrap(This,v) (This)->lpVtbl->put_noWrap(This,v)
#define IHTMLDTElement_get_noWrap(This,p) (This)->lpVtbl->get_noWrap(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLDTElement_put_noWrap_Proxy(IHTMLDTElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDTElement_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDTElement_get_noWrap_Proxy(IHTMLDTElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDTElement_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDTElement_DISPINTERFACE_DEFINED__
#define __DispHTMLDTElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDTElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLDTElement : public IDispatch {
  };
#else
  typedef struct DispHTMLDTElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLDTElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLDTElement *This);
      ULONG (WINAPI *Release)(DispHTMLDTElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLDTElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLDTElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLDTElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLDTElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLDTElementVtbl;
  interface DispHTMLDTElement {
    CONST_VTBL struct DispHTMLDTElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLDTElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLDTElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLDTElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLDTElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLDTElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLDTElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLDTElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLDTElement;
#ifdef __cplusplus
  class HTMLDTElement;
#endif

#ifndef __IHTMLBRElement_INTERFACE_DEFINED__
#define __IHTMLBRElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBRElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLBRElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_clear(BSTR v) = 0;
    virtual HRESULT WINAPI get_clear(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLBRElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLBRElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLBRElement *This);
      ULONG (WINAPI *Release)(IHTMLBRElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLBRElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLBRElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLBRElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLBRElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_clear)(IHTMLBRElement *This,BSTR v);
      HRESULT (WINAPI *get_clear)(IHTMLBRElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLBRElementVtbl;
  interface IHTMLBRElement {
    CONST_VTBL struct IHTMLBRElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLBRElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLBRElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLBRElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLBRElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLBRElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLBRElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLBRElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLBRElement_put_clear(This,v) (This)->lpVtbl->put_clear(This,v)
#define IHTMLBRElement_get_clear(This,p) (This)->lpVtbl->get_clear(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLBRElement_put_clear_Proxy(IHTMLBRElement *This,BSTR v);
  void __RPC_STUB IHTMLBRElement_put_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBRElement_get_clear_Proxy(IHTMLBRElement *This,BSTR *p);
  void __RPC_STUB IHTMLBRElement_get_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBRElement_DISPINTERFACE_DEFINED__
#define __DispHTMLBRElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBRElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLBRElement : public IDispatch {
  };
#else
  typedef struct DispHTMLBRElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLBRElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLBRElement *This);
      ULONG (WINAPI *Release)(DispHTMLBRElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLBRElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLBRElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLBRElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLBRElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLBRElementVtbl;
  interface DispHTMLBRElement {
    CONST_VTBL struct DispHTMLBRElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLBRElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLBRElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLBRElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLBRElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLBRElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLBRElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLBRElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLBRElement;
#ifdef __cplusplus
  class HTMLBRElement;
#endif

#ifndef __IHTMLDListElement_INTERFACE_DEFINED__
#define __IHTMLDListElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDListElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDListElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_compact(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_compact(VARIANT_BOOL *p) = 0;
  };
#else
  typedef struct IHTMLDListElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDListElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDListElement *This);
      ULONG (WINAPI *Release)(IHTMLDListElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDListElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDListElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDListElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDListElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_compact)(IHTMLDListElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_compact)(IHTMLDListElement *This,VARIANT_BOOL *p);
    END_INTERFACE
  } IHTMLDListElementVtbl;
  interface IHTMLDListElement {
    CONST_VTBL struct IHTMLDListElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDListElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDListElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDListElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDListElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDListElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDListElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDListElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDListElement_put_compact(This,v) (This)->lpVtbl->put_compact(This,v)
#define IHTMLDListElement_get_compact(This,p) (This)->lpVtbl->get_compact(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLDListElement_put_compact_Proxy(IHTMLDListElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDListElement_put_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDListElement_get_compact_Proxy(IHTMLDListElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDListElement_get_compact_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDListElement_DISPINTERFACE_DEFINED__
#define __DispHTMLDListElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDListElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLDListElement : public IDispatch {
  };
#else
  typedef struct DispHTMLDListElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLDListElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLDListElement *This);
      ULONG (WINAPI *Release)(DispHTMLDListElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLDListElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLDListElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLDListElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLDListElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLDListElementVtbl;
  interface DispHTMLDListElement {
    CONST_VTBL struct DispHTMLDListElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLDListElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLDListElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLDListElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLDListElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLDListElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLDListElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLDListElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLDListElement;
#ifdef __cplusplus
  class HTMLDListElement;
#endif

#ifndef __IHTMLHRElement_INTERFACE_DEFINED__
#define __IHTMLHRElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLHRElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLHRElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_noShade(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noShade(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_size(VARIANT v) = 0;
    virtual HRESULT WINAPI get_size(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLHRElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLHRElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLHRElement *This);
      ULONG (WINAPI *Release)(IHTMLHRElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLHRElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLHRElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLHRElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLHRElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_align)(IHTMLHRElement *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLHRElement *This,BSTR *p);
      HRESULT (WINAPI *put_color)(IHTMLHRElement *This,VARIANT v);
      HRESULT (WINAPI *get_color)(IHTMLHRElement *This,VARIANT *p);
      HRESULT (WINAPI *put_noShade)(IHTMLHRElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_noShade)(IHTMLHRElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_width)(IHTMLHRElement *This,VARIANT v);
      HRESULT (WINAPI *get_width)(IHTMLHRElement *This,VARIANT *p);
      HRESULT (WINAPI *put_size)(IHTMLHRElement *This,VARIANT v);
      HRESULT (WINAPI *get_size)(IHTMLHRElement *This,VARIANT *p);
    END_INTERFACE
  } IHTMLHRElementVtbl;
  interface IHTMLHRElement {
    CONST_VTBL struct IHTMLHRElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLHRElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLHRElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLHRElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLHRElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLHRElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLHRElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLHRElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLHRElement_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLHRElement_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#define IHTMLHRElement_put_color(This,v) (This)->lpVtbl->put_color(This,v)
#define IHTMLHRElement_get_color(This,p) (This)->lpVtbl->get_color(This,p)
#define IHTMLHRElement_put_noShade(This,v) (This)->lpVtbl->put_noShade(This,v)
#define IHTMLHRElement_get_noShade(This,p) (This)->lpVtbl->get_noShade(This,p)
#define IHTMLHRElement_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLHRElement_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLHRElement_put_size(This,v) (This)->lpVtbl->put_size(This,v)
#define IHTMLHRElement_get_size(This,p) (This)->lpVtbl->get_size(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLHRElement_put_align_Proxy(IHTMLHRElement *This,BSTR v);
  void __RPC_STUB IHTMLHRElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_align_Proxy(IHTMLHRElement *This,BSTR *p);
  void __RPC_STUB IHTMLHRElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_put_color_Proxy(IHTMLHRElement *This,VARIANT v);
  void __RPC_STUB IHTMLHRElement_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_color_Proxy(IHTMLHRElement *This,VARIANT *p);
  void __RPC_STUB IHTMLHRElement_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_put_noShade_Proxy(IHTMLHRElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLHRElement_put_noShade_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_noShade_Proxy(IHTMLHRElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLHRElement_get_noShade_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_put_width_Proxy(IHTMLHRElement *This,VARIANT v);
  void __RPC_STUB IHTMLHRElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_width_Proxy(IHTMLHRElement *This,VARIANT *p);
  void __RPC_STUB IHTMLHRElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_put_size_Proxy(IHTMLHRElement *This,VARIANT v);
  void __RPC_STUB IHTMLHRElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHRElement_get_size_Proxy(IHTMLHRElement *This,VARIANT *p);
  void __RPC_STUB IHTMLHRElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLHRElement_DISPINTERFACE_DEFINED__
#define __DispHTMLHRElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLHRElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLHRElement : public IDispatch {
  };
#else
  typedef struct DispHTMLHRElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLHRElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLHRElement *This);
      ULONG (WINAPI *Release)(DispHTMLHRElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLHRElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLHRElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLHRElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLHRElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLHRElementVtbl;
  interface DispHTMLHRElement {
    CONST_VTBL struct DispHTMLHRElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLHRElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLHRElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLHRElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLHRElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLHRElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLHRElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLHRElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLHRElement;
#ifdef __cplusplus
  class HTMLHRElement;
#endif

#ifndef __IHTMLParaElement_INTERFACE_DEFINED__
#define __IHTMLParaElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLParaElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLParaElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLParaElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLParaElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLParaElement *This);
      ULONG (WINAPI *Release)(IHTMLParaElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLParaElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLParaElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLParaElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLParaElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_align)(IHTMLParaElement *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLParaElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLParaElementVtbl;
  interface IHTMLParaElement {
    CONST_VTBL struct IHTMLParaElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLParaElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLParaElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLParaElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLParaElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLParaElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLParaElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLParaElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLParaElement_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLParaElement_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLParaElement_put_align_Proxy(IHTMLParaElement *This,BSTR v);
  void __RPC_STUB IHTMLParaElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParaElement_get_align_Proxy(IHTMLParaElement *This,BSTR *p);
  void __RPC_STUB IHTMLParaElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLParaElement_DISPINTERFACE_DEFINED__
#define __DispHTMLParaElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLParaElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLParaElement : public IDispatch {
  };
#else
  typedef struct DispHTMLParaElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLParaElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLParaElement *This);
      ULONG (WINAPI *Release)(DispHTMLParaElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLParaElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLParaElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLParaElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLParaElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLParaElementVtbl;
  interface DispHTMLParaElement {
    CONST_VTBL struct DispHTMLParaElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLParaElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLParaElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLParaElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLParaElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLParaElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLParaElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLParaElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLParaElement;
#ifdef __cplusplus
  class HTMLParaElement;
#endif

#ifndef __IHTMLElementCollection2_INTERFACE_DEFINED__
#define __IHTMLElementCollection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementCollection2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLElementCollection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI urns(VARIANT urn,IDispatch **pdisp) = 0;
  };
#else
  typedef struct IHTMLElementCollection2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLElementCollection2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLElementCollection2 *This);
      ULONG (WINAPI *Release)(IHTMLElementCollection2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLElementCollection2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLElementCollection2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLElementCollection2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLElementCollection2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *urns)(IHTMLElementCollection2 *This,VARIANT urn,IDispatch **pdisp);
    END_INTERFACE
  } IHTMLElementCollection2Vtbl;
  interface IHTMLElementCollection2 {
    CONST_VTBL struct IHTMLElementCollection2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLElementCollection2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLElementCollection2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLElementCollection2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLElementCollection2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLElementCollection2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLElementCollection2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLElementCollection2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLElementCollection2_urns(This,urn,pdisp) (This)->lpVtbl->urns(This,urn,pdisp)
#endif
#endif
  HRESULT WINAPI IHTMLElementCollection2_urns_Proxy(IHTMLElementCollection2 *This,VARIANT urn,IDispatch **pdisp);
  void __RPC_STUB IHTMLElementCollection2_urns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLElementCollection3_INTERFACE_DEFINED__
#define __IHTMLElementCollection3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLElementCollection3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLElementCollection3 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedItem(BSTR name,IDispatch **pdisp) = 0;
  };
#else
  typedef struct IHTMLElementCollection3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLElementCollection3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLElementCollection3 *This);
      ULONG (WINAPI *Release)(IHTMLElementCollection3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLElementCollection3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLElementCollection3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLElementCollection3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLElementCollection3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *namedItem)(IHTMLElementCollection3 *This,BSTR name,IDispatch **pdisp);
    END_INTERFACE
  } IHTMLElementCollection3Vtbl;
  interface IHTMLElementCollection3 {
    CONST_VTBL struct IHTMLElementCollection3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLElementCollection3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLElementCollection3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLElementCollection3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLElementCollection3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLElementCollection3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLElementCollection3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLElementCollection3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLElementCollection3_namedItem(This,name,pdisp) (This)->lpVtbl->namedItem(This,name,pdisp)
#endif
#endif
  HRESULT WINAPI IHTMLElementCollection3_namedItem_Proxy(IHTMLElementCollection3 *This,BSTR name,IDispatch **pdisp);
  void __RPC_STUB IHTMLElementCollection3_namedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLElementCollection_DISPINTERFACE_DEFINED__
#define __DispHTMLElementCollection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLElementCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLElementCollection : public IDispatch {
  };
#else
  typedef struct DispHTMLElementCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLElementCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLElementCollection *This);
      ULONG (WINAPI *Release)(DispHTMLElementCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLElementCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLElementCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLElementCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLElementCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLElementCollectionVtbl;
  interface DispHTMLElementCollection {
    CONST_VTBL struct DispHTMLElementCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLElementCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLElementCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLElementCollection_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLElementCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLElementCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLElementCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLElementCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLElementCollection;
#ifdef __cplusplus
  class HTMLElementCollection;
#endif

#ifndef __IHTMLHeaderElement_INTERFACE_DEFINED__
#define __IHTMLHeaderElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLHeaderElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLHeaderElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLHeaderElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLHeaderElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLHeaderElement *This);
      ULONG (WINAPI *Release)(IHTMLHeaderElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLHeaderElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLHeaderElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLHeaderElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLHeaderElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_align)(IHTMLHeaderElement *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLHeaderElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLHeaderElementVtbl;
  interface IHTMLHeaderElement {
    CONST_VTBL struct IHTMLHeaderElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLHeaderElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLHeaderElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLHeaderElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLHeaderElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLHeaderElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLHeaderElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLHeaderElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLHeaderElement_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLHeaderElement_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLHeaderElement_put_align_Proxy(IHTMLHeaderElement *This,BSTR v);
  void __RPC_STUB IHTMLHeaderElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHeaderElement_get_align_Proxy(IHTMLHeaderElement *This,BSTR *p);
  void __RPC_STUB IHTMLHeaderElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLHeaderElement_DISPINTERFACE_DEFINED__
#define __DispHTMLHeaderElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLHeaderElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLHeaderElement : public IDispatch {
  };
#else
  typedef struct DispHTMLHeaderElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLHeaderElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLHeaderElement *This);
      ULONG (WINAPI *Release)(DispHTMLHeaderElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLHeaderElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLHeaderElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLHeaderElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLHeaderElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLHeaderElementVtbl;
  interface DispHTMLHeaderElement {
    CONST_VTBL struct DispHTMLHeaderElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLHeaderElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLHeaderElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLHeaderElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLHeaderElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLHeaderElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLHeaderElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLHeaderElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLHeaderElement;
#ifdef __cplusplus
  class HTMLHeaderElement;
#endif

#ifndef __HTMLSelectElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLSelectElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLSelectElementEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLSelectElementEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLSelectElementEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLSelectElementEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLSelectElementEvents2 *This);
      ULONG (WINAPI *Release)(HTMLSelectElementEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLSelectElementEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLSelectElementEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLSelectElementEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLSelectElementEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLSelectElementEvents2Vtbl;
  interface HTMLSelectElementEvents2 {
    CONST_VTBL struct HTMLSelectElementEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLSelectElementEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLSelectElementEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLSelectElementEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLSelectElementEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLSelectElementEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLSelectElementEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLSelectElementEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLSelectElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLSelectElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLSelectElementEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLSelectElementEvents : public IDispatch {
  };
#else
  typedef struct HTMLSelectElementEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLSelectElementEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLSelectElementEvents *This);
      ULONG (WINAPI *Release)(HTMLSelectElementEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLSelectElementEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLSelectElementEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLSelectElementEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLSelectElementEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLSelectElementEventsVtbl;
  interface HTMLSelectElementEvents {
    CONST_VTBL struct HTMLSelectElementEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLSelectElementEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLSelectElementEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLSelectElementEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLSelectElementEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLSelectElementEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLSelectElementEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLSelectElementEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLSelectElement_INTERFACE_DEFINED__
#define __IHTMLSelectElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLSelectElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
    virtual HRESULT WINAPI put_multiple(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_multiple(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI get_options(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_selectedIndex(long v) = 0;
    virtual HRESULT WINAPI get_selectedIndex(long *p) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI add(IHTMLElement *element,VARIANT before) = 0;
    virtual HRESULT WINAPI remove(long index = -1) = 0;
    virtual HRESULT WINAPI put_length(long v) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT name,VARIANT index,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI tags(VARIANT tagName,IDispatch **pdisp) = 0;
  };
#else
  typedef struct IHTMLSelectElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLSelectElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLSelectElement *This);
      ULONG (WINAPI *Release)(IHTMLSelectElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLSelectElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLSelectElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLSelectElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLSelectElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_size)(IHTMLSelectElement *This,long v);
      HRESULT (WINAPI *get_size)(IHTMLSelectElement *This,long *p);
      HRESULT (WINAPI *put_multiple)(IHTMLSelectElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_multiple)(IHTMLSelectElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_name)(IHTMLSelectElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLSelectElement *This,BSTR *p);
      HRESULT (WINAPI *get_options)(IHTMLSelectElement *This,IDispatch **p);
      HRESULT (WINAPI *put_onchange)(IHTMLSelectElement *This,VARIANT v);
      HRESULT (WINAPI *get_onchange)(IHTMLSelectElement *This,VARIANT *p);
      HRESULT (WINAPI *put_selectedIndex)(IHTMLSelectElement *This,long v);
      HRESULT (WINAPI *get_selectedIndex)(IHTMLSelectElement *This,long *p);
      HRESULT (WINAPI *get_type)(IHTMLSelectElement *This,BSTR *p);
      HRESULT (WINAPI *put_value)(IHTMLSelectElement *This,BSTR v);
      HRESULT (WINAPI *get_value)(IHTMLSelectElement *This,BSTR *p);
      HRESULT (WINAPI *put_disabled)(IHTMLSelectElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLSelectElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_form)(IHTMLSelectElement *This,IHTMLFormElement **p);
      HRESULT (WINAPI *add)(IHTMLSelectElement *This,IHTMLElement *element,VARIANT before);
      HRESULT (WINAPI *remove)(IHTMLSelectElement *This,long index);
      HRESULT (WINAPI *put_length)(IHTMLSelectElement *This,long v);
      HRESULT (WINAPI *get_length)(IHTMLSelectElement *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLSelectElement *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLSelectElement *This,VARIANT name,VARIANT index,IDispatch **pdisp);
      HRESULT (WINAPI *tags)(IHTMLSelectElement *This,VARIANT tagName,IDispatch **pdisp);
    END_INTERFACE
  } IHTMLSelectElementVtbl;
  interface IHTMLSelectElement {
    CONST_VTBL struct IHTMLSelectElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLSelectElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLSelectElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLSelectElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLSelectElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLSelectElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLSelectElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLSelectElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLSelectElement_put_size(This,v) (This)->lpVtbl->put_size(This,v)
#define IHTMLSelectElement_get_size(This,p) (This)->lpVtbl->get_size(This,p)
#define IHTMLSelectElement_put_multiple(This,v) (This)->lpVtbl->put_multiple(This,v)
#define IHTMLSelectElement_get_multiple(This,p) (This)->lpVtbl->get_multiple(This,p)
#define IHTMLSelectElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLSelectElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLSelectElement_get_options(This,p) (This)->lpVtbl->get_options(This,p)
#define IHTMLSelectElement_put_onchange(This,v) (This)->lpVtbl->put_onchange(This,v)
#define IHTMLSelectElement_get_onchange(This,p) (This)->lpVtbl->get_onchange(This,p)
#define IHTMLSelectElement_put_selectedIndex(This,v) (This)->lpVtbl->put_selectedIndex(This,v)
#define IHTMLSelectElement_get_selectedIndex(This,p) (This)->lpVtbl->get_selectedIndex(This,p)
#define IHTMLSelectElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLSelectElement_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLSelectElement_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#define IHTMLSelectElement_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLSelectElement_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLSelectElement_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#define IHTMLSelectElement_add(This,element,before) (This)->lpVtbl->add(This,element,before)
#define IHTMLSelectElement_remove(This,index) (This)->lpVtbl->remove(This,index)
#define IHTMLSelectElement_put_length(This,v) (This)->lpVtbl->put_length(This,v)
#define IHTMLSelectElement_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLSelectElement_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLSelectElement_item(This,name,index,pdisp) (This)->lpVtbl->item(This,name,index,pdisp)
#define IHTMLSelectElement_tags(This,tagName,pdisp) (This)->lpVtbl->tags(This,tagName,pdisp)
#endif
#endif
  HRESULT WINAPI IHTMLSelectElement_put_size_Proxy(IHTMLSelectElement *This,long v);
  void __RPC_STUB IHTMLSelectElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_size_Proxy(IHTMLSelectElement *This,long *p);
  void __RPC_STUB IHTMLSelectElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_multiple_Proxy(IHTMLSelectElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLSelectElement_put_multiple_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_multiple_Proxy(IHTMLSelectElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLSelectElement_get_multiple_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_name_Proxy(IHTMLSelectElement *This,BSTR v);
  void __RPC_STUB IHTMLSelectElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_name_Proxy(IHTMLSelectElement *This,BSTR *p);
  void __RPC_STUB IHTMLSelectElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_options_Proxy(IHTMLSelectElement *This,IDispatch **p);
  void __RPC_STUB IHTMLSelectElement_get_options_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_onchange_Proxy(IHTMLSelectElement *This,VARIANT v);
  void __RPC_STUB IHTMLSelectElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_onchange_Proxy(IHTMLSelectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLSelectElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_selectedIndex_Proxy(IHTMLSelectElement *This,long v);
  void __RPC_STUB IHTMLSelectElement_put_selectedIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_selectedIndex_Proxy(IHTMLSelectElement *This,long *p);
  void __RPC_STUB IHTMLSelectElement_get_selectedIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_type_Proxy(IHTMLSelectElement *This,BSTR *p);
  void __RPC_STUB IHTMLSelectElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_value_Proxy(IHTMLSelectElement *This,BSTR v);
  void __RPC_STUB IHTMLSelectElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_value_Proxy(IHTMLSelectElement *This,BSTR *p);
  void __RPC_STUB IHTMLSelectElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_disabled_Proxy(IHTMLSelectElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLSelectElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_disabled_Proxy(IHTMLSelectElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLSelectElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_form_Proxy(IHTMLSelectElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLSelectElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_add_Proxy(IHTMLSelectElement *This,IHTMLElement *element,VARIANT before);
  void __RPC_STUB IHTMLSelectElement_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_remove_Proxy(IHTMLSelectElement *This,long index);
  void __RPC_STUB IHTMLSelectElement_remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_put_length_Proxy(IHTMLSelectElement *This,long v);
  void __RPC_STUB IHTMLSelectElement_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get_length_Proxy(IHTMLSelectElement *This,long *p);
  void __RPC_STUB IHTMLSelectElement_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_get__newEnum_Proxy(IHTMLSelectElement *This,IUnknown **p);
  void __RPC_STUB IHTMLSelectElement_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_item_Proxy(IHTMLSelectElement *This,VARIANT name,VARIANT index,IDispatch **pdisp);
  void __RPC_STUB IHTMLSelectElement_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectElement_tags_Proxy(IHTMLSelectElement *This,VARIANT tagName,IDispatch **pdisp);
  void __RPC_STUB IHTMLSelectElement_tags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSelectElement2_INTERFACE_DEFINED__
#define __IHTMLSelectElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLSelectElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI urns(VARIANT urn,IDispatch **pdisp) = 0;
  };
#else
  typedef struct IHTMLSelectElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLSelectElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLSelectElement2 *This);
      ULONG (WINAPI *Release)(IHTMLSelectElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLSelectElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLSelectElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLSelectElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLSelectElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *urns)(IHTMLSelectElement2 *This,VARIANT urn,IDispatch **pdisp);
    END_INTERFACE
  } IHTMLSelectElement2Vtbl;
  interface IHTMLSelectElement2 {
    CONST_VTBL struct IHTMLSelectElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLSelectElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLSelectElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLSelectElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLSelectElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLSelectElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLSelectElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLSelectElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLSelectElement2_urns(This,urn,pdisp) (This)->lpVtbl->urns(This,urn,pdisp)
#endif
#endif
  HRESULT WINAPI IHTMLSelectElement2_urns_Proxy(IHTMLSelectElement2 *This,VARIANT urn,IDispatch **pdisp);
  void __RPC_STUB IHTMLSelectElement2_urns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSelectElement4_INTERFACE_DEFINED__
#define __IHTMLSelectElement4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectElement4;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLSelectElement4 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedItem(BSTR name,IDispatch **pdisp) = 0;
  };
#else
  typedef struct IHTMLSelectElement4Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLSelectElement4 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLSelectElement4 *This);
      ULONG (WINAPI *Release)(IHTMLSelectElement4 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLSelectElement4 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLSelectElement4 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLSelectElement4 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLSelectElement4 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *namedItem)(IHTMLSelectElement4 *This,BSTR name,IDispatch **pdisp);
    END_INTERFACE
  } IHTMLSelectElement4Vtbl;
  interface IHTMLSelectElement4 {
    CONST_VTBL struct IHTMLSelectElement4Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLSelectElement4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLSelectElement4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLSelectElement4_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLSelectElement4_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLSelectElement4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLSelectElement4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLSelectElement4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLSelectElement4_namedItem(This,name,pdisp) (This)->lpVtbl->namedItem(This,name,pdisp)
#endif
#endif
  HRESULT WINAPI IHTMLSelectElement4_namedItem_Proxy(IHTMLSelectElement4 *This,BSTR name,IDispatch **pdisp);
  void __RPC_STUB IHTMLSelectElement4_namedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLSelectElement_DISPINTERFACE_DEFINED__
#define __DispHTMLSelectElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLSelectElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLSelectElement : public IDispatch {
  };
#else
  typedef struct DispHTMLSelectElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLSelectElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLSelectElement *This);
      ULONG (WINAPI *Release)(DispHTMLSelectElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLSelectElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLSelectElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLSelectElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLSelectElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLSelectElementVtbl;
  interface DispHTMLSelectElement {
    CONST_VTBL struct DispHTMLSelectElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLSelectElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLSelectElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLSelectElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLSelectElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLSelectElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLSelectElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLSelectElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLSelectElement;
#ifdef __cplusplus
  class HTMLSelectElement;
#endif

#ifndef __IHTMLSelectionObject_INTERFACE_DEFINED__
#define __IHTMLSelectionObject_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectionObject;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLSelectionObject : public IDispatch {
  public:
    virtual HRESULT WINAPI createRange(IDispatch **range) = 0;
    virtual HRESULT WINAPI empty(void) = 0;
    virtual HRESULT WINAPI clear(void) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLSelectionObjectVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLSelectionObject *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLSelectionObject *This);
      ULONG (WINAPI *Release)(IHTMLSelectionObject *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLSelectionObject *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLSelectionObject *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLSelectionObject *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLSelectionObject *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *createRange)(IHTMLSelectionObject *This,IDispatch **range);
      HRESULT (WINAPI *empty)(IHTMLSelectionObject *This);
      HRESULT (WINAPI *clear)(IHTMLSelectionObject *This);
      HRESULT (WINAPI *get_type)(IHTMLSelectionObject *This,BSTR *p);
    END_INTERFACE
  } IHTMLSelectionObjectVtbl;
  interface IHTMLSelectionObject {
    CONST_VTBL struct IHTMLSelectionObjectVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLSelectionObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLSelectionObject_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLSelectionObject_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLSelectionObject_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLSelectionObject_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLSelectionObject_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLSelectionObject_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLSelectionObject_createRange(This,range) (This)->lpVtbl->createRange(This,range)
#define IHTMLSelectionObject_empty(This) (This)->lpVtbl->empty(This)
#define IHTMLSelectionObject_clear(This) (This)->lpVtbl->clear(This)
#define IHTMLSelectionObject_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLSelectionObject_createRange_Proxy(IHTMLSelectionObject *This,IDispatch **range);
  void __RPC_STUB IHTMLSelectionObject_createRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectionObject_empty_Proxy(IHTMLSelectionObject *This);
  void __RPC_STUB IHTMLSelectionObject_empty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectionObject_clear_Proxy(IHTMLSelectionObject *This);
  void __RPC_STUB IHTMLSelectionObject_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectionObject_get_type_Proxy(IHTMLSelectionObject *This,BSTR *p);
  void __RPC_STUB IHTMLSelectionObject_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSelectionObject2_INTERFACE_DEFINED__
#define __IHTMLSelectionObject2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSelectionObject2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLSelectionObject2 : public IDispatch {
  public:
    virtual HRESULT WINAPI createRangeCollection(IDispatch **rangeCollection) = 0;
    virtual HRESULT WINAPI get_typeDetail(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLSelectionObject2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLSelectionObject2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLSelectionObject2 *This);
      ULONG (WINAPI *Release)(IHTMLSelectionObject2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLSelectionObject2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLSelectionObject2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLSelectionObject2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLSelectionObject2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *createRangeCollection)(IHTMLSelectionObject2 *This,IDispatch **rangeCollection);
      HRESULT (WINAPI *get_typeDetail)(IHTMLSelectionObject2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLSelectionObject2Vtbl;
  interface IHTMLSelectionObject2 {
    CONST_VTBL struct IHTMLSelectionObject2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLSelectionObject2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLSelectionObject2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLSelectionObject2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLSelectionObject2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLSelectionObject2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLSelectionObject2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLSelectionObject2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLSelectionObject2_createRangeCollection(This,rangeCollection) (This)->lpVtbl->createRangeCollection(This,rangeCollection)
#define IHTMLSelectionObject2_get_typeDetail(This,p) (This)->lpVtbl->get_typeDetail(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLSelectionObject2_createRangeCollection_Proxy(IHTMLSelectionObject2 *This,IDispatch **rangeCollection);
  void __RPC_STUB IHTMLSelectionObject2_createRangeCollection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSelectionObject2_get_typeDetail_Proxy(IHTMLSelectionObject2 *This,BSTR *p);
  void __RPC_STUB IHTMLSelectionObject2_get_typeDetail_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionElement_INTERFACE_DEFINED__
#define __IHTMLOptionElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLOptionElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_selected(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_selected(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_defaultSelected(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_defaultSelected(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_index(LONG v) = 0;
    virtual HRESULT WINAPI get_index(LONG *p) = 0;
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
#else
  typedef struct IHTMLOptionElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLOptionElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLOptionElement *This);
      ULONG (WINAPI *Release)(IHTMLOptionElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLOptionElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLOptionElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLOptionElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLOptionElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_selected)(IHTMLOptionElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_selected)(IHTMLOptionElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_value)(IHTMLOptionElement *This,BSTR v);
      HRESULT (WINAPI *get_value)(IHTMLOptionElement *This,BSTR *p);
      HRESULT (WINAPI *put_defaultSelected)(IHTMLOptionElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_defaultSelected)(IHTMLOptionElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_index)(IHTMLOptionElement *This,LONG v);
      HRESULT (WINAPI *get_index)(IHTMLOptionElement *This,LONG *p);
      HRESULT (WINAPI *put_text)(IHTMLOptionElement *This,BSTR v);
      HRESULT (WINAPI *get_text)(IHTMLOptionElement *This,BSTR *p);
      HRESULT (WINAPI *get_form)(IHTMLOptionElement *This,IHTMLFormElement **p);
    END_INTERFACE
  } IHTMLOptionElementVtbl;
  interface IHTMLOptionElement {
    CONST_VTBL struct IHTMLOptionElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLOptionElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLOptionElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLOptionElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLOptionElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLOptionElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLOptionElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLOptionElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLOptionElement_put_selected(This,v) (This)->lpVtbl->put_selected(This,v)
#define IHTMLOptionElement_get_selected(This,p) (This)->lpVtbl->get_selected(This,p)
#define IHTMLOptionElement_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLOptionElement_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#define IHTMLOptionElement_put_defaultSelected(This,v) (This)->lpVtbl->put_defaultSelected(This,v)
#define IHTMLOptionElement_get_defaultSelected(This,p) (This)->lpVtbl->get_defaultSelected(This,p)
#define IHTMLOptionElement_put_index(This,v) (This)->lpVtbl->put_index(This,v)
#define IHTMLOptionElement_get_index(This,p) (This)->lpVtbl->get_index(This,p)
#define IHTMLOptionElement_put_text(This,v) (This)->lpVtbl->put_text(This,v)
#define IHTMLOptionElement_get_text(This,p) (This)->lpVtbl->get_text(This,p)
#define IHTMLOptionElement_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLOptionElement_put_selected_Proxy(IHTMLOptionElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionElement_put_selected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_selected_Proxy(IHTMLOptionElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionElement_get_selected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_put_value_Proxy(IHTMLOptionElement *This,BSTR v);
  void __RPC_STUB IHTMLOptionElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_value_Proxy(IHTMLOptionElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_put_defaultSelected_Proxy(IHTMLOptionElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionElement_put_defaultSelected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_defaultSelected_Proxy(IHTMLOptionElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionElement_get_defaultSelected_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_put_index_Proxy(IHTMLOptionElement *This,LONG v);
  void __RPC_STUB IHTMLOptionElement_put_index_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_index_Proxy(IHTMLOptionElement *This,LONG *p);
  void __RPC_STUB IHTMLOptionElement_get_index_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_put_text_Proxy(IHTMLOptionElement *This,BSTR v);
  void __RPC_STUB IHTMLOptionElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_text_Proxy(IHTMLOptionElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement_get_form_Proxy(IHTMLOptionElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLOptionElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionElement3_INTERFACE_DEFINED__
#define __IHTMLOptionElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionElement3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLOptionElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_label(BSTR v) = 0;
    virtual HRESULT WINAPI get_label(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLOptionElement3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLOptionElement3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLOptionElement3 *This);
      ULONG (WINAPI *Release)(IHTMLOptionElement3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLOptionElement3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLOptionElement3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLOptionElement3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLOptionElement3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_label)(IHTMLOptionElement3 *This,BSTR v);
      HRESULT (WINAPI *get_label)(IHTMLOptionElement3 *This,BSTR *p);
    END_INTERFACE
  } IHTMLOptionElement3Vtbl;
  interface IHTMLOptionElement3 {
    CONST_VTBL struct IHTMLOptionElement3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLOptionElement3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLOptionElement3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLOptionElement3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLOptionElement3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLOptionElement3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLOptionElement3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLOptionElement3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLOptionElement3_put_label(This,v) (This)->lpVtbl->put_label(This,v)
#define IHTMLOptionElement3_get_label(This,p) (This)->lpVtbl->get_label(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLOptionElement3_put_label_Proxy(IHTMLOptionElement3 *This,BSTR v);
  void __RPC_STUB IHTMLOptionElement3_put_label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionElement3_get_label_Proxy(IHTMLOptionElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLOptionElement3_get_label_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionElementFactory_INTERFACE_DEFINED__
#define __IHTMLOptionElementFactory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionElementFactory;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLOptionElementFactory : public IDispatch {
  public:
    virtual HRESULT WINAPI create(VARIANT text,VARIANT value,VARIANT defaultselected,VARIANT selected,IHTMLOptionElement **__MIDL_0012) = 0;
  };
#else
  typedef struct IHTMLOptionElementFactoryVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLOptionElementFactory *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLOptionElementFactory *This);
      ULONG (WINAPI *Release)(IHTMLOptionElementFactory *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLOptionElementFactory *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLOptionElementFactory *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLOptionElementFactory *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLOptionElementFactory *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *create)(IHTMLOptionElementFactory *This,VARIANT text,VARIANT value,VARIANT defaultselected,VARIANT selected,IHTMLOptionElement **__MIDL_0012);
    END_INTERFACE
  } IHTMLOptionElementFactoryVtbl;
  interface IHTMLOptionElementFactory {
    CONST_VTBL struct IHTMLOptionElementFactoryVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLOptionElementFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLOptionElementFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLOptionElementFactory_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLOptionElementFactory_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLOptionElementFactory_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLOptionElementFactory_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLOptionElementFactory_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLOptionElementFactory_create(This,text,value,defaultselected,selected,__MIDL_0012) (This)->lpVtbl->create(This,text,value,defaultselected,selected,__MIDL_0012)
#endif
#endif
  HRESULT WINAPI IHTMLOptionElementFactory_create_Proxy(IHTMLOptionElementFactory *This,VARIANT text,VARIANT value,VARIANT defaultselected,VARIANT selected,IHTMLOptionElement **__MIDL_0012);
  void __RPC_STUB IHTMLOptionElementFactory_create_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLOptionElement_DISPINTERFACE_DEFINED__
#define __DispHTMLOptionElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLOptionElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLOptionElement : public IDispatch {
  };
#else
  typedef struct DispHTMLOptionElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLOptionElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLOptionElement *This);
      ULONG (WINAPI *Release)(DispHTMLOptionElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLOptionElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLOptionElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLOptionElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLOptionElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLOptionElementVtbl;
  interface DispHTMLOptionElement {
    CONST_VTBL struct DispHTMLOptionElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLOptionElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLOptionElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLOptionElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLOptionElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLOptionElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLOptionElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLOptionElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLOptionElement;
#ifdef __cplusplus
  class HTMLOptionElement;
#endif
  EXTERN_C const CLSID CLSID_HTMLOptionElementFactory;
#ifdef __cplusplus
  class HTMLOptionElementFactory;
#endif

#ifndef __HTMLButtonElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLButtonElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLButtonElementEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLButtonElementEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLButtonElementEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLButtonElementEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLButtonElementEvents2 *This);
      ULONG (WINAPI *Release)(HTMLButtonElementEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLButtonElementEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLButtonElementEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLButtonElementEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLButtonElementEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLButtonElementEvents2Vtbl;
  interface HTMLButtonElementEvents2 {
    CONST_VTBL struct HTMLButtonElementEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLButtonElementEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLButtonElementEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLButtonElementEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLButtonElementEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLButtonElementEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLButtonElementEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLButtonElementEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLButtonElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLButtonElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLButtonElementEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLButtonElementEvents : public IDispatch {
  };
#else
  typedef struct HTMLButtonElementEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLButtonElementEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLButtonElementEvents *This);
      ULONG (WINAPI *Release)(HTMLButtonElementEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLButtonElementEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLButtonElementEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLButtonElementEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLButtonElementEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLButtonElementEventsVtbl;
  interface HTMLButtonElementEvents {
    CONST_VTBL struct HTMLButtonElementEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLButtonElementEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLButtonElementEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLButtonElementEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLButtonElementEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLButtonElementEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLButtonElementEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLButtonElementEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLInputTextElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLInputTextElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputTextElementEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLInputTextElementEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLInputTextElementEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLInputTextElementEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLInputTextElementEvents2 *This);
      ULONG (WINAPI *Release)(HTMLInputTextElementEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLInputTextElementEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLInputTextElementEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLInputTextElementEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLInputTextElementEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLInputTextElementEvents2Vtbl;
  interface HTMLInputTextElementEvents2 {
    CONST_VTBL struct HTMLInputTextElementEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLInputTextElementEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLInputTextElementEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLInputTextElementEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLInputTextElementEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLInputTextElementEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLInputTextElementEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLInputTextElementEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLOptionButtonElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLOptionButtonElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLOptionButtonElementEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLOptionButtonElementEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLOptionButtonElementEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLOptionButtonElementEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLOptionButtonElementEvents2 *This);
      ULONG (WINAPI *Release)(HTMLOptionButtonElementEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLOptionButtonElementEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLOptionButtonElementEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLOptionButtonElementEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLOptionButtonElementEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLOptionButtonElementEvents2Vtbl;
  interface HTMLOptionButtonElementEvents2 {
    CONST_VTBL struct HTMLOptionButtonElementEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLOptionButtonElementEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLOptionButtonElementEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLOptionButtonElementEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLOptionButtonElementEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLOptionButtonElementEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLOptionButtonElementEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLOptionButtonElementEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLInputFileElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLInputFileElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputFileElementEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLInputFileElementEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLInputFileElementEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLInputFileElementEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLInputFileElementEvents2 *This);
      ULONG (WINAPI *Release)(HTMLInputFileElementEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLInputFileElementEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLInputFileElementEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLInputFileElementEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLInputFileElementEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLInputFileElementEvents2Vtbl;
  interface HTMLInputFileElementEvents2 {
    CONST_VTBL struct HTMLInputFileElementEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLInputFileElementEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLInputFileElementEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLInputFileElementEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLInputFileElementEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLInputFileElementEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLInputFileElementEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLInputFileElementEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLInputImageEvents2_DISPINTERFACE_DEFINED__
#define __HTMLInputImageEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputImageEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLInputImageEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLInputImageEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLInputImageEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLInputImageEvents2 *This);
      ULONG (WINAPI *Release)(HTMLInputImageEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLInputImageEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLInputImageEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLInputImageEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLInputImageEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLInputImageEvents2Vtbl;
  interface HTMLInputImageEvents2 {
    CONST_VTBL struct HTMLInputImageEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLInputImageEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLInputImageEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLInputImageEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLInputImageEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLInputImageEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLInputImageEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLInputImageEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLInputTextElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLInputTextElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputTextElementEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLInputTextElementEvents : public IDispatch {
  };
#else
  typedef struct HTMLInputTextElementEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLInputTextElementEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLInputTextElementEvents *This);
      ULONG (WINAPI *Release)(HTMLInputTextElementEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLInputTextElementEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLInputTextElementEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLInputTextElementEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLInputTextElementEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLInputTextElementEventsVtbl;
  interface HTMLInputTextElementEvents {
    CONST_VTBL struct HTMLInputTextElementEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLInputTextElementEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLInputTextElementEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLInputTextElementEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLInputTextElementEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLInputTextElementEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLInputTextElementEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLInputTextElementEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLOptionButtonElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLOptionButtonElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLOptionButtonElementEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLOptionButtonElementEvents : public IDispatch {
  };
#else
  typedef struct HTMLOptionButtonElementEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLOptionButtonElementEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLOptionButtonElementEvents *This);
      ULONG (WINAPI *Release)(HTMLOptionButtonElementEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLOptionButtonElementEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLOptionButtonElementEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLOptionButtonElementEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLOptionButtonElementEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLOptionButtonElementEventsVtbl;
  interface HTMLOptionButtonElementEvents {
    CONST_VTBL struct HTMLOptionButtonElementEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLOptionButtonElementEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLOptionButtonElementEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLOptionButtonElementEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLOptionButtonElementEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLOptionButtonElementEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLOptionButtonElementEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLOptionButtonElementEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLInputFileElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLInputFileElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputFileElementEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLInputFileElementEvents : public IDispatch {
  };
#else
  typedef struct HTMLInputFileElementEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLInputFileElementEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLInputFileElementEvents *This);
      ULONG (WINAPI *Release)(HTMLInputFileElementEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLInputFileElementEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLInputFileElementEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLInputFileElementEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLInputFileElementEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLInputFileElementEventsVtbl;
  interface HTMLInputFileElementEvents {
    CONST_VTBL struct HTMLInputFileElementEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLInputFileElementEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLInputFileElementEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLInputFileElementEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLInputFileElementEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLInputFileElementEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLInputFileElementEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLInputFileElementEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLInputImageEvents_DISPINTERFACE_DEFINED__
#define __HTMLInputImageEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLInputImageEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLInputImageEvents : public IDispatch {
  };
#else
  typedef struct HTMLInputImageEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLInputImageEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLInputImageEvents *This);
      ULONG (WINAPI *Release)(HTMLInputImageEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLInputImageEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLInputImageEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLInputImageEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLInputImageEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLInputImageEventsVtbl;
  interface HTMLInputImageEvents {
    CONST_VTBL struct HTMLInputImageEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLInputImageEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLInputImageEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLInputImageEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLInputImageEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLInputImageEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLInputImageEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLInputImageEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLInputElement_INTERFACE_DEFINED__
#define __IHTMLInputElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLInputElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
    virtual HRESULT WINAPI put_maxLength(long v) = 0;
    virtual HRESULT WINAPI get_maxLength(long *p) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_defaultValue(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultValue(BSTR *p) = 0;
    virtual HRESULT WINAPI put_readOnly(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
    virtual HRESULT WINAPI put_indeterminate(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_indeterminate(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_defaultChecked(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_defaultChecked(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_checked(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_checked(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lowsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_lowsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vrml(BSTR v) = 0;
    virtual HRESULT WINAPI get_vrml(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dynsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_dynsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI get_complete(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_loop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_loop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onabort(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onabort(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(long v) = 0;
    virtual HRESULT WINAPI get_width(long *p) = 0;
    virtual HRESULT WINAPI put_height(long v) = 0;
    virtual HRESULT WINAPI get_height(long *p) = 0;
    virtual HRESULT WINAPI put_start(BSTR v) = 0;
    virtual HRESULT WINAPI get_start(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLInputElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLInputElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLInputElement *This);
      ULONG (WINAPI *Release)(IHTMLInputElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLInputElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLInputElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLInputElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLInputElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_type)(IHTMLInputElement *This,BSTR v);
      HRESULT (WINAPI *get_type)(IHTMLInputElement *This,BSTR *p);
      HRESULT (WINAPI *put_value)(IHTMLInputElement *This,BSTR v);
      HRESULT (WINAPI *get_value)(IHTMLInputElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLInputElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLInputElement *This,BSTR *p);
      HRESULT (WINAPI *put_status)(IHTMLInputElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_status)(IHTMLInputElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_disabled)(IHTMLInputElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLInputElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_form)(IHTMLInputElement *This,IHTMLFormElement **p);
      HRESULT (WINAPI *put_size)(IHTMLInputElement *This,long v);
      HRESULT (WINAPI *get_size)(IHTMLInputElement *This,long *p);
      HRESULT (WINAPI *put_maxLength)(IHTMLInputElement *This,long v);
      HRESULT (WINAPI *get_maxLength)(IHTMLInputElement *This,long *p);
      HRESULT (WINAPI *select)(IHTMLInputElement *This);
      HRESULT (WINAPI *put_onchange)(IHTMLInputElement *This,VARIANT v);
      HRESULT (WINAPI *get_onchange)(IHTMLInputElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onselect)(IHTMLInputElement *This,VARIANT v);
      HRESULT (WINAPI *get_onselect)(IHTMLInputElement *This,VARIANT *p);
      HRESULT (WINAPI *put_defaultValue)(IHTMLInputElement *This,BSTR v);
      HRESULT (WINAPI *get_defaultValue)(IHTMLInputElement *This,BSTR *p);
      HRESULT (WINAPI *put_readOnly)(IHTMLInputElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_readOnly)(IHTMLInputElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *createTextRange)(IHTMLInputElement *This,IHTMLTxtRange **range);
      HRESULT (WINAPI *put_indeterminate)(IHTMLInputElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_indeterminate)(IHTMLInputElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_defaultChecked)(IHTMLInputElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_defaultChecked)(IHTMLInputElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_checked)(IHTMLInputElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_checked)(IHTMLInputElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_border)(IHTMLInputElement *This,VARIANT v);
      HRESULT (WINAPI *get_border)(IHTMLInputElement *This,VARIANT *p);
      HRESULT (WINAPI *put_vspace)(IHTMLInputElement *This,long v);
      HRESULT (WINAPI *get_vspace)(IHTMLInputElement *This,long *p);
      HRESULT (WINAPI *put_hspace)(IHTMLInputElement *This,long v);
      HRESULT (WINAPI *get_hspace)(IHTMLInputElement *This,long *p);
      HRESULT (WINAPI *put_alt)(IHTMLInputElement *This,BSTR v);
      HRESULT (WINAPI *get_alt)(IHTMLInputElement *This,BSTR *p);
      HRESULT (WINAPI *put_src)(IHTMLInputElement *This,BSTR v);
      HRESULT (WINAPI *get_src)(IHTMLInputElement *This,BSTR *p);
      HRESULT (WINAPI *put_lowsrc)(IHTMLInputElement *This,BSTR v);
      HRESULT (WINAPI *get_lowsrc)(IHTMLInputElement *This,BSTR *p);
      HRESULT (WINAPI *put_vrml)(IHTMLInputElement *This,BSTR v);
      HRESULT (WINAPI *get_vrml)(IHTMLInputElement *This,BSTR *p);
      HRESULT (WINAPI *put_dynsrc)(IHTMLInputElement *This,BSTR v);
      HRESULT (WINAPI *get_dynsrc)(IHTMLInputElement *This,BSTR *p);
      HRESULT (WINAPI *get_readyState)(IHTMLInputElement *This,BSTR *p);
      HRESULT (WINAPI *get_complete)(IHTMLInputElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_loop)(IHTMLInputElement *This,VARIANT v);
      HRESULT (WINAPI *get_loop)(IHTMLInputElement *This,VARIANT *p);
      HRESULT (WINAPI *put_align)(IHTMLInputElement *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLInputElement *This,BSTR *p);
      HRESULT (WINAPI *put_onload)(IHTMLInputElement *This,VARIANT v);
      HRESULT (WINAPI *get_onload)(IHTMLInputElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onerror)(IHTMLInputElement *This,VARIANT v);
      HRESULT (WINAPI *get_onerror)(IHTMLInputElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onabort)(IHTMLInputElement *This,VARIANT v);
      HRESULT (WINAPI *get_onabort)(IHTMLInputElement *This,VARIANT *p);
      HRESULT (WINAPI *put_width)(IHTMLInputElement *This,long v);
      HRESULT (WINAPI *get_width)(IHTMLInputElement *This,long *p);
      HRESULT (WINAPI *put_height)(IHTMLInputElement *This,long v);
      HRESULT (WINAPI *get_height)(IHTMLInputElement *This,long *p);
      HRESULT (WINAPI *put_start)(IHTMLInputElement *This,BSTR v);
      HRESULT (WINAPI *get_start)(IHTMLInputElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLInputElementVtbl;
  interface IHTMLInputElement {
    CONST_VTBL struct IHTMLInputElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLInputElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLInputElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLInputElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLInputElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLInputElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLInputElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLInputElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLInputElement_put_type(This,v) (This)->lpVtbl->put_type(This,v)
#define IHTMLInputElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLInputElement_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLInputElement_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#define IHTMLInputElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLInputElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLInputElement_put_status(This,v) (This)->lpVtbl->put_status(This,v)
#define IHTMLInputElement_get_status(This,p) (This)->lpVtbl->get_status(This,p)
#define IHTMLInputElement_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLInputElement_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLInputElement_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#define IHTMLInputElement_put_size(This,v) (This)->lpVtbl->put_size(This,v)
#define IHTMLInputElement_get_size(This,p) (This)->lpVtbl->get_size(This,p)
#define IHTMLInputElement_put_maxLength(This,v) (This)->lpVtbl->put_maxLength(This,v)
#define IHTMLInputElement_get_maxLength(This,p) (This)->lpVtbl->get_maxLength(This,p)
#define IHTMLInputElement_select(This) (This)->lpVtbl->select(This)
#define IHTMLInputElement_put_onchange(This,v) (This)->lpVtbl->put_onchange(This,v)
#define IHTMLInputElement_get_onchange(This,p) (This)->lpVtbl->get_onchange(This,p)
#define IHTMLInputElement_put_onselect(This,v) (This)->lpVtbl->put_onselect(This,v)
#define IHTMLInputElement_get_onselect(This,p) (This)->lpVtbl->get_onselect(This,p)
#define IHTMLInputElement_put_defaultValue(This,v) (This)->lpVtbl->put_defaultValue(This,v)
#define IHTMLInputElement_get_defaultValue(This,p) (This)->lpVtbl->get_defaultValue(This,p)
#define IHTMLInputElement_put_readOnly(This,v) (This)->lpVtbl->put_readOnly(This,v)
#define IHTMLInputElement_get_readOnly(This,p) (This)->lpVtbl->get_readOnly(This,p)
#define IHTMLInputElement_createTextRange(This,range) (This)->lpVtbl->createTextRange(This,range)
#define IHTMLInputElement_put_indeterminate(This,v) (This)->lpVtbl->put_indeterminate(This,v)
#define IHTMLInputElement_get_indeterminate(This,p) (This)->lpVtbl->get_indeterminate(This,p)
#define IHTMLInputElement_put_defaultChecked(This,v) (This)->lpVtbl->put_defaultChecked(This,v)
#define IHTMLInputElement_get_defaultChecked(This,p) (This)->lpVtbl->get_defaultChecked(This,p)
#define IHTMLInputElement_put_checked(This,v) (This)->lpVtbl->put_checked(This,v)
#define IHTMLInputElement_get_checked(This,p) (This)->lpVtbl->get_checked(This,p)
#define IHTMLInputElement_put_border(This,v) (This)->lpVtbl->put_border(This,v)
#define IHTMLInputElement_get_border(This,p) (This)->lpVtbl->get_border(This,p)
#define IHTMLInputElement_put_vspace(This,v) (This)->lpVtbl->put_vspace(This,v)
#define IHTMLInputElement_get_vspace(This,p) (This)->lpVtbl->get_vspace(This,p)
#define IHTMLInputElement_put_hspace(This,v) (This)->lpVtbl->put_hspace(This,v)
#define IHTMLInputElement_get_hspace(This,p) (This)->lpVtbl->get_hspace(This,p)
#define IHTMLInputElement_put_alt(This,v) (This)->lpVtbl->put_alt(This,v)
#define IHTMLInputElement_get_alt(This,p) (This)->lpVtbl->get_alt(This,p)
#define IHTMLInputElement_put_src(This,v) (This)->lpVtbl->put_src(This,v)
#define IHTMLInputElement_get_src(This,p) (This)->lpVtbl->get_src(This,p)
#define IHTMLInputElement_put_lowsrc(This,v) (This)->lpVtbl->put_lowsrc(This,v)
#define IHTMLInputElement_get_lowsrc(This,p) (This)->lpVtbl->get_lowsrc(This,p)
#define IHTMLInputElement_put_vrml(This,v) (This)->lpVtbl->put_vrml(This,v)
#define IHTMLInputElement_get_vrml(This,p) (This)->lpVtbl->get_vrml(This,p)
#define IHTMLInputElement_put_dynsrc(This,v) (This)->lpVtbl->put_dynsrc(This,v)
#define IHTMLInputElement_get_dynsrc(This,p) (This)->lpVtbl->get_dynsrc(This,p)
#define IHTMLInputElement_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IHTMLInputElement_get_complete(This,p) (This)->lpVtbl->get_complete(This,p)
#define IHTMLInputElement_put_loop(This,v) (This)->lpVtbl->put_loop(This,v)
#define IHTMLInputElement_get_loop(This,p) (This)->lpVtbl->get_loop(This,p)
#define IHTMLInputElement_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLInputElement_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#define IHTMLInputElement_put_onload(This,v) (This)->lpVtbl->put_onload(This,v)
#define IHTMLInputElement_get_onload(This,p) (This)->lpVtbl->get_onload(This,p)
#define IHTMLInputElement_put_onerror(This,v) (This)->lpVtbl->put_onerror(This,v)
#define IHTMLInputElement_get_onerror(This,p) (This)->lpVtbl->get_onerror(This,p)
#define IHTMLInputElement_put_onabort(This,v) (This)->lpVtbl->put_onabort(This,v)
#define IHTMLInputElement_get_onabort(This,p) (This)->lpVtbl->get_onabort(This,p)
#define IHTMLInputElement_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLInputElement_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLInputElement_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLInputElement_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLInputElement_put_start(This,v) (This)->lpVtbl->put_start(This,v)
#define IHTMLInputElement_get_start(This,p) (This)->lpVtbl->get_start(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLInputElement_put_type_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_type_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_value_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_value_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_name_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_name_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_status_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_status_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_disabled_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_disabled_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_form_Proxy(IHTMLInputElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_size_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_size_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_maxLength_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_maxLength_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_select_Proxy(IHTMLInputElement *This);
  void __RPC_STUB IHTMLInputElement_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onchange_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onchange_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onselect_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onselect_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_defaultValue_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_defaultValue_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_readOnly_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_readOnly_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_createTextRange_Proxy(IHTMLInputElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLInputElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_indeterminate_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_indeterminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_indeterminate_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_indeterminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_defaultChecked_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_defaultChecked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_defaultChecked_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_defaultChecked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_checked_Proxy(IHTMLInputElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputElement_put_checked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_checked_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_checked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_border_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_border_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_vspace_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_vspace_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_hspace_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_hspace_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_alt_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_alt_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_src_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_src_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_lowsrc_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_lowsrc_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_vrml_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_vrml_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_dynsrc_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_dynsrc_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_readyState_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_complete_Proxy(IHTMLInputElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputElement_get_complete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_loop_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_loop_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_align_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_align_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onload_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onload_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onerror_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onerror_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_onabort_Proxy(IHTMLInputElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputElement_put_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_onabort_Proxy(IHTMLInputElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputElement_get_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_width_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_width_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_height_Proxy(IHTMLInputElement *This,long v);
  void __RPC_STUB IHTMLInputElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_height_Proxy(IHTMLInputElement *This,long *p);
  void __RPC_STUB IHTMLInputElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_put_start_Proxy(IHTMLInputElement *This,BSTR v);
  void __RPC_STUB IHTMLInputElement_put_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement_get_start_Proxy(IHTMLInputElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement_get_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputElement2_INTERFACE_DEFINED__
#define __IHTMLInputElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLInputElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_accept(BSTR v) = 0;
    virtual HRESULT WINAPI get_accept(BSTR *p) = 0;
    virtual HRESULT WINAPI put_useMap(BSTR v) = 0;
    virtual HRESULT WINAPI get_useMap(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLInputElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLInputElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLInputElement2 *This);
      ULONG (WINAPI *Release)(IHTMLInputElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLInputElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLInputElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLInputElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLInputElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_accept)(IHTMLInputElement2 *This,BSTR v);
      HRESULT (WINAPI *get_accept)(IHTMLInputElement2 *This,BSTR *p);
      HRESULT (WINAPI *put_useMap)(IHTMLInputElement2 *This,BSTR v);
      HRESULT (WINAPI *get_useMap)(IHTMLInputElement2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLInputElement2Vtbl;
  interface IHTMLInputElement2 {
    CONST_VTBL struct IHTMLInputElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLInputElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLInputElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLInputElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLInputElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLInputElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLInputElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLInputElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLInputElement2_put_accept(This,v) (This)->lpVtbl->put_accept(This,v)
#define IHTMLInputElement2_get_accept(This,p) (This)->lpVtbl->get_accept(This,p)
#define IHTMLInputElement2_put_useMap(This,v) (This)->lpVtbl->put_useMap(This,v)
#define IHTMLInputElement2_get_useMap(This,p) (This)->lpVtbl->get_useMap(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLInputElement2_put_accept_Proxy(IHTMLInputElement2 *This,BSTR v);
  void __RPC_STUB IHTMLInputElement2_put_accept_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement2_get_accept_Proxy(IHTMLInputElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement2_get_accept_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement2_put_useMap_Proxy(IHTMLInputElement2 *This,BSTR v);
  void __RPC_STUB IHTMLInputElement2_put_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputElement2_get_useMap_Proxy(IHTMLInputElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLInputElement2_get_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputButtonElement_INTERFACE_DEFINED__
#define __IHTMLInputButtonElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputButtonElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLInputButtonElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
#else
  typedef struct IHTMLInputButtonElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLInputButtonElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLInputButtonElement *This);
      ULONG (WINAPI *Release)(IHTMLInputButtonElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLInputButtonElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLInputButtonElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLInputButtonElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLInputButtonElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_type)(IHTMLInputButtonElement *This,BSTR *p);
      HRESULT (WINAPI *put_value)(IHTMLInputButtonElement *This,BSTR v);
      HRESULT (WINAPI *get_value)(IHTMLInputButtonElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLInputButtonElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLInputButtonElement *This,BSTR *p);
      HRESULT (WINAPI *put_status)(IHTMLInputButtonElement *This,VARIANT v);
      HRESULT (WINAPI *get_status)(IHTMLInputButtonElement *This,VARIANT *p);
      HRESULT (WINAPI *put_disabled)(IHTMLInputButtonElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLInputButtonElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_form)(IHTMLInputButtonElement *This,IHTMLFormElement **p);
      HRESULT (WINAPI *createTextRange)(IHTMLInputButtonElement *This,IHTMLTxtRange **range);
    END_INTERFACE
  } IHTMLInputButtonElementVtbl;
  interface IHTMLInputButtonElement {
    CONST_VTBL struct IHTMLInputButtonElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLInputButtonElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLInputButtonElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLInputButtonElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLInputButtonElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLInputButtonElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLInputButtonElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLInputButtonElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLInputButtonElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLInputButtonElement_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLInputButtonElement_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#define IHTMLInputButtonElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLInputButtonElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLInputButtonElement_put_status(This,v) (This)->lpVtbl->put_status(This,v)
#define IHTMLInputButtonElement_get_status(This,p) (This)->lpVtbl->get_status(This,p)
#define IHTMLInputButtonElement_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLInputButtonElement_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLInputButtonElement_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#define IHTMLInputButtonElement_createTextRange(This,range) (This)->lpVtbl->createTextRange(This,range)
#endif
#endif
  HRESULT WINAPI IHTMLInputButtonElement_get_type_Proxy(IHTMLInputButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputButtonElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_put_value_Proxy(IHTMLInputButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLInputButtonElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_value_Proxy(IHTMLInputButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputButtonElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_put_name_Proxy(IHTMLInputButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLInputButtonElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_name_Proxy(IHTMLInputButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputButtonElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_put_status_Proxy(IHTMLInputButtonElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputButtonElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_status_Proxy(IHTMLInputButtonElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputButtonElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_put_disabled_Proxy(IHTMLInputButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputButtonElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_disabled_Proxy(IHTMLInputButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputButtonElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_get_form_Proxy(IHTMLInputButtonElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputButtonElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputButtonElement_createTextRange_Proxy(IHTMLInputButtonElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLInputButtonElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputHiddenElement_INTERFACE_DEFINED__
#define __IHTMLInputHiddenElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputHiddenElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLInputHiddenElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
#else
  typedef struct IHTMLInputHiddenElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLInputHiddenElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLInputHiddenElement *This);
      ULONG (WINAPI *Release)(IHTMLInputHiddenElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLInputHiddenElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLInputHiddenElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLInputHiddenElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLInputHiddenElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_type)(IHTMLInputHiddenElement *This,BSTR *p);
      HRESULT (WINAPI *put_value)(IHTMLInputHiddenElement *This,BSTR v);
      HRESULT (WINAPI *get_value)(IHTMLInputHiddenElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLInputHiddenElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLInputHiddenElement *This,BSTR *p);
      HRESULT (WINAPI *put_status)(IHTMLInputHiddenElement *This,VARIANT v);
      HRESULT (WINAPI *get_status)(IHTMLInputHiddenElement *This,VARIANT *p);
      HRESULT (WINAPI *put_disabled)(IHTMLInputHiddenElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLInputHiddenElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_form)(IHTMLInputHiddenElement *This,IHTMLFormElement **p);
      HRESULT (WINAPI *createTextRange)(IHTMLInputHiddenElement *This,IHTMLTxtRange **range);
    END_INTERFACE
  } IHTMLInputHiddenElementVtbl;
  interface IHTMLInputHiddenElement {
    CONST_VTBL struct IHTMLInputHiddenElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLInputHiddenElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLInputHiddenElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLInputHiddenElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLInputHiddenElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLInputHiddenElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLInputHiddenElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLInputHiddenElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLInputHiddenElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLInputHiddenElement_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLInputHiddenElement_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#define IHTMLInputHiddenElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLInputHiddenElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLInputHiddenElement_put_status(This,v) (This)->lpVtbl->put_status(This,v)
#define IHTMLInputHiddenElement_get_status(This,p) (This)->lpVtbl->get_status(This,p)
#define IHTMLInputHiddenElement_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLInputHiddenElement_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLInputHiddenElement_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#define IHTMLInputHiddenElement_createTextRange(This,range) (This)->lpVtbl->createTextRange(This,range)
#endif
#endif
  HRESULT WINAPI IHTMLInputHiddenElement_get_type_Proxy(IHTMLInputHiddenElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_put_value_Proxy(IHTMLInputHiddenElement *This,BSTR v);
  void __RPC_STUB IHTMLInputHiddenElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_value_Proxy(IHTMLInputHiddenElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_put_name_Proxy(IHTMLInputHiddenElement *This,BSTR v);
  void __RPC_STUB IHTMLInputHiddenElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_name_Proxy(IHTMLInputHiddenElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_put_status_Proxy(IHTMLInputHiddenElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputHiddenElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_status_Proxy(IHTMLInputHiddenElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_put_disabled_Proxy(IHTMLInputHiddenElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputHiddenElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_disabled_Proxy(IHTMLInputHiddenElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputHiddenElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_get_form_Proxy(IHTMLInputHiddenElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputHiddenElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputHiddenElement_createTextRange_Proxy(IHTMLInputHiddenElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLInputHiddenElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputTextElement_INTERFACE_DEFINED__
#define __IHTMLInputTextElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputTextElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLInputTextElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_defaultValue(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultValue(BSTR *p) = 0;
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
    virtual HRESULT WINAPI put_maxLength(long v) = 0;
    virtual HRESULT WINAPI get_maxLength(long *p) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_readOnly(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
#else
  typedef struct IHTMLInputTextElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLInputTextElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLInputTextElement *This);
      ULONG (WINAPI *Release)(IHTMLInputTextElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLInputTextElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLInputTextElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLInputTextElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLInputTextElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_type)(IHTMLInputTextElement *This,BSTR *p);
      HRESULT (WINAPI *put_value)(IHTMLInputTextElement *This,BSTR v);
      HRESULT (WINAPI *get_value)(IHTMLInputTextElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLInputTextElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLInputTextElement *This,BSTR *p);
      HRESULT (WINAPI *put_status)(IHTMLInputTextElement *This,VARIANT v);
      HRESULT (WINAPI *get_status)(IHTMLInputTextElement *This,VARIANT *p);
      HRESULT (WINAPI *put_disabled)(IHTMLInputTextElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLInputTextElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_form)(IHTMLInputTextElement *This,IHTMLFormElement **p);
      HRESULT (WINAPI *put_defaultValue)(IHTMLInputTextElement *This,BSTR v);
      HRESULT (WINAPI *get_defaultValue)(IHTMLInputTextElement *This,BSTR *p);
      HRESULT (WINAPI *put_size)(IHTMLInputTextElement *This,long v);
      HRESULT (WINAPI *get_size)(IHTMLInputTextElement *This,long *p);
      HRESULT (WINAPI *put_maxLength)(IHTMLInputTextElement *This,long v);
      HRESULT (WINAPI *get_maxLength)(IHTMLInputTextElement *This,long *p);
      HRESULT (WINAPI *select)(IHTMLInputTextElement *This);
      HRESULT (WINAPI *put_onchange)(IHTMLInputTextElement *This,VARIANT v);
      HRESULT (WINAPI *get_onchange)(IHTMLInputTextElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onselect)(IHTMLInputTextElement *This,VARIANT v);
      HRESULT (WINAPI *get_onselect)(IHTMLInputTextElement *This,VARIANT *p);
      HRESULT (WINAPI *put_readOnly)(IHTMLInputTextElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_readOnly)(IHTMLInputTextElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *createTextRange)(IHTMLInputTextElement *This,IHTMLTxtRange **range);
    END_INTERFACE
  } IHTMLInputTextElementVtbl;
  interface IHTMLInputTextElement {
    CONST_VTBL struct IHTMLInputTextElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLInputTextElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLInputTextElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLInputTextElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLInputTextElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLInputTextElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLInputTextElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLInputTextElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLInputTextElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLInputTextElement_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLInputTextElement_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#define IHTMLInputTextElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLInputTextElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLInputTextElement_put_status(This,v) (This)->lpVtbl->put_status(This,v)
#define IHTMLInputTextElement_get_status(This,p) (This)->lpVtbl->get_status(This,p)
#define IHTMLInputTextElement_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLInputTextElement_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLInputTextElement_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#define IHTMLInputTextElement_put_defaultValue(This,v) (This)->lpVtbl->put_defaultValue(This,v)
#define IHTMLInputTextElement_get_defaultValue(This,p) (This)->lpVtbl->get_defaultValue(This,p)
#define IHTMLInputTextElement_put_size(This,v) (This)->lpVtbl->put_size(This,v)
#define IHTMLInputTextElement_get_size(This,p) (This)->lpVtbl->get_size(This,p)
#define IHTMLInputTextElement_put_maxLength(This,v) (This)->lpVtbl->put_maxLength(This,v)
#define IHTMLInputTextElement_get_maxLength(This,p) (This)->lpVtbl->get_maxLength(This,p)
#define IHTMLInputTextElement_select(This) (This)->lpVtbl->select(This)
#define IHTMLInputTextElement_put_onchange(This,v) (This)->lpVtbl->put_onchange(This,v)
#define IHTMLInputTextElement_get_onchange(This,p) (This)->lpVtbl->get_onchange(This,p)
#define IHTMLInputTextElement_put_onselect(This,v) (This)->lpVtbl->put_onselect(This,v)
#define IHTMLInputTextElement_get_onselect(This,p) (This)->lpVtbl->get_onselect(This,p)
#define IHTMLInputTextElement_put_readOnly(This,v) (This)->lpVtbl->put_readOnly(This,v)
#define IHTMLInputTextElement_get_readOnly(This,p) (This)->lpVtbl->get_readOnly(This,p)
#define IHTMLInputTextElement_createTextRange(This,range) (This)->lpVtbl->createTextRange(This,range)
#endif
#endif
  HRESULT WINAPI IHTMLInputTextElement_get_type_Proxy(IHTMLInputTextElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputTextElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_value_Proxy(IHTMLInputTextElement *This,BSTR v);
  void __RPC_STUB IHTMLInputTextElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_value_Proxy(IHTMLInputTextElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputTextElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_name_Proxy(IHTMLInputTextElement *This,BSTR v);
  void __RPC_STUB IHTMLInputTextElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_name_Proxy(IHTMLInputTextElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputTextElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_status_Proxy(IHTMLInputTextElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputTextElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_status_Proxy(IHTMLInputTextElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputTextElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_disabled_Proxy(IHTMLInputTextElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputTextElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_disabled_Proxy(IHTMLInputTextElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputTextElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_form_Proxy(IHTMLInputTextElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputTextElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_defaultValue_Proxy(IHTMLInputTextElement *This,BSTR v);
  void __RPC_STUB IHTMLInputTextElement_put_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_defaultValue_Proxy(IHTMLInputTextElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputTextElement_get_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_size_Proxy(IHTMLInputTextElement *This,long v);
  void __RPC_STUB IHTMLInputTextElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_size_Proxy(IHTMLInputTextElement *This,long *p);
  void __RPC_STUB IHTMLInputTextElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_maxLength_Proxy(IHTMLInputTextElement *This,long v);
  void __RPC_STUB IHTMLInputTextElement_put_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_maxLength_Proxy(IHTMLInputTextElement *This,long *p);
  void __RPC_STUB IHTMLInputTextElement_get_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_select_Proxy(IHTMLInputTextElement *This);
  void __RPC_STUB IHTMLInputTextElement_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_onchange_Proxy(IHTMLInputTextElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputTextElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_onchange_Proxy(IHTMLInputTextElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputTextElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_onselect_Proxy(IHTMLInputTextElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputTextElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_onselect_Proxy(IHTMLInputTextElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputTextElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_put_readOnly_Proxy(IHTMLInputTextElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputTextElement_put_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_get_readOnly_Proxy(IHTMLInputTextElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputTextElement_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputTextElement_createTextRange_Proxy(IHTMLInputTextElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLInputTextElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputFileElement_INTERFACE_DEFINED__
#define __IHTMLInputFileElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputFileElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLInputFileElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
    virtual HRESULT WINAPI put_maxLength(long v) = 0;
    virtual HRESULT WINAPI get_maxLength(long *p) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLInputFileElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLInputFileElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLInputFileElement *This);
      ULONG (WINAPI *Release)(IHTMLInputFileElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLInputFileElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLInputFileElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLInputFileElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLInputFileElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_type)(IHTMLInputFileElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLInputFileElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLInputFileElement *This,BSTR *p);
      HRESULT (WINAPI *put_status)(IHTMLInputFileElement *This,VARIANT v);
      HRESULT (WINAPI *get_status)(IHTMLInputFileElement *This,VARIANT *p);
      HRESULT (WINAPI *put_disabled)(IHTMLInputFileElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLInputFileElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_form)(IHTMLInputFileElement *This,IHTMLFormElement **p);
      HRESULT (WINAPI *put_size)(IHTMLInputFileElement *This,long v);
      HRESULT (WINAPI *get_size)(IHTMLInputFileElement *This,long *p);
      HRESULT (WINAPI *put_maxLength)(IHTMLInputFileElement *This,long v);
      HRESULT (WINAPI *get_maxLength)(IHTMLInputFileElement *This,long *p);
      HRESULT (WINAPI *select)(IHTMLInputFileElement *This);
      HRESULT (WINAPI *put_onchange)(IHTMLInputFileElement *This,VARIANT v);
      HRESULT (WINAPI *get_onchange)(IHTMLInputFileElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onselect)(IHTMLInputFileElement *This,VARIANT v);
      HRESULT (WINAPI *get_onselect)(IHTMLInputFileElement *This,VARIANT *p);
      HRESULT (WINAPI *put_value)(IHTMLInputFileElement *This,BSTR v);
      HRESULT (WINAPI *get_value)(IHTMLInputFileElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLInputFileElementVtbl;
  interface IHTMLInputFileElement {
    CONST_VTBL struct IHTMLInputFileElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLInputFileElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLInputFileElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLInputFileElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLInputFileElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLInputFileElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLInputFileElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLInputFileElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLInputFileElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLInputFileElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLInputFileElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLInputFileElement_put_status(This,v) (This)->lpVtbl->put_status(This,v)
#define IHTMLInputFileElement_get_status(This,p) (This)->lpVtbl->get_status(This,p)
#define IHTMLInputFileElement_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLInputFileElement_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLInputFileElement_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#define IHTMLInputFileElement_put_size(This,v) (This)->lpVtbl->put_size(This,v)
#define IHTMLInputFileElement_get_size(This,p) (This)->lpVtbl->get_size(This,p)
#define IHTMLInputFileElement_put_maxLength(This,v) (This)->lpVtbl->put_maxLength(This,v)
#define IHTMLInputFileElement_get_maxLength(This,p) (This)->lpVtbl->get_maxLength(This,p)
#define IHTMLInputFileElement_select(This) (This)->lpVtbl->select(This)
#define IHTMLInputFileElement_put_onchange(This,v) (This)->lpVtbl->put_onchange(This,v)
#define IHTMLInputFileElement_get_onchange(This,p) (This)->lpVtbl->get_onchange(This,p)
#define IHTMLInputFileElement_put_onselect(This,v) (This)->lpVtbl->put_onselect(This,v)
#define IHTMLInputFileElement_get_onselect(This,p) (This)->lpVtbl->get_onselect(This,p)
#define IHTMLInputFileElement_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLInputFileElement_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLInputFileElement_get_type_Proxy(IHTMLInputFileElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputFileElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_name_Proxy(IHTMLInputFileElement *This,BSTR v);
  void __RPC_STUB IHTMLInputFileElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_name_Proxy(IHTMLInputFileElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputFileElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_status_Proxy(IHTMLInputFileElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputFileElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_status_Proxy(IHTMLInputFileElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputFileElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_disabled_Proxy(IHTMLInputFileElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputFileElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_disabled_Proxy(IHTMLInputFileElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputFileElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_form_Proxy(IHTMLInputFileElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLInputFileElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_size_Proxy(IHTMLInputFileElement *This,long v);
  void __RPC_STUB IHTMLInputFileElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_size_Proxy(IHTMLInputFileElement *This,long *p);
  void __RPC_STUB IHTMLInputFileElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_maxLength_Proxy(IHTMLInputFileElement *This,long v);
  void __RPC_STUB IHTMLInputFileElement_put_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_maxLength_Proxy(IHTMLInputFileElement *This,long *p);
  void __RPC_STUB IHTMLInputFileElement_get_maxLength_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_select_Proxy(IHTMLInputFileElement *This);
  void __RPC_STUB IHTMLInputFileElement_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_onchange_Proxy(IHTMLInputFileElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputFileElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_onchange_Proxy(IHTMLInputFileElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputFileElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_onselect_Proxy(IHTMLInputFileElement *This,VARIANT v);
  void __RPC_STUB IHTMLInputFileElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_onselect_Proxy(IHTMLInputFileElement *This,VARIANT *p);
  void __RPC_STUB IHTMLInputFileElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_put_value_Proxy(IHTMLInputFileElement *This,BSTR v);
  void __RPC_STUB IHTMLInputFileElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputFileElement_get_value_Proxy(IHTMLInputFileElement *This,BSTR *p);
  void __RPC_STUB IHTMLInputFileElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionButtonElement_INTERFACE_DEFINED__
#define __IHTMLOptionButtonElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionButtonElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLOptionButtonElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_checked(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_checked(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_defaultChecked(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_defaultChecked(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_indeterminate(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_indeterminate(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
#else
  typedef struct IHTMLOptionButtonElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLOptionButtonElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLOptionButtonElement *This);
      ULONG (WINAPI *Release)(IHTMLOptionButtonElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLOptionButtonElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLOptionButtonElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLOptionButtonElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLOptionButtonElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_value)(IHTMLOptionButtonElement *This,BSTR v);
      HRESULT (WINAPI *get_value)(IHTMLOptionButtonElement *This,BSTR *p);
      HRESULT (WINAPI *get_type)(IHTMLOptionButtonElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLOptionButtonElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLOptionButtonElement *This,BSTR *p);
      HRESULT (WINAPI *put_checked)(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_checked)(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_defaultChecked)(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_defaultChecked)(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_onchange)(IHTMLOptionButtonElement *This,VARIANT v);
      HRESULT (WINAPI *get_onchange)(IHTMLOptionButtonElement *This,VARIANT *p);
      HRESULT (WINAPI *put_disabled)(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_status)(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_status)(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_indeterminate)(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_indeterminate)(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_form)(IHTMLOptionButtonElement *This,IHTMLFormElement **p);
    END_INTERFACE
  } IHTMLOptionButtonElementVtbl;
  interface IHTMLOptionButtonElement {
    CONST_VTBL struct IHTMLOptionButtonElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLOptionButtonElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLOptionButtonElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLOptionButtonElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLOptionButtonElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLOptionButtonElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLOptionButtonElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLOptionButtonElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLOptionButtonElement_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLOptionButtonElement_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#define IHTMLOptionButtonElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLOptionButtonElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLOptionButtonElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLOptionButtonElement_put_checked(This,v) (This)->lpVtbl->put_checked(This,v)
#define IHTMLOptionButtonElement_get_checked(This,p) (This)->lpVtbl->get_checked(This,p)
#define IHTMLOptionButtonElement_put_defaultChecked(This,v) (This)->lpVtbl->put_defaultChecked(This,v)
#define IHTMLOptionButtonElement_get_defaultChecked(This,p) (This)->lpVtbl->get_defaultChecked(This,p)
#define IHTMLOptionButtonElement_put_onchange(This,v) (This)->lpVtbl->put_onchange(This,v)
#define IHTMLOptionButtonElement_get_onchange(This,p) (This)->lpVtbl->get_onchange(This,p)
#define IHTMLOptionButtonElement_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLOptionButtonElement_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLOptionButtonElement_put_status(This,v) (This)->lpVtbl->put_status(This,v)
#define IHTMLOptionButtonElement_get_status(This,p) (This)->lpVtbl->get_status(This,p)
#define IHTMLOptionButtonElement_put_indeterminate(This,v) (This)->lpVtbl->put_indeterminate(This,v)
#define IHTMLOptionButtonElement_get_indeterminate(This,p) (This)->lpVtbl->get_indeterminate(This,p)
#define IHTMLOptionButtonElement_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLOptionButtonElement_put_value_Proxy(IHTMLOptionButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLOptionButtonElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_value_Proxy(IHTMLOptionButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_type_Proxy(IHTMLOptionButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_name_Proxy(IHTMLOptionButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLOptionButtonElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_name_Proxy(IHTMLOptionButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_checked_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_checked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_checked_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_checked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_defaultChecked_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_defaultChecked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_defaultChecked_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_defaultChecked_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_onchange_Proxy(IHTMLOptionButtonElement *This,VARIANT v);
  void __RPC_STUB IHTMLOptionButtonElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_onchange_Proxy(IHTMLOptionButtonElement *This,VARIANT *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_disabled_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_disabled_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_status_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_status_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_put_indeterminate_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionButtonElement_put_indeterminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_indeterminate_Proxy(IHTMLOptionButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionButtonElement_get_indeterminate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionButtonElement_get_form_Proxy(IHTMLOptionButtonElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLOptionButtonElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLInputImage_INTERFACE_DEFINED__
#define __IHTMLInputImage_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLInputImage;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLInputImage : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_lowsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_lowsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vrml(BSTR v) = 0;
    virtual HRESULT WINAPI get_vrml(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dynsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_dynsrc(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI get_complete(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_loop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_loop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onabort(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onabort(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(long v) = 0;
    virtual HRESULT WINAPI get_width(long *p) = 0;
    virtual HRESULT WINAPI put_height(long v) = 0;
    virtual HRESULT WINAPI get_height(long *p) = 0;
    virtual HRESULT WINAPI put_start(BSTR v) = 0;
    virtual HRESULT WINAPI get_start(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLInputImageVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLInputImage *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLInputImage *This);
      ULONG (WINAPI *Release)(IHTMLInputImage *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLInputImage *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLInputImage *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLInputImage *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLInputImage *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_type)(IHTMLInputImage *This,BSTR *p);
      HRESULT (WINAPI *put_disabled)(IHTMLInputImage *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLInputImage *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_border)(IHTMLInputImage *This,VARIANT v);
      HRESULT (WINAPI *get_border)(IHTMLInputImage *This,VARIANT *p);
      HRESULT (WINAPI *put_vspace)(IHTMLInputImage *This,long v);
      HRESULT (WINAPI *get_vspace)(IHTMLInputImage *This,long *p);
      HRESULT (WINAPI *put_hspace)(IHTMLInputImage *This,long v);
      HRESULT (WINAPI *get_hspace)(IHTMLInputImage *This,long *p);
      HRESULT (WINAPI *put_alt)(IHTMLInputImage *This,BSTR v);
      HRESULT (WINAPI *get_alt)(IHTMLInputImage *This,BSTR *p);
      HRESULT (WINAPI *put_src)(IHTMLInputImage *This,BSTR v);
      HRESULT (WINAPI *get_src)(IHTMLInputImage *This,BSTR *p);
      HRESULT (WINAPI *put_lowsrc)(IHTMLInputImage *This,BSTR v);
      HRESULT (WINAPI *get_lowsrc)(IHTMLInputImage *This,BSTR *p);
      HRESULT (WINAPI *put_vrml)(IHTMLInputImage *This,BSTR v);
      HRESULT (WINAPI *get_vrml)(IHTMLInputImage *This,BSTR *p);
      HRESULT (WINAPI *put_dynsrc)(IHTMLInputImage *This,BSTR v);
      HRESULT (WINAPI *get_dynsrc)(IHTMLInputImage *This,BSTR *p);
      HRESULT (WINAPI *get_readyState)(IHTMLInputImage *This,BSTR *p);
      HRESULT (WINAPI *get_complete)(IHTMLInputImage *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_loop)(IHTMLInputImage *This,VARIANT v);
      HRESULT (WINAPI *get_loop)(IHTMLInputImage *This,VARIANT *p);
      HRESULT (WINAPI *put_align)(IHTMLInputImage *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLInputImage *This,BSTR *p);
      HRESULT (WINAPI *put_onload)(IHTMLInputImage *This,VARIANT v);
      HRESULT (WINAPI *get_onload)(IHTMLInputImage *This,VARIANT *p);
      HRESULT (WINAPI *put_onerror)(IHTMLInputImage *This,VARIANT v);
      HRESULT (WINAPI *get_onerror)(IHTMLInputImage *This,VARIANT *p);
      HRESULT (WINAPI *put_onabort)(IHTMLInputImage *This,VARIANT v);
      HRESULT (WINAPI *get_onabort)(IHTMLInputImage *This,VARIANT *p);
      HRESULT (WINAPI *put_name)(IHTMLInputImage *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLInputImage *This,BSTR *p);
      HRESULT (WINAPI *put_width)(IHTMLInputImage *This,long v);
      HRESULT (WINAPI *get_width)(IHTMLInputImage *This,long *p);
      HRESULT (WINAPI *put_height)(IHTMLInputImage *This,long v);
      HRESULT (WINAPI *get_height)(IHTMLInputImage *This,long *p);
      HRESULT (WINAPI *put_start)(IHTMLInputImage *This,BSTR v);
      HRESULT (WINAPI *get_start)(IHTMLInputImage *This,BSTR *p);
    END_INTERFACE
  } IHTMLInputImageVtbl;
  interface IHTMLInputImage {
    CONST_VTBL struct IHTMLInputImageVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLInputImage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLInputImage_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLInputImage_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLInputImage_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLInputImage_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLInputImage_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLInputImage_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLInputImage_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLInputImage_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLInputImage_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLInputImage_put_border(This,v) (This)->lpVtbl->put_border(This,v)
#define IHTMLInputImage_get_border(This,p) (This)->lpVtbl->get_border(This,p)
#define IHTMLInputImage_put_vspace(This,v) (This)->lpVtbl->put_vspace(This,v)
#define IHTMLInputImage_get_vspace(This,p) (This)->lpVtbl->get_vspace(This,p)
#define IHTMLInputImage_put_hspace(This,v) (This)->lpVtbl->put_hspace(This,v)
#define IHTMLInputImage_get_hspace(This,p) (This)->lpVtbl->get_hspace(This,p)
#define IHTMLInputImage_put_alt(This,v) (This)->lpVtbl->put_alt(This,v)
#define IHTMLInputImage_get_alt(This,p) (This)->lpVtbl->get_alt(This,p)
#define IHTMLInputImage_put_src(This,v) (This)->lpVtbl->put_src(This,v)
#define IHTMLInputImage_get_src(This,p) (This)->lpVtbl->get_src(This,p)
#define IHTMLInputImage_put_lowsrc(This,v) (This)->lpVtbl->put_lowsrc(This,v)
#define IHTMLInputImage_get_lowsrc(This,p) (This)->lpVtbl->get_lowsrc(This,p)
#define IHTMLInputImage_put_vrml(This,v) (This)->lpVtbl->put_vrml(This,v)
#define IHTMLInputImage_get_vrml(This,p) (This)->lpVtbl->get_vrml(This,p)
#define IHTMLInputImage_put_dynsrc(This,v) (This)->lpVtbl->put_dynsrc(This,v)
#define IHTMLInputImage_get_dynsrc(This,p) (This)->lpVtbl->get_dynsrc(This,p)
#define IHTMLInputImage_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IHTMLInputImage_get_complete(This,p) (This)->lpVtbl->get_complete(This,p)
#define IHTMLInputImage_put_loop(This,v) (This)->lpVtbl->put_loop(This,v)
#define IHTMLInputImage_get_loop(This,p) (This)->lpVtbl->get_loop(This,p)
#define IHTMLInputImage_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLInputImage_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#define IHTMLInputImage_put_onload(This,v) (This)->lpVtbl->put_onload(This,v)
#define IHTMLInputImage_get_onload(This,p) (This)->lpVtbl->get_onload(This,p)
#define IHTMLInputImage_put_onerror(This,v) (This)->lpVtbl->put_onerror(This,v)
#define IHTMLInputImage_get_onerror(This,p) (This)->lpVtbl->get_onerror(This,p)
#define IHTMLInputImage_put_onabort(This,v) (This)->lpVtbl->put_onabort(This,v)
#define IHTMLInputImage_get_onabort(This,p) (This)->lpVtbl->get_onabort(This,p)
#define IHTMLInputImage_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLInputImage_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLInputImage_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLInputImage_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLInputImage_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLInputImage_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLInputImage_put_start(This,v) (This)->lpVtbl->put_start(This,v)
#define IHTMLInputImage_get_start(This,p) (This)->lpVtbl->get_start(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLInputImage_get_type_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_disabled_Proxy(IHTMLInputImage *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLInputImage_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_disabled_Proxy(IHTMLInputImage *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputImage_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_border_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_border_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_vspace_Proxy(IHTMLInputImage *This,long v);
  void __RPC_STUB IHTMLInputImage_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_vspace_Proxy(IHTMLInputImage *This,long *p);
  void __RPC_STUB IHTMLInputImage_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_hspace_Proxy(IHTMLInputImage *This,long v);
  void __RPC_STUB IHTMLInputImage_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_hspace_Proxy(IHTMLInputImage *This,long *p);
  void __RPC_STUB IHTMLInputImage_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_alt_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_alt_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_src_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_src_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_lowsrc_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_lowsrc_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_lowsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_vrml_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_vrml_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_vrml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_dynsrc_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_dynsrc_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_dynsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_readyState_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_complete_Proxy(IHTMLInputImage *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLInputImage_get_complete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_loop_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_loop_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_align_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_align_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_onload_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_onload_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_onerror_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_onerror_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_onabort_Proxy(IHTMLInputImage *This,VARIANT v);
  void __RPC_STUB IHTMLInputImage_put_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_onabort_Proxy(IHTMLInputImage *This,VARIANT *p);
  void __RPC_STUB IHTMLInputImage_get_onabort_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_name_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_name_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_width_Proxy(IHTMLInputImage *This,long v);
  void __RPC_STUB IHTMLInputImage_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_width_Proxy(IHTMLInputImage *This,long *p);
  void __RPC_STUB IHTMLInputImage_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_height_Proxy(IHTMLInputImage *This,long v);
  void __RPC_STUB IHTMLInputImage_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_height_Proxy(IHTMLInputImage *This,long *p);
  void __RPC_STUB IHTMLInputImage_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_put_start_Proxy(IHTMLInputImage *This,BSTR v);
  void __RPC_STUB IHTMLInputImage_put_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLInputImage_get_start_Proxy(IHTMLInputImage *This,BSTR *p);
  void __RPC_STUB IHTMLInputImage_get_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLInputElement_DISPINTERFACE_DEFINED__
#define __DispHTMLInputElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLInputElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLInputElement : public IDispatch {
  };
#else
  typedef struct DispHTMLInputElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLInputElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLInputElement *This);
      ULONG (WINAPI *Release)(DispHTMLInputElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLInputElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLInputElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLInputElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLInputElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLInputElementVtbl;
  interface DispHTMLInputElement {
    CONST_VTBL struct DispHTMLInputElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLInputElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLInputElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLInputElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLInputElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLInputElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLInputElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLInputElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLInputElement;
#ifdef __cplusplus
  class HTMLInputElement;
#endif

#ifndef __IHTMLTextAreaElement_INTERFACE_DEFINED__
#define __IHTMLTextAreaElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTextAreaElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTextAreaElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_defaultValue(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultValue(BSTR *p) = 0;
    virtual HRESULT WINAPI select(void) = 0;
    virtual HRESULT WINAPI put_onchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_readOnly(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_readOnly(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_rows(long v) = 0;
    virtual HRESULT WINAPI get_rows(long *p) = 0;
    virtual HRESULT WINAPI put_cols(long v) = 0;
    virtual HRESULT WINAPI get_cols(long *p) = 0;
    virtual HRESULT WINAPI put_wrap(BSTR v) = 0;
    virtual HRESULT WINAPI get_wrap(BSTR *p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
#else
  typedef struct IHTMLTextAreaElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTextAreaElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTextAreaElement *This);
      ULONG (WINAPI *Release)(IHTMLTextAreaElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTextAreaElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTextAreaElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTextAreaElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTextAreaElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_type)(IHTMLTextAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_value)(IHTMLTextAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_value)(IHTMLTextAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLTextAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLTextAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_status)(IHTMLTextAreaElement *This,VARIANT v);
      HRESULT (WINAPI *get_status)(IHTMLTextAreaElement *This,VARIANT *p);
      HRESULT (WINAPI *put_disabled)(IHTMLTextAreaElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLTextAreaElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_form)(IHTMLTextAreaElement *This,IHTMLFormElement **p);
      HRESULT (WINAPI *put_defaultValue)(IHTMLTextAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_defaultValue)(IHTMLTextAreaElement *This,BSTR *p);
      HRESULT (WINAPI *select)(IHTMLTextAreaElement *This);
      HRESULT (WINAPI *put_onchange)(IHTMLTextAreaElement *This,VARIANT v);
      HRESULT (WINAPI *get_onchange)(IHTMLTextAreaElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onselect)(IHTMLTextAreaElement *This,VARIANT v);
      HRESULT (WINAPI *get_onselect)(IHTMLTextAreaElement *This,VARIANT *p);
      HRESULT (WINAPI *put_readOnly)(IHTMLTextAreaElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_readOnly)(IHTMLTextAreaElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_rows)(IHTMLTextAreaElement *This,long v);
      HRESULT (WINAPI *get_rows)(IHTMLTextAreaElement *This,long *p);
      HRESULT (WINAPI *put_cols)(IHTMLTextAreaElement *This,long v);
      HRESULT (WINAPI *get_cols)(IHTMLTextAreaElement *This,long *p);
      HRESULT (WINAPI *put_wrap)(IHTMLTextAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_wrap)(IHTMLTextAreaElement *This,BSTR *p);
      HRESULT (WINAPI *createTextRange)(IHTMLTextAreaElement *This,IHTMLTxtRange **range);
    END_INTERFACE
  } IHTMLTextAreaElementVtbl;
  interface IHTMLTextAreaElement {
    CONST_VTBL struct IHTMLTextAreaElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTextAreaElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTextAreaElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTextAreaElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTextAreaElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTextAreaElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTextAreaElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTextAreaElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTextAreaElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLTextAreaElement_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLTextAreaElement_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#define IHTMLTextAreaElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLTextAreaElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLTextAreaElement_put_status(This,v) (This)->lpVtbl->put_status(This,v)
#define IHTMLTextAreaElement_get_status(This,p) (This)->lpVtbl->get_status(This,p)
#define IHTMLTextAreaElement_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLTextAreaElement_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLTextAreaElement_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#define IHTMLTextAreaElement_put_defaultValue(This,v) (This)->lpVtbl->put_defaultValue(This,v)
#define IHTMLTextAreaElement_get_defaultValue(This,p) (This)->lpVtbl->get_defaultValue(This,p)
#define IHTMLTextAreaElement_select(This) (This)->lpVtbl->select(This)
#define IHTMLTextAreaElement_put_onchange(This,v) (This)->lpVtbl->put_onchange(This,v)
#define IHTMLTextAreaElement_get_onchange(This,p) (This)->lpVtbl->get_onchange(This,p)
#define IHTMLTextAreaElement_put_onselect(This,v) (This)->lpVtbl->put_onselect(This,v)
#define IHTMLTextAreaElement_get_onselect(This,p) (This)->lpVtbl->get_onselect(This,p)
#define IHTMLTextAreaElement_put_readOnly(This,v) (This)->lpVtbl->put_readOnly(This,v)
#define IHTMLTextAreaElement_get_readOnly(This,p) (This)->lpVtbl->get_readOnly(This,p)
#define IHTMLTextAreaElement_put_rows(This,v) (This)->lpVtbl->put_rows(This,v)
#define IHTMLTextAreaElement_get_rows(This,p) (This)->lpVtbl->get_rows(This,p)
#define IHTMLTextAreaElement_put_cols(This,v) (This)->lpVtbl->put_cols(This,v)
#define IHTMLTextAreaElement_get_cols(This,p) (This)->lpVtbl->get_cols(This,p)
#define IHTMLTextAreaElement_put_wrap(This,v) (This)->lpVtbl->put_wrap(This,v)
#define IHTMLTextAreaElement_get_wrap(This,p) (This)->lpVtbl->get_wrap(This,p)
#define IHTMLTextAreaElement_createTextRange(This,range) (This)->lpVtbl->createTextRange(This,range)
#endif
#endif
  HRESULT WINAPI IHTMLTextAreaElement_get_type_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_value_Proxy(IHTMLTextAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLTextAreaElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_value_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_name_Proxy(IHTMLTextAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLTextAreaElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_name_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_status_Proxy(IHTMLTextAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLTextAreaElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_status_Proxy(IHTMLTextAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLTextAreaElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_disabled_Proxy(IHTMLTextAreaElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLTextAreaElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_disabled_Proxy(IHTMLTextAreaElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLTextAreaElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_form_Proxy(IHTMLTextAreaElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLTextAreaElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_defaultValue_Proxy(IHTMLTextAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLTextAreaElement_put_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_defaultValue_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_defaultValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_select_Proxy(IHTMLTextAreaElement *This);
  void __RPC_STUB IHTMLTextAreaElement_select_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_onchange_Proxy(IHTMLTextAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLTextAreaElement_put_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_onchange_Proxy(IHTMLTextAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLTextAreaElement_get_onchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_onselect_Proxy(IHTMLTextAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLTextAreaElement_put_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_onselect_Proxy(IHTMLTextAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLTextAreaElement_get_onselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_readOnly_Proxy(IHTMLTextAreaElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLTextAreaElement_put_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_readOnly_Proxy(IHTMLTextAreaElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLTextAreaElement_get_readOnly_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_rows_Proxy(IHTMLTextAreaElement *This,long v);
  void __RPC_STUB IHTMLTextAreaElement_put_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_rows_Proxy(IHTMLTextAreaElement *This,long *p);
  void __RPC_STUB IHTMLTextAreaElement_get_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_cols_Proxy(IHTMLTextAreaElement *This,long v);
  void __RPC_STUB IHTMLTextAreaElement_put_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_cols_Proxy(IHTMLTextAreaElement *This,long *p);
  void __RPC_STUB IHTMLTextAreaElement_get_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_put_wrap_Proxy(IHTMLTextAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLTextAreaElement_put_wrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_get_wrap_Proxy(IHTMLTextAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLTextAreaElement_get_wrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTextAreaElement_createTextRange_Proxy(IHTMLTextAreaElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLTextAreaElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLTextAreaElement_DISPINTERFACE_DEFINED__
#define __DispHTMLTextAreaElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTextAreaElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLTextAreaElement : public IDispatch {
  };
#else
  typedef struct DispHTMLTextAreaElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLTextAreaElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLTextAreaElement *This);
      ULONG (WINAPI *Release)(DispHTMLTextAreaElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLTextAreaElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLTextAreaElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLTextAreaElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLTextAreaElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLTextAreaElementVtbl;
  interface DispHTMLTextAreaElement {
    CONST_VTBL struct DispHTMLTextAreaElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLTextAreaElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLTextAreaElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLTextAreaElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLTextAreaElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLTextAreaElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLTextAreaElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLTextAreaElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLTextAreaElement;
#ifdef __cplusplus
  class HTMLTextAreaElement;
#endif

#ifndef __DispHTMLRichtextElement_DISPINTERFACE_DEFINED__
#define __DispHTMLRichtextElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLRichtextElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLRichtextElement : public IDispatch {
  };
#else
  typedef struct DispHTMLRichtextElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLRichtextElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLRichtextElement *This);
      ULONG (WINAPI *Release)(DispHTMLRichtextElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLRichtextElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLRichtextElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLRichtextElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLRichtextElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLRichtextElementVtbl;
  interface DispHTMLRichtextElement {
    CONST_VTBL struct DispHTMLRichtextElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLRichtextElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLRichtextElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLRichtextElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLRichtextElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLRichtextElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLRichtextElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLRichtextElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLRichtextElement;
#ifdef __cplusplus
  class HTMLRichtextElement;
#endif

#ifndef __IHTMLButtonElement_INTERFACE_DEFINED__
#define __IHTMLButtonElement_INTERFACE_DEFINED__

  EXTERN_C const IID IID_IHTMLButtonElement;

#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLButtonElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(VARIANT v) = 0;
    virtual HRESULT WINAPI get_status(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI createTextRange(IHTMLTxtRange **range) = 0;
  };
#else
  typedef struct IHTMLButtonElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLButtonElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLButtonElement *This);
      ULONG (WINAPI *Release)(IHTMLButtonElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLButtonElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLButtonElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLButtonElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLButtonElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_type)(IHTMLButtonElement *This,BSTR *p);
      HRESULT (WINAPI *put_value)(IHTMLButtonElement *This,BSTR v);
      HRESULT (WINAPI *get_value)(IHTMLButtonElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLButtonElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLButtonElement *This,BSTR *p);
      HRESULT (WINAPI *put_status)(IHTMLButtonElement *This,VARIANT v);
      HRESULT (WINAPI *get_status)(IHTMLButtonElement *This,VARIANT *p);
      HRESULT (WINAPI *put_disabled)(IHTMLButtonElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLButtonElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_form)(IHTMLButtonElement *This,IHTMLFormElement **p);
      HRESULT (WINAPI *createTextRange)(IHTMLButtonElement *This,IHTMLTxtRange **range);
    END_INTERFACE
  } IHTMLButtonElementVtbl;
  interface IHTMLButtonElement {
    CONST_VTBL struct IHTMLButtonElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLButtonElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLButtonElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLButtonElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLButtonElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLButtonElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLButtonElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLButtonElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLButtonElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLButtonElement_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLButtonElement_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#define IHTMLButtonElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLButtonElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLButtonElement_put_status(This,v) (This)->lpVtbl->put_status(This,v)
#define IHTMLButtonElement_get_status(This,p) (This)->lpVtbl->get_status(This,p)
#define IHTMLButtonElement_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLButtonElement_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLButtonElement_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#define IHTMLButtonElement_createTextRange(This,range) (This)->lpVtbl->createTextRange(This,range)
#endif
#endif
  HRESULT WINAPI IHTMLButtonElement_get_type_Proxy(IHTMLButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLButtonElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_put_value_Proxy(IHTMLButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLButtonElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_value_Proxy(IHTMLButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLButtonElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_put_name_Proxy(IHTMLButtonElement *This,BSTR v);
  void __RPC_STUB IHTMLButtonElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_name_Proxy(IHTMLButtonElement *This,BSTR *p);
  void __RPC_STUB IHTMLButtonElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_put_status_Proxy(IHTMLButtonElement *This,VARIANT v);
  void __RPC_STUB IHTMLButtonElement_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_status_Proxy(IHTMLButtonElement *This,VARIANT *p);
  void __RPC_STUB IHTMLButtonElement_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_put_disabled_Proxy(IHTMLButtonElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLButtonElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_disabled_Proxy(IHTMLButtonElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLButtonElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_get_form_Proxy(IHTMLButtonElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLButtonElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLButtonElement_createTextRange_Proxy(IHTMLButtonElement *This,IHTMLTxtRange **range);
  void __RPC_STUB IHTMLButtonElement_createTextRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLButtonElement_DISPINTERFACE_DEFINED__
#define __DispHTMLButtonElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLButtonElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLButtonElement : public IDispatch {
  };
#else
  typedef struct DispHTMLButtonElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLButtonElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLButtonElement *This);
      ULONG (WINAPI *Release)(DispHTMLButtonElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLButtonElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLButtonElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLButtonElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLButtonElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLButtonElementVtbl;
  interface DispHTMLButtonElement {
    CONST_VTBL struct DispHTMLButtonElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLButtonElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLButtonElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLButtonElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLButtonElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLButtonElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLButtonElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLButtonElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLButtonElement;
#ifdef __cplusplus
  class HTMLButtonElement;
#endif

#ifndef __HTMLMarqueeElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLMarqueeElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLMarqueeElementEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLMarqueeElementEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLMarqueeElementEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLMarqueeElementEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLMarqueeElementEvents2 *This);
      ULONG (WINAPI *Release)(HTMLMarqueeElementEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLMarqueeElementEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLMarqueeElementEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLMarqueeElementEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLMarqueeElementEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLMarqueeElementEvents2Vtbl;
  interface HTMLMarqueeElementEvents2 {
    CONST_VTBL struct HTMLMarqueeElementEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLMarqueeElementEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLMarqueeElementEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLMarqueeElementEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLMarqueeElementEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLMarqueeElementEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLMarqueeElementEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLMarqueeElementEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLMarqueeElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLMarqueeElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLMarqueeElementEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLMarqueeElementEvents : public IDispatch {
  };
#else
  typedef struct HTMLMarqueeElementEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLMarqueeElementEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLMarqueeElementEvents *This);
      ULONG (WINAPI *Release)(HTMLMarqueeElementEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLMarqueeElementEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLMarqueeElementEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLMarqueeElementEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLMarqueeElementEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLMarqueeElementEventsVtbl;
  interface HTMLMarqueeElementEvents {
    CONST_VTBL struct HTMLMarqueeElementEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLMarqueeElementEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLMarqueeElementEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLMarqueeElementEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLMarqueeElementEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLMarqueeElementEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLMarqueeElementEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLMarqueeElementEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLMarqueeElement_INTERFACE_DEFINED__
#define __IHTMLMarqueeElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMarqueeElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLMarqueeElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_scrollDelay(long v) = 0;
    virtual HRESULT WINAPI get_scrollDelay(long *p) = 0;
    virtual HRESULT WINAPI put_direction(BSTR v) = 0;
    virtual HRESULT WINAPI get_direction(BSTR *p) = 0;
    virtual HRESULT WINAPI put_behavior(BSTR v) = 0;
    virtual HRESULT WINAPI get_behavior(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scrollAmount(long v) = 0;
    virtual HRESULT WINAPI get_scrollAmount(long *p) = 0;
    virtual HRESULT WINAPI put_loop(long v) = 0;
    virtual HRESULT WINAPI get_loop(long *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_onfinish(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfinish(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbounce(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbounce(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_trueSpeed(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_trueSpeed(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI start(void) = 0;
    virtual HRESULT WINAPI stop(void) = 0;
  };
#else
  typedef struct IHTMLMarqueeElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLMarqueeElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLMarqueeElement *This);
      ULONG (WINAPI *Release)(IHTMLMarqueeElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLMarqueeElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLMarqueeElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLMarqueeElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLMarqueeElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_bgColor)(IHTMLMarqueeElement *This,VARIANT v);
      HRESULT (WINAPI *get_bgColor)(IHTMLMarqueeElement *This,VARIANT *p);
      HRESULT (WINAPI *put_scrollDelay)(IHTMLMarqueeElement *This,long v);
      HRESULT (WINAPI *get_scrollDelay)(IHTMLMarqueeElement *This,long *p);
      HRESULT (WINAPI *put_direction)(IHTMLMarqueeElement *This,BSTR v);
      HRESULT (WINAPI *get_direction)(IHTMLMarqueeElement *This,BSTR *p);
      HRESULT (WINAPI *put_behavior)(IHTMLMarqueeElement *This,BSTR v);
      HRESULT (WINAPI *get_behavior)(IHTMLMarqueeElement *This,BSTR *p);
      HRESULT (WINAPI *put_scrollAmount)(IHTMLMarqueeElement *This,long v);
      HRESULT (WINAPI *get_scrollAmount)(IHTMLMarqueeElement *This,long *p);
      HRESULT (WINAPI *put_loop)(IHTMLMarqueeElement *This,long v);
      HRESULT (WINAPI *get_loop)(IHTMLMarqueeElement *This,long *p);
      HRESULT (WINAPI *put_vspace)(IHTMLMarqueeElement *This,long v);
      HRESULT (WINAPI *get_vspace)(IHTMLMarqueeElement *This,long *p);
      HRESULT (WINAPI *put_hspace)(IHTMLMarqueeElement *This,long v);
      HRESULT (WINAPI *get_hspace)(IHTMLMarqueeElement *This,long *p);
      HRESULT (WINAPI *put_onfinish)(IHTMLMarqueeElement *This,VARIANT v);
      HRESULT (WINAPI *get_onfinish)(IHTMLMarqueeElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onstart)(IHTMLMarqueeElement *This,VARIANT v);
      HRESULT (WINAPI *get_onstart)(IHTMLMarqueeElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onbounce)(IHTMLMarqueeElement *This,VARIANT v);
      HRESULT (WINAPI *get_onbounce)(IHTMLMarqueeElement *This,VARIANT *p);
      HRESULT (WINAPI *put_width)(IHTMLMarqueeElement *This,VARIANT v);
      HRESULT (WINAPI *get_width)(IHTMLMarqueeElement *This,VARIANT *p);
      HRESULT (WINAPI *put_height)(IHTMLMarqueeElement *This,VARIANT v);
      HRESULT (WINAPI *get_height)(IHTMLMarqueeElement *This,VARIANT *p);
      HRESULT (WINAPI *put_trueSpeed)(IHTMLMarqueeElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_trueSpeed)(IHTMLMarqueeElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *start)(IHTMLMarqueeElement *This);
      HRESULT (WINAPI *stop)(IHTMLMarqueeElement *This);
    END_INTERFACE
  } IHTMLMarqueeElementVtbl;
  interface IHTMLMarqueeElement {
    CONST_VTBL struct IHTMLMarqueeElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLMarqueeElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLMarqueeElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLMarqueeElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLMarqueeElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLMarqueeElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLMarqueeElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLMarqueeElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLMarqueeElement_put_bgColor(This,v) (This)->lpVtbl->put_bgColor(This,v)
#define IHTMLMarqueeElement_get_bgColor(This,p) (This)->lpVtbl->get_bgColor(This,p)
#define IHTMLMarqueeElement_put_scrollDelay(This,v) (This)->lpVtbl->put_scrollDelay(This,v)
#define IHTMLMarqueeElement_get_scrollDelay(This,p) (This)->lpVtbl->get_scrollDelay(This,p)
#define IHTMLMarqueeElement_put_direction(This,v) (This)->lpVtbl->put_direction(This,v)
#define IHTMLMarqueeElement_get_direction(This,p) (This)->lpVtbl->get_direction(This,p)
#define IHTMLMarqueeElement_put_behavior(This,v) (This)->lpVtbl->put_behavior(This,v)
#define IHTMLMarqueeElement_get_behavior(This,p) (This)->lpVtbl->get_behavior(This,p)
#define IHTMLMarqueeElement_put_scrollAmount(This,v) (This)->lpVtbl->put_scrollAmount(This,v)
#define IHTMLMarqueeElement_get_scrollAmount(This,p) (This)->lpVtbl->get_scrollAmount(This,p)
#define IHTMLMarqueeElement_put_loop(This,v) (This)->lpVtbl->put_loop(This,v)
#define IHTMLMarqueeElement_get_loop(This,p) (This)->lpVtbl->get_loop(This,p)
#define IHTMLMarqueeElement_put_vspace(This,v) (This)->lpVtbl->put_vspace(This,v)
#define IHTMLMarqueeElement_get_vspace(This,p) (This)->lpVtbl->get_vspace(This,p)
#define IHTMLMarqueeElement_put_hspace(This,v) (This)->lpVtbl->put_hspace(This,v)
#define IHTMLMarqueeElement_get_hspace(This,p) (This)->lpVtbl->get_hspace(This,p)
#define IHTMLMarqueeElement_put_onfinish(This,v) (This)->lpVtbl->put_onfinish(This,v)
#define IHTMLMarqueeElement_get_onfinish(This,p) (This)->lpVtbl->get_onfinish(This,p)
#define IHTMLMarqueeElement_put_onstart(This,v) (This)->lpVtbl->put_onstart(This,v)
#define IHTMLMarqueeElement_get_onstart(This,p) (This)->lpVtbl->get_onstart(This,p)
#define IHTMLMarqueeElement_put_onbounce(This,v) (This)->lpVtbl->put_onbounce(This,v)
#define IHTMLMarqueeElement_get_onbounce(This,p) (This)->lpVtbl->get_onbounce(This,p)
#define IHTMLMarqueeElement_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLMarqueeElement_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLMarqueeElement_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLMarqueeElement_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLMarqueeElement_put_trueSpeed(This,v) (This)->lpVtbl->put_trueSpeed(This,v)
#define IHTMLMarqueeElement_get_trueSpeed(This,p) (This)->lpVtbl->get_trueSpeed(This,p)
#define IHTMLMarqueeElement_start(This) (This)->lpVtbl->start(This)
#define IHTMLMarqueeElement_stop(This) (This)->lpVtbl->stop(This)
#endif
#endif
  HRESULT WINAPI IHTMLMarqueeElement_put_bgColor_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_bgColor_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_scrollDelay_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_scrollDelay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_scrollDelay_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_scrollDelay_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_direction_Proxy(IHTMLMarqueeElement *This,BSTR v);
  void __RPC_STUB IHTMLMarqueeElement_put_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_direction_Proxy(IHTMLMarqueeElement *This,BSTR *p);
  void __RPC_STUB IHTMLMarqueeElement_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_behavior_Proxy(IHTMLMarqueeElement *This,BSTR v);
  void __RPC_STUB IHTMLMarqueeElement_put_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_behavior_Proxy(IHTMLMarqueeElement *This,BSTR *p);
  void __RPC_STUB IHTMLMarqueeElement_get_behavior_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_scrollAmount_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_scrollAmount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_scrollAmount_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_scrollAmount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_loop_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_loop_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_vspace_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_vspace_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_hspace_Proxy(IHTMLMarqueeElement *This,long v);
  void __RPC_STUB IHTMLMarqueeElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_hspace_Proxy(IHTMLMarqueeElement *This,long *p);
  void __RPC_STUB IHTMLMarqueeElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_onfinish_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_onfinish_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_onfinish_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_onfinish_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_onstart_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_onstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_onstart_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_onstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_onbounce_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_onbounce_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_onbounce_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_onbounce_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_width_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_width_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_height_Proxy(IHTMLMarqueeElement *This,VARIANT v);
  void __RPC_STUB IHTMLMarqueeElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_height_Proxy(IHTMLMarqueeElement *This,VARIANT *p);
  void __RPC_STUB IHTMLMarqueeElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_put_trueSpeed_Proxy(IHTMLMarqueeElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLMarqueeElement_put_trueSpeed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_get_trueSpeed_Proxy(IHTMLMarqueeElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLMarqueeElement_get_trueSpeed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_start_Proxy(IHTMLMarqueeElement *This);
  void __RPC_STUB IHTMLMarqueeElement_start_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMarqueeElement_stop_Proxy(IHTMLMarqueeElement *This);
  void __RPC_STUB IHTMLMarqueeElement_stop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLMarqueeElement_DISPINTERFACE_DEFINED__
#define __DispHTMLMarqueeElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLMarqueeElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLMarqueeElement : public IDispatch {
  };
#else
  typedef struct DispHTMLMarqueeElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLMarqueeElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLMarqueeElement *This);
      ULONG (WINAPI *Release)(DispHTMLMarqueeElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLMarqueeElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLMarqueeElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLMarqueeElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLMarqueeElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLMarqueeElementVtbl;
  interface DispHTMLMarqueeElement {
    CONST_VTBL struct DispHTMLMarqueeElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLMarqueeElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLMarqueeElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLMarqueeElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLMarqueeElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLMarqueeElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLMarqueeElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLMarqueeElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLMarqueeElement;
#ifdef __cplusplus
  class HTMLMarqueeElement;
#endif

#ifndef __IHTMLHtmlElement_INTERFACE_DEFINED__
#define __IHTMLHtmlElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLHtmlElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLHtmlElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_version(BSTR v) = 0;
    virtual HRESULT WINAPI get_version(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLHtmlElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLHtmlElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLHtmlElement *This);
      ULONG (WINAPI *Release)(IHTMLHtmlElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLHtmlElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLHtmlElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLHtmlElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLHtmlElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_version)(IHTMLHtmlElement *This,BSTR v);
      HRESULT (WINAPI *get_version)(IHTMLHtmlElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLHtmlElementVtbl;
  interface IHTMLHtmlElement {
    CONST_VTBL struct IHTMLHtmlElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLHtmlElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLHtmlElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLHtmlElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLHtmlElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLHtmlElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLHtmlElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLHtmlElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLHtmlElement_put_version(This,v) (This)->lpVtbl->put_version(This,v)
#define IHTMLHtmlElement_get_version(This,p) (This)->lpVtbl->get_version(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLHtmlElement_put_version_Proxy(IHTMLHtmlElement *This,BSTR v);
  void __RPC_STUB IHTMLHtmlElement_put_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHtmlElement_get_version_Proxy(IHTMLHtmlElement *This,BSTR *p);
  void __RPC_STUB IHTMLHtmlElement_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLHeadElement_INTERFACE_DEFINED__
#define __IHTMLHeadElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLHeadElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLHeadElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_profile(BSTR v) = 0;
    virtual HRESULT WINAPI get_profile(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLHeadElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLHeadElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLHeadElement *This);
      ULONG (WINAPI *Release)(IHTMLHeadElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLHeadElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLHeadElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLHeadElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLHeadElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_profile)(IHTMLHeadElement *This,BSTR v);
      HRESULT (WINAPI *get_profile)(IHTMLHeadElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLHeadElementVtbl;
  interface IHTMLHeadElement {
    CONST_VTBL struct IHTMLHeadElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLHeadElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLHeadElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLHeadElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLHeadElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLHeadElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLHeadElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLHeadElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLHeadElement_put_profile(This,v) (This)->lpVtbl->put_profile(This,v)
#define IHTMLHeadElement_get_profile(This,p) (This)->lpVtbl->get_profile(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLHeadElement_put_profile_Proxy(IHTMLHeadElement *This,BSTR v);
  void __RPC_STUB IHTMLHeadElement_put_profile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLHeadElement_get_profile_Proxy(IHTMLHeadElement *This,BSTR *p);
  void __RPC_STUB IHTMLHeadElement_get_profile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTitleElement_INTERFACE_DEFINED__
#define __IHTMLTitleElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTitleElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTitleElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLTitleElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTitleElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTitleElement *This);
      ULONG (WINAPI *Release)(IHTMLTitleElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTitleElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTitleElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTitleElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTitleElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_text)(IHTMLTitleElement *This,BSTR v);
      HRESULT (WINAPI *get_text)(IHTMLTitleElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLTitleElementVtbl;
  interface IHTMLTitleElement {
    CONST_VTBL struct IHTMLTitleElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTitleElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTitleElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTitleElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTitleElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTitleElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTitleElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTitleElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTitleElement_put_text(This,v) (This)->lpVtbl->put_text(This,v)
#define IHTMLTitleElement_get_text(This,p) (This)->lpVtbl->get_text(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLTitleElement_put_text_Proxy(IHTMLTitleElement *This,BSTR v);
  void __RPC_STUB IHTMLTitleElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTitleElement_get_text_Proxy(IHTMLTitleElement *This,BSTR *p);
  void __RPC_STUB IHTMLTitleElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLMetaElement_INTERFACE_DEFINED__
#define __IHTMLMetaElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMetaElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLMetaElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_httpEquiv(BSTR v) = 0;
    virtual HRESULT WINAPI get_httpEquiv(BSTR *p) = 0;
    virtual HRESULT WINAPI put_content(BSTR v) = 0;
    virtual HRESULT WINAPI get_content(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_url(BSTR v) = 0;
    virtual HRESULT WINAPI get_url(BSTR *p) = 0;
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLMetaElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLMetaElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLMetaElement *This);
      ULONG (WINAPI *Release)(IHTMLMetaElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLMetaElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLMetaElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLMetaElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLMetaElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_httpEquiv)(IHTMLMetaElement *This,BSTR v);
      HRESULT (WINAPI *get_httpEquiv)(IHTMLMetaElement *This,BSTR *p);
      HRESULT (WINAPI *put_content)(IHTMLMetaElement *This,BSTR v);
      HRESULT (WINAPI *get_content)(IHTMLMetaElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLMetaElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLMetaElement *This,BSTR *p);
      HRESULT (WINAPI *put_url)(IHTMLMetaElement *This,BSTR v);
      HRESULT (WINAPI *get_url)(IHTMLMetaElement *This,BSTR *p);
      HRESULT (WINAPI *put_charset)(IHTMLMetaElement *This,BSTR v);
      HRESULT (WINAPI *get_charset)(IHTMLMetaElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLMetaElementVtbl;
  interface IHTMLMetaElement {
    CONST_VTBL struct IHTMLMetaElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLMetaElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLMetaElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLMetaElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLMetaElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLMetaElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLMetaElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLMetaElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLMetaElement_put_httpEquiv(This,v) (This)->lpVtbl->put_httpEquiv(This,v)
#define IHTMLMetaElement_get_httpEquiv(This,p) (This)->lpVtbl->get_httpEquiv(This,p)
#define IHTMLMetaElement_put_content(This,v) (This)->lpVtbl->put_content(This,v)
#define IHTMLMetaElement_get_content(This,p) (This)->lpVtbl->get_content(This,p)
#define IHTMLMetaElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLMetaElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLMetaElement_put_url(This,v) (This)->lpVtbl->put_url(This,v)
#define IHTMLMetaElement_get_url(This,p) (This)->lpVtbl->get_url(This,p)
#define IHTMLMetaElement_put_charset(This,v) (This)->lpVtbl->put_charset(This,v)
#define IHTMLMetaElement_get_charset(This,p) (This)->lpVtbl->get_charset(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLMetaElement_put_httpEquiv_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_httpEquiv_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_httpEquiv_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_httpEquiv_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_put_content_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_content_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_content_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_content_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_put_name_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_name_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_put_url_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_url_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_url_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_url_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_put_charset_Proxy(IHTMLMetaElement *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement_get_charset_Proxy(IHTMLMetaElement *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLMetaElement2_INTERFACE_DEFINED__
#define __IHTMLMetaElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMetaElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLMetaElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_scheme(BSTR v) = 0;
    virtual HRESULT WINAPI get_scheme(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLMetaElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLMetaElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLMetaElement2 *This);
      ULONG (WINAPI *Release)(IHTMLMetaElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLMetaElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLMetaElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLMetaElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLMetaElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_scheme)(IHTMLMetaElement2 *This,BSTR v);
      HRESULT (WINAPI *get_scheme)(IHTMLMetaElement2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLMetaElement2Vtbl;
  interface IHTMLMetaElement2 {
    CONST_VTBL struct IHTMLMetaElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLMetaElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLMetaElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLMetaElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLMetaElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLMetaElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLMetaElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLMetaElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLMetaElement2_put_scheme(This,v) (This)->lpVtbl->put_scheme(This,v)
#define IHTMLMetaElement2_get_scheme(This,p) (This)->lpVtbl->get_scheme(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLMetaElement2_put_scheme_Proxy(IHTMLMetaElement2 *This,BSTR v);
  void __RPC_STUB IHTMLMetaElement2_put_scheme_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMetaElement2_get_scheme_Proxy(IHTMLMetaElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLMetaElement2_get_scheme_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLBaseElement_INTERFACE_DEFINED__
#define __IHTMLBaseElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBaseElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLBaseElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLBaseElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLBaseElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLBaseElement *This);
      ULONG (WINAPI *Release)(IHTMLBaseElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLBaseElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLBaseElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLBaseElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLBaseElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_href)(IHTMLBaseElement *This,BSTR v);
      HRESULT (WINAPI *get_href)(IHTMLBaseElement *This,BSTR *p);
      HRESULT (WINAPI *put_target)(IHTMLBaseElement *This,BSTR v);
      HRESULT (WINAPI *get_target)(IHTMLBaseElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLBaseElementVtbl;
  interface IHTMLBaseElement {
    CONST_VTBL struct IHTMLBaseElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLBaseElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLBaseElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLBaseElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLBaseElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLBaseElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLBaseElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLBaseElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLBaseElement_put_href(This,v) (This)->lpVtbl->put_href(This,v)
#define IHTMLBaseElement_get_href(This,p) (This)->lpVtbl->get_href(This,p)
#define IHTMLBaseElement_put_target(This,v) (This)->lpVtbl->put_target(This,v)
#define IHTMLBaseElement_get_target(This,p) (This)->lpVtbl->get_target(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLBaseElement_put_href_Proxy(IHTMLBaseElement *This,BSTR v);
  void __RPC_STUB IHTMLBaseElement_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseElement_get_href_Proxy(IHTMLBaseElement *This,BSTR *p);
  void __RPC_STUB IHTMLBaseElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseElement_put_target_Proxy(IHTMLBaseElement *This,BSTR v);
  void __RPC_STUB IHTMLBaseElement_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseElement_get_target_Proxy(IHTMLBaseElement *This,BSTR *p);
  void __RPC_STUB IHTMLBaseElement_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLIsIndexElement_INTERFACE_DEFINED__
#define __IHTMLIsIndexElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIsIndexElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLIsIndexElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_prompt(BSTR v) = 0;
    virtual HRESULT WINAPI get_prompt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_action(BSTR v) = 0;
    virtual HRESULT WINAPI get_action(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLIsIndexElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLIsIndexElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLIsIndexElement *This);
      ULONG (WINAPI *Release)(IHTMLIsIndexElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLIsIndexElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLIsIndexElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLIsIndexElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLIsIndexElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_prompt)(IHTMLIsIndexElement *This,BSTR v);
      HRESULT (WINAPI *get_prompt)(IHTMLIsIndexElement *This,BSTR *p);
      HRESULT (WINAPI *put_action)(IHTMLIsIndexElement *This,BSTR v);
      HRESULT (WINAPI *get_action)(IHTMLIsIndexElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLIsIndexElementVtbl;
  interface IHTMLIsIndexElement {
    CONST_VTBL struct IHTMLIsIndexElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLIsIndexElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLIsIndexElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLIsIndexElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLIsIndexElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLIsIndexElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLIsIndexElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLIsIndexElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLIsIndexElement_put_prompt(This,v) (This)->lpVtbl->put_prompt(This,v)
#define IHTMLIsIndexElement_get_prompt(This,p) (This)->lpVtbl->get_prompt(This,p)
#define IHTMLIsIndexElement_put_action(This,v) (This)->lpVtbl->put_action(This,v)
#define IHTMLIsIndexElement_get_action(This,p) (This)->lpVtbl->get_action(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLIsIndexElement_put_prompt_Proxy(IHTMLIsIndexElement *This,BSTR v);
  void __RPC_STUB IHTMLIsIndexElement_put_prompt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIsIndexElement_get_prompt_Proxy(IHTMLIsIndexElement *This,BSTR *p);
  void __RPC_STUB IHTMLIsIndexElement_get_prompt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIsIndexElement_put_action_Proxy(IHTMLIsIndexElement *This,BSTR v);
  void __RPC_STUB IHTMLIsIndexElement_put_action_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIsIndexElement_get_action_Proxy(IHTMLIsIndexElement *This,BSTR *p);
  void __RPC_STUB IHTMLIsIndexElement_get_action_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLIsIndexElement2_INTERFACE_DEFINED__
#define __IHTMLIsIndexElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIsIndexElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLIsIndexElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
#else
  typedef struct IHTMLIsIndexElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLIsIndexElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLIsIndexElement2 *This);
      ULONG (WINAPI *Release)(IHTMLIsIndexElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLIsIndexElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLIsIndexElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLIsIndexElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLIsIndexElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_form)(IHTMLIsIndexElement2 *This,IHTMLFormElement **p);
    END_INTERFACE
  } IHTMLIsIndexElement2Vtbl;
  interface IHTMLIsIndexElement2 {
    CONST_VTBL struct IHTMLIsIndexElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLIsIndexElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLIsIndexElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLIsIndexElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLIsIndexElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLIsIndexElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLIsIndexElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLIsIndexElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLIsIndexElement2_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLIsIndexElement2_get_form_Proxy(IHTMLIsIndexElement2 *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLIsIndexElement2_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLNextIdElement_INTERFACE_DEFINED__
#define __IHTMLNextIdElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLNextIdElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLNextIdElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_n(BSTR v) = 0;
    virtual HRESULT WINAPI get_n(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLNextIdElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLNextIdElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLNextIdElement *This);
      ULONG (WINAPI *Release)(IHTMLNextIdElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLNextIdElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLNextIdElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLNextIdElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLNextIdElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_n)(IHTMLNextIdElement *This,BSTR v);
      HRESULT (WINAPI *get_n)(IHTMLNextIdElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLNextIdElementVtbl;
  interface IHTMLNextIdElement {
    CONST_VTBL struct IHTMLNextIdElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLNextIdElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLNextIdElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLNextIdElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLNextIdElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLNextIdElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLNextIdElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLNextIdElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLNextIdElement_put_n(This,v) (This)->lpVtbl->put_n(This,v)
#define IHTMLNextIdElement_get_n(This,p) (This)->lpVtbl->get_n(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLNextIdElement_put_n_Proxy(IHTMLNextIdElement *This,BSTR v);
  void __RPC_STUB IHTMLNextIdElement_put_n_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNextIdElement_get_n_Proxy(IHTMLNextIdElement *This,BSTR *p);
  void __RPC_STUB IHTMLNextIdElement_get_n_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLHtmlElement_DISPINTERFACE_DEFINED__
#define __DispHTMLHtmlElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLHtmlElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLHtmlElement : public IDispatch {
  };
#else
  typedef struct DispHTMLHtmlElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLHtmlElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLHtmlElement *This);
      ULONG (WINAPI *Release)(DispHTMLHtmlElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLHtmlElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLHtmlElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLHtmlElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLHtmlElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLHtmlElementVtbl;
  interface DispHTMLHtmlElement {
    CONST_VTBL struct DispHTMLHtmlElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLHtmlElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLHtmlElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLHtmlElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLHtmlElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLHtmlElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLHtmlElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLHtmlElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLHtmlElement;
#ifdef __cplusplus
  class HTMLHtmlElement;
#endif

#ifndef __DispHTMLHeadElement_DISPINTERFACE_DEFINED__
#define __DispHTMLHeadElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLHeadElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLHeadElement : public IDispatch {
  };
#else
  typedef struct DispHTMLHeadElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLHeadElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLHeadElement *This);
      ULONG (WINAPI *Release)(DispHTMLHeadElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLHeadElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLHeadElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLHeadElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLHeadElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLHeadElementVtbl;
  interface DispHTMLHeadElement {
    CONST_VTBL struct DispHTMLHeadElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLHeadElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLHeadElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLHeadElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLHeadElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLHeadElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLHeadElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLHeadElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLHeadElement;
#ifdef __cplusplus
  class HTMLHeadElement;
#endif

#ifndef __DispHTMLTitleElement_DISPINTERFACE_DEFINED__
#define __DispHTMLTitleElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTitleElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLTitleElement : public IDispatch {
  };
#else
  typedef struct DispHTMLTitleElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLTitleElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLTitleElement *This);
      ULONG (WINAPI *Release)(DispHTMLTitleElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLTitleElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLTitleElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLTitleElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLTitleElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLTitleElementVtbl;
  interface DispHTMLTitleElement {
    CONST_VTBL struct DispHTMLTitleElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLTitleElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLTitleElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLTitleElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLTitleElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLTitleElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLTitleElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLTitleElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLTitleElement;
#ifdef __cplusplus
  class HTMLTitleElement;
#endif

#ifndef __DispHTMLMetaElement_DISPINTERFACE_DEFINED__
#define __DispHTMLMetaElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLMetaElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLMetaElement : public IDispatch {
  };
#else
  typedef struct DispHTMLMetaElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLMetaElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLMetaElement *This);
      ULONG (WINAPI *Release)(DispHTMLMetaElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLMetaElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLMetaElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLMetaElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLMetaElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLMetaElementVtbl;
  interface DispHTMLMetaElement {
    CONST_VTBL struct DispHTMLMetaElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLMetaElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLMetaElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLMetaElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLMetaElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLMetaElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLMetaElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLMetaElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLMetaElement;
#ifdef __cplusplus
  class HTMLMetaElement;
#endif

#ifndef __DispHTMLBaseElement_DISPINTERFACE_DEFINED__
#define __DispHTMLBaseElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBaseElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLBaseElement : public IDispatch {
  };
#else
  typedef struct DispHTMLBaseElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLBaseElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLBaseElement *This);
      ULONG (WINAPI *Release)(DispHTMLBaseElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLBaseElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLBaseElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLBaseElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLBaseElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLBaseElementVtbl;
  interface DispHTMLBaseElement {
    CONST_VTBL struct DispHTMLBaseElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLBaseElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLBaseElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLBaseElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLBaseElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLBaseElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLBaseElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLBaseElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLBaseElement;
#ifdef __cplusplus
  class HTMLBaseElement;
#endif

#ifndef __DispHTMLIsIndexElement_DISPINTERFACE_DEFINED__
#define __DispHTMLIsIndexElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLIsIndexElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLIsIndexElement : public IDispatch {
  };
#else
  typedef struct DispHTMLIsIndexElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLIsIndexElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLIsIndexElement *This);
      ULONG (WINAPI *Release)(DispHTMLIsIndexElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLIsIndexElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLIsIndexElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLIsIndexElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLIsIndexElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLIsIndexElementVtbl;
  interface DispHTMLIsIndexElement {
    CONST_VTBL struct DispHTMLIsIndexElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLIsIndexElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLIsIndexElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLIsIndexElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLIsIndexElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLIsIndexElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLIsIndexElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLIsIndexElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLIsIndexElement;
#ifdef __cplusplus
  class HTMLIsIndexElement;
#endif

#ifndef __DispHTMLNextIdElement_DISPINTERFACE_DEFINED__
#define __DispHTMLNextIdElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLNextIdElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLNextIdElement : public IDispatch {
  };
#else
  typedef struct DispHTMLNextIdElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLNextIdElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLNextIdElement *This);
      ULONG (WINAPI *Release)(DispHTMLNextIdElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLNextIdElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLNextIdElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLNextIdElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLNextIdElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLNextIdElementVtbl;
  interface DispHTMLNextIdElement {
    CONST_VTBL struct DispHTMLNextIdElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLNextIdElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLNextIdElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLNextIdElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLNextIdElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLNextIdElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLNextIdElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLNextIdElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLNextIdElement;
#ifdef __cplusplus
  class HTMLNextIdElement;
#endif

#ifndef __IHTMLBaseFontElement_INTERFACE_DEFINED__
#define __IHTMLBaseFontElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBaseFontElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLBaseFontElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_color(VARIANT v) = 0;
    virtual HRESULT WINAPI get_color(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_face(BSTR v) = 0;
    virtual HRESULT WINAPI get_face(BSTR *p) = 0;
    virtual HRESULT WINAPI put_size(long v) = 0;
    virtual HRESULT WINAPI get_size(long *p) = 0;
  };
#else
  typedef struct IHTMLBaseFontElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLBaseFontElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLBaseFontElement *This);
      ULONG (WINAPI *Release)(IHTMLBaseFontElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLBaseFontElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLBaseFontElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLBaseFontElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLBaseFontElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_color)(IHTMLBaseFontElement *This,VARIANT v);
      HRESULT (WINAPI *get_color)(IHTMLBaseFontElement *This,VARIANT *p);
      HRESULT (WINAPI *put_face)(IHTMLBaseFontElement *This,BSTR v);
      HRESULT (WINAPI *get_face)(IHTMLBaseFontElement *This,BSTR *p);
      HRESULT (WINAPI *put_size)(IHTMLBaseFontElement *This,long v);
      HRESULT (WINAPI *get_size)(IHTMLBaseFontElement *This,long *p);
    END_INTERFACE
  } IHTMLBaseFontElementVtbl;
  interface IHTMLBaseFontElement {
    CONST_VTBL struct IHTMLBaseFontElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLBaseFontElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLBaseFontElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLBaseFontElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLBaseFontElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLBaseFontElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLBaseFontElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLBaseFontElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLBaseFontElement_put_color(This,v) (This)->lpVtbl->put_color(This,v)
#define IHTMLBaseFontElement_get_color(This,p) (This)->lpVtbl->get_color(This,p)
#define IHTMLBaseFontElement_put_face(This,v) (This)->lpVtbl->put_face(This,v)
#define IHTMLBaseFontElement_get_face(This,p) (This)->lpVtbl->get_face(This,p)
#define IHTMLBaseFontElement_put_size(This,v) (This)->lpVtbl->put_size(This,v)
#define IHTMLBaseFontElement_get_size(This,p) (This)->lpVtbl->get_size(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLBaseFontElement_put_color_Proxy(IHTMLBaseFontElement *This,VARIANT v);
  void __RPC_STUB IHTMLBaseFontElement_put_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_get_color_Proxy(IHTMLBaseFontElement *This,VARIANT *p);
  void __RPC_STUB IHTMLBaseFontElement_get_color_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_put_face_Proxy(IHTMLBaseFontElement *This,BSTR v);
  void __RPC_STUB IHTMLBaseFontElement_put_face_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_get_face_Proxy(IHTMLBaseFontElement *This,BSTR *p);
  void __RPC_STUB IHTMLBaseFontElement_get_face_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_put_size_Proxy(IHTMLBaseFontElement *This,long v);
  void __RPC_STUB IHTMLBaseFontElement_put_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBaseFontElement_get_size_Proxy(IHTMLBaseFontElement *This,long *p);
  void __RPC_STUB IHTMLBaseFontElement_get_size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBaseFontElement_DISPINTERFACE_DEFINED__
#define __DispHTMLBaseFontElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBaseFontElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLBaseFontElement : public IDispatch {
  };
#else
  typedef struct DispHTMLBaseFontElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLBaseFontElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLBaseFontElement *This);
      ULONG (WINAPI *Release)(DispHTMLBaseFontElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLBaseFontElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLBaseFontElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLBaseFontElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLBaseFontElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLBaseFontElementVtbl;
  interface DispHTMLBaseFontElement {
    CONST_VTBL struct DispHTMLBaseFontElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLBaseFontElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLBaseFontElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLBaseFontElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLBaseFontElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLBaseFontElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLBaseFontElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLBaseFontElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLBaseFontElement;
#ifdef __cplusplus
  class HTMLBaseFontElement;
#endif

#ifndef __IHTMLUnknownElement_INTERFACE_DEFINED__
#define __IHTMLUnknownElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLUnknownElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLUnknownElement : public IDispatch {
  };
#else
  typedef struct IHTMLUnknownElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLUnknownElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLUnknownElement *This);
      ULONG (WINAPI *Release)(IHTMLUnknownElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLUnknownElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLUnknownElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLUnknownElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLUnknownElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } IHTMLUnknownElementVtbl;
  interface IHTMLUnknownElement {
    CONST_VTBL struct IHTMLUnknownElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLUnknownElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLUnknownElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLUnknownElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLUnknownElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLUnknownElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLUnknownElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLUnknownElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __DispHTMLUnknownElement_DISPINTERFACE_DEFINED__
#define __DispHTMLUnknownElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLUnknownElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLUnknownElement : public IDispatch {
  };
#else
  typedef struct DispHTMLUnknownElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLUnknownElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLUnknownElement *This);
      ULONG (WINAPI *Release)(DispHTMLUnknownElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLUnknownElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLUnknownElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLUnknownElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLUnknownElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLUnknownElementVtbl;
  interface DispHTMLUnknownElement {
    CONST_VTBL struct DispHTMLUnknownElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLUnknownElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLUnknownElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLUnknownElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLUnknownElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLUnknownElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLUnknownElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLUnknownElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLUnknownElement;
#ifdef __cplusplus
  class HTMLUnknownElement;
#endif

#ifndef __IOmHistory_INTERFACE_DEFINED__
#define __IOmHistory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IOmHistory;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IOmHistory : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(short *p) = 0;
    virtual HRESULT WINAPI back(VARIANT *pvargdistance) = 0;
    virtual HRESULT WINAPI forward(VARIANT *pvargdistance) = 0;
    virtual HRESULT WINAPI go(VARIANT *pvargdistance) = 0;
  };
#else
  typedef struct IOmHistoryVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IOmHistory *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IOmHistory *This);
      ULONG (WINAPI *Release)(IOmHistory *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IOmHistory *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IOmHistory *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IOmHistory *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IOmHistory *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IOmHistory *This,short *p);
      HRESULT (WINAPI *back)(IOmHistory *This,VARIANT *pvargdistance);
      HRESULT (WINAPI *forward)(IOmHistory *This,VARIANT *pvargdistance);
      HRESULT (WINAPI *go)(IOmHistory *This,VARIANT *pvargdistance);
    END_INTERFACE
  } IOmHistoryVtbl;
  interface IOmHistory {
    CONST_VTBL struct IOmHistoryVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IOmHistory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOmHistory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOmHistory_Release(This) (This)->lpVtbl->Release(This)
#define IOmHistory_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IOmHistory_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IOmHistory_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IOmHistory_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IOmHistory_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IOmHistory_back(This,pvargdistance) (This)->lpVtbl->back(This,pvargdistance)
#define IOmHistory_forward(This,pvargdistance) (This)->lpVtbl->forward(This,pvargdistance)
#define IOmHistory_go(This,pvargdistance) (This)->lpVtbl->go(This,pvargdistance)
#endif
#endif
  HRESULT WINAPI IOmHistory_get_length_Proxy(IOmHistory *This,short *p);
  void __RPC_STUB IOmHistory_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmHistory_back_Proxy(IOmHistory *This,VARIANT *pvargdistance);
  void __RPC_STUB IOmHistory_back_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmHistory_forward_Proxy(IOmHistory *This,VARIANT *pvargdistance);
  void __RPC_STUB IOmHistory_forward_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmHistory_go_Proxy(IOmHistory *This,VARIANT *pvargdistance);
  void __RPC_STUB IOmHistory_go_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLMimeTypesCollection_INTERFACE_DEFINED__
#define __IHTMLMimeTypesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMimeTypesCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLMimeTypesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
  };
#else
  typedef struct IHTMLMimeTypesCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLMimeTypesCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLMimeTypesCollection *This);
      ULONG (WINAPI *Release)(IHTMLMimeTypesCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLMimeTypesCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLMimeTypesCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLMimeTypesCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLMimeTypesCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLMimeTypesCollection *This,long *p);
    END_INTERFACE
  } IHTMLMimeTypesCollectionVtbl;
  interface IHTMLMimeTypesCollection {
    CONST_VTBL struct IHTMLMimeTypesCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLMimeTypesCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLMimeTypesCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLMimeTypesCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLMimeTypesCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLMimeTypesCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLMimeTypesCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLMimeTypesCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLMimeTypesCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLMimeTypesCollection_get_length_Proxy(IHTMLMimeTypesCollection *This,long *p);
  void __RPC_STUB IHTMLMimeTypesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLPluginsCollection_INTERFACE_DEFINED__
#define __IHTMLPluginsCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPluginsCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLPluginsCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI refresh(VARIANT_BOOL reload = 0) = 0;
  };
#else
  typedef struct IHTMLPluginsCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLPluginsCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLPluginsCollection *This);
      ULONG (WINAPI *Release)(IHTMLPluginsCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLPluginsCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLPluginsCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLPluginsCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLPluginsCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLPluginsCollection *This,long *p);
      HRESULT (WINAPI *refresh)(IHTMLPluginsCollection *This,VARIANT_BOOL reload);
    END_INTERFACE
  } IHTMLPluginsCollectionVtbl;
  interface IHTMLPluginsCollection {
    CONST_VTBL struct IHTMLPluginsCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLPluginsCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLPluginsCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLPluginsCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLPluginsCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLPluginsCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLPluginsCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLPluginsCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLPluginsCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLPluginsCollection_refresh(This,reload) (This)->lpVtbl->refresh(This,reload)
#endif
#endif
  HRESULT WINAPI IHTMLPluginsCollection_get_length_Proxy(IHTMLPluginsCollection *This,long *p);
  void __RPC_STUB IHTMLPluginsCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPluginsCollection_refresh_Proxy(IHTMLPluginsCollection *This,VARIANT_BOOL reload);
  void __RPC_STUB IHTMLPluginsCollection_refresh_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOpsProfile_INTERFACE_DEFINED__
#define __IHTMLOpsProfile_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOpsProfile;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLOpsProfile : public IDispatch {
  public:
    virtual HRESULT WINAPI addRequest(BSTR name,VARIANT reserved,VARIANT_BOOL *success) = 0;
    virtual HRESULT WINAPI clearRequest(void) = 0;
    virtual HRESULT WINAPI doRequest(VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR name,BSTR *value) = 0;
    virtual HRESULT WINAPI setAttribute(BSTR name,BSTR value,VARIANT prefs,VARIANT_BOOL *success) = 0;
    virtual HRESULT WINAPI commitChanges(VARIANT_BOOL *success) = 0;
    virtual HRESULT WINAPI addReadRequest(BSTR name,VARIANT reserved,VARIANT_BOOL *success) = 0;
    virtual HRESULT WINAPI doReadRequest(VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved) = 0;
    virtual HRESULT WINAPI doWriteRequest(VARIANT_BOOL *success) = 0;
  };
#else
  typedef struct IHTMLOpsProfileVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLOpsProfile *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLOpsProfile *This);
      ULONG (WINAPI *Release)(IHTMLOpsProfile *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLOpsProfile *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLOpsProfile *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLOpsProfile *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLOpsProfile *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *addRequest)(IHTMLOpsProfile *This,BSTR name,VARIANT reserved,VARIANT_BOOL *success);
      HRESULT (WINAPI *clearRequest)(IHTMLOpsProfile *This);
      HRESULT (WINAPI *doRequest)(IHTMLOpsProfile *This,VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved);
      HRESULT (WINAPI *getAttribute)(IHTMLOpsProfile *This,BSTR name,BSTR *value);
      HRESULT (WINAPI *setAttribute)(IHTMLOpsProfile *This,BSTR name,BSTR value,VARIANT prefs,VARIANT_BOOL *success);
      HRESULT (WINAPI *commitChanges)(IHTMLOpsProfile *This,VARIANT_BOOL *success);
      HRESULT (WINAPI *addReadRequest)(IHTMLOpsProfile *This,BSTR name,VARIANT reserved,VARIANT_BOOL *success);
      HRESULT (WINAPI *doReadRequest)(IHTMLOpsProfile *This,VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved);
      HRESULT (WINAPI *doWriteRequest)(IHTMLOpsProfile *This,VARIANT_BOOL *success);
    END_INTERFACE
  } IHTMLOpsProfileVtbl;
  interface IHTMLOpsProfile {
    CONST_VTBL struct IHTMLOpsProfileVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLOpsProfile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLOpsProfile_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLOpsProfile_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLOpsProfile_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLOpsProfile_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLOpsProfile_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLOpsProfile_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLOpsProfile_addRequest(This,name,reserved,success) (This)->lpVtbl->addRequest(This,name,reserved,success)
#define IHTMLOpsProfile_clearRequest(This) (This)->lpVtbl->clearRequest(This)
#define IHTMLOpsProfile_doRequest(This,usage,fname,domain,path,expire,reserved) (This)->lpVtbl->doRequest(This,usage,fname,domain,path,expire,reserved)
#define IHTMLOpsProfile_getAttribute(This,name,value) (This)->lpVtbl->getAttribute(This,name,value)
#define IHTMLOpsProfile_setAttribute(This,name,value,prefs,success) (This)->lpVtbl->setAttribute(This,name,value,prefs,success)
#define IHTMLOpsProfile_commitChanges(This,success) (This)->lpVtbl->commitChanges(This,success)
#define IHTMLOpsProfile_addReadRequest(This,name,reserved,success) (This)->lpVtbl->addReadRequest(This,name,reserved,success)
#define IHTMLOpsProfile_doReadRequest(This,usage,fname,domain,path,expire,reserved) (This)->lpVtbl->doReadRequest(This,usage,fname,domain,path,expire,reserved)
#define IHTMLOpsProfile_doWriteRequest(This,success) (This)->lpVtbl->doWriteRequest(This,success)
#endif
#endif
  HRESULT WINAPI IHTMLOpsProfile_addRequest_Proxy(IHTMLOpsProfile *This,BSTR name,VARIANT reserved,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_addRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_clearRequest_Proxy(IHTMLOpsProfile *This);
  void __RPC_STUB IHTMLOpsProfile_clearRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_doRequest_Proxy(IHTMLOpsProfile *This,VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved);
  void __RPC_STUB IHTMLOpsProfile_doRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_getAttribute_Proxy(IHTMLOpsProfile *This,BSTR name,BSTR *value);
  void __RPC_STUB IHTMLOpsProfile_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_setAttribute_Proxy(IHTMLOpsProfile *This,BSTR name,BSTR value,VARIANT prefs,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_commitChanges_Proxy(IHTMLOpsProfile *This,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_commitChanges_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_addReadRequest_Proxy(IHTMLOpsProfile *This,BSTR name,VARIANT reserved,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_addReadRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_doReadRequest_Proxy(IHTMLOpsProfile *This,VARIANT usage,VARIANT fname,VARIANT domain,VARIANT path,VARIANT expire,VARIANT reserved);
  void __RPC_STUB IHTMLOpsProfile_doReadRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOpsProfile_doWriteRequest_Proxy(IHTMLOpsProfile *This,VARIANT_BOOL *success);
  void __RPC_STUB IHTMLOpsProfile_doWriteRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IOmNavigator_INTERFACE_DEFINED__
#define __IOmNavigator_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IOmNavigator;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IOmNavigator : public IDispatch {
  public:
    virtual HRESULT WINAPI get_appCodeName(BSTR *p) = 0;
    virtual HRESULT WINAPI get_appName(BSTR *p) = 0;
    virtual HRESULT WINAPI get_appVersion(BSTR *p) = 0;
    virtual HRESULT WINAPI get_userAgent(BSTR *p) = 0;
    virtual HRESULT WINAPI javaEnabled(VARIANT_BOOL *enabled) = 0;
    virtual HRESULT WINAPI taintEnabled(VARIANT_BOOL *enabled) = 0;
    virtual HRESULT WINAPI get_mimeTypes(IHTMLMimeTypesCollection **p) = 0;
    virtual HRESULT WINAPI get_plugins(IHTMLPluginsCollection **p) = 0;
    virtual HRESULT WINAPI get_cookieEnabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_opsProfile(IHTMLOpsProfile **p) = 0;
    virtual HRESULT WINAPI toString(BSTR *string) = 0;
    virtual HRESULT WINAPI get_cpuClass(BSTR *p) = 0;
    virtual HRESULT WINAPI get_systemLanguage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_browserLanguage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_userLanguage(BSTR *p) = 0;
    virtual HRESULT WINAPI get_platform(BSTR *p) = 0;
    virtual HRESULT WINAPI get_appMinorVersion(BSTR *p) = 0;
    virtual HRESULT WINAPI get_connectionSpeed(long *p) = 0;
    virtual HRESULT WINAPI get_onLine(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_userProfile(IHTMLOpsProfile **p) = 0;
  };
#else
  typedef struct IOmNavigatorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IOmNavigator *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IOmNavigator *This);
      ULONG (WINAPI *Release)(IOmNavigator *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IOmNavigator *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IOmNavigator *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IOmNavigator *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IOmNavigator *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_appCodeName)(IOmNavigator *This,BSTR *p);
      HRESULT (WINAPI *get_appName)(IOmNavigator *This,BSTR *p);
      HRESULT (WINAPI *get_appVersion)(IOmNavigator *This,BSTR *p);
      HRESULT (WINAPI *get_userAgent)(IOmNavigator *This,BSTR *p);
      HRESULT (WINAPI *javaEnabled)(IOmNavigator *This,VARIANT_BOOL *enabled);
      HRESULT (WINAPI *taintEnabled)(IOmNavigator *This,VARIANT_BOOL *enabled);
      HRESULT (WINAPI *get_mimeTypes)(IOmNavigator *This,IHTMLMimeTypesCollection **p);
      HRESULT (WINAPI *get_plugins)(IOmNavigator *This,IHTMLPluginsCollection **p);
      HRESULT (WINAPI *get_cookieEnabled)(IOmNavigator *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_opsProfile)(IOmNavigator *This,IHTMLOpsProfile **p);
      HRESULT (WINAPI *toString)(IOmNavigator *This,BSTR *string);
      HRESULT (WINAPI *get_cpuClass)(IOmNavigator *This,BSTR *p);
      HRESULT (WINAPI *get_systemLanguage)(IOmNavigator *This,BSTR *p);
      HRESULT (WINAPI *get_browserLanguage)(IOmNavigator *This,BSTR *p);
      HRESULT (WINAPI *get_userLanguage)(IOmNavigator *This,BSTR *p);
      HRESULT (WINAPI *get_platform)(IOmNavigator *This,BSTR *p);
      HRESULT (WINAPI *get_appMinorVersion)(IOmNavigator *This,BSTR *p);
      HRESULT (WINAPI *get_connectionSpeed)(IOmNavigator *This,long *p);
      HRESULT (WINAPI *get_onLine)(IOmNavigator *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_userProfile)(IOmNavigator *This,IHTMLOpsProfile **p);
    END_INTERFACE
  } IOmNavigatorVtbl;
  interface IOmNavigator {
    CONST_VTBL struct IOmNavigatorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IOmNavigator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IOmNavigator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IOmNavigator_Release(This) (This)->lpVtbl->Release(This)
#define IOmNavigator_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IOmNavigator_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IOmNavigator_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IOmNavigator_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IOmNavigator_get_appCodeName(This,p) (This)->lpVtbl->get_appCodeName(This,p)
#define IOmNavigator_get_appName(This,p) (This)->lpVtbl->get_appName(This,p)
#define IOmNavigator_get_appVersion(This,p) (This)->lpVtbl->get_appVersion(This,p)
#define IOmNavigator_get_userAgent(This,p) (This)->lpVtbl->get_userAgent(This,p)
#define IOmNavigator_javaEnabled(This,enabled) (This)->lpVtbl->javaEnabled(This,enabled)
#define IOmNavigator_taintEnabled(This,enabled) (This)->lpVtbl->taintEnabled(This,enabled)
#define IOmNavigator_get_mimeTypes(This,p) (This)->lpVtbl->get_mimeTypes(This,p)
#define IOmNavigator_get_plugins(This,p) (This)->lpVtbl->get_plugins(This,p)
#define IOmNavigator_get_cookieEnabled(This,p) (This)->lpVtbl->get_cookieEnabled(This,p)
#define IOmNavigator_get_opsProfile(This,p) (This)->lpVtbl->get_opsProfile(This,p)
#define IOmNavigator_toString(This,string) (This)->lpVtbl->toString(This,string)
#define IOmNavigator_get_cpuClass(This,p) (This)->lpVtbl->get_cpuClass(This,p)
#define IOmNavigator_get_systemLanguage(This,p) (This)->lpVtbl->get_systemLanguage(This,p)
#define IOmNavigator_get_browserLanguage(This,p) (This)->lpVtbl->get_browserLanguage(This,p)
#define IOmNavigator_get_userLanguage(This,p) (This)->lpVtbl->get_userLanguage(This,p)
#define IOmNavigator_get_platform(This,p) (This)->lpVtbl->get_platform(This,p)
#define IOmNavigator_get_appMinorVersion(This,p) (This)->lpVtbl->get_appMinorVersion(This,p)
#define IOmNavigator_get_connectionSpeed(This,p) (This)->lpVtbl->get_connectionSpeed(This,p)
#define IOmNavigator_get_onLine(This,p) (This)->lpVtbl->get_onLine(This,p)
#define IOmNavigator_get_userProfile(This,p) (This)->lpVtbl->get_userProfile(This,p)
#endif
#endif
  HRESULT WINAPI IOmNavigator_get_appCodeName_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_appCodeName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_appName_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_appName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_appVersion_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_appVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_userAgent_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_userAgent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_javaEnabled_Proxy(IOmNavigator *This,VARIANT_BOOL *enabled);
  void __RPC_STUB IOmNavigator_javaEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_taintEnabled_Proxy(IOmNavigator *This,VARIANT_BOOL *enabled);
  void __RPC_STUB IOmNavigator_taintEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_mimeTypes_Proxy(IOmNavigator *This,IHTMLMimeTypesCollection **p);
  void __RPC_STUB IOmNavigator_get_mimeTypes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_plugins_Proxy(IOmNavigator *This,IHTMLPluginsCollection **p);
  void __RPC_STUB IOmNavigator_get_plugins_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_cookieEnabled_Proxy(IOmNavigator *This,VARIANT_BOOL *p);
  void __RPC_STUB IOmNavigator_get_cookieEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_opsProfile_Proxy(IOmNavigator *This,IHTMLOpsProfile **p);
  void __RPC_STUB IOmNavigator_get_opsProfile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_toString_Proxy(IOmNavigator *This,BSTR *string);
  void __RPC_STUB IOmNavigator_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_cpuClass_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_cpuClass_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_systemLanguage_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_systemLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_browserLanguage_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_browserLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_userLanguage_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_userLanguage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_platform_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_platform_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_appMinorVersion_Proxy(IOmNavigator *This,BSTR *p);
  void __RPC_STUB IOmNavigator_get_appMinorVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_connectionSpeed_Proxy(IOmNavigator *This,long *p);
  void __RPC_STUB IOmNavigator_get_connectionSpeed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_onLine_Proxy(IOmNavigator *This,VARIANT_BOOL *p);
  void __RPC_STUB IOmNavigator_get_onLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IOmNavigator_get_userProfile_Proxy(IOmNavigator *This,IHTMLOpsProfile **p);
  void __RPC_STUB IOmNavigator_get_userProfile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLocation_INTERFACE_DEFINED__
#define __IHTMLLocation_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLocation;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLLocation : public IDispatch {
  public:
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_protocol(BSTR v) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI put_host(BSTR v) = 0;
    virtual HRESULT WINAPI get_host(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hostname(BSTR v) = 0;
    virtual HRESULT WINAPI get_hostname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_port(BSTR v) = 0;
    virtual HRESULT WINAPI get_port(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pathname(BSTR v) = 0;
    virtual HRESULT WINAPI get_pathname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_search(BSTR v) = 0;
    virtual HRESULT WINAPI get_search(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hash(BSTR v) = 0;
    virtual HRESULT WINAPI get_hash(BSTR *p) = 0;
    virtual HRESULT WINAPI reload(VARIANT_BOOL flag = 0) = 0;
    virtual HRESULT WINAPI replace(BSTR bstr) = 0;
    virtual HRESULT WINAPI assign(BSTR bstr) = 0;
    virtual HRESULT WINAPI toString(BSTR *string) = 0;
  };
#else
  typedef struct IHTMLLocationVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLLocation *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLLocation *This);
      ULONG (WINAPI *Release)(IHTMLLocation *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLLocation *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLLocation *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLLocation *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLLocation *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_href)(IHTMLLocation *This,BSTR v);
      HRESULT (WINAPI *get_href)(IHTMLLocation *This,BSTR *p);
      HRESULT (WINAPI *put_protocol)(IHTMLLocation *This,BSTR v);
      HRESULT (WINAPI *get_protocol)(IHTMLLocation *This,BSTR *p);
      HRESULT (WINAPI *put_host)(IHTMLLocation *This,BSTR v);
      HRESULT (WINAPI *get_host)(IHTMLLocation *This,BSTR *p);
      HRESULT (WINAPI *put_hostname)(IHTMLLocation *This,BSTR v);
      HRESULT (WINAPI *get_hostname)(IHTMLLocation *This,BSTR *p);
      HRESULT (WINAPI *put_port)(IHTMLLocation *This,BSTR v);
      HRESULT (WINAPI *get_port)(IHTMLLocation *This,BSTR *p);
      HRESULT (WINAPI *put_pathname)(IHTMLLocation *This,BSTR v);
      HRESULT (WINAPI *get_pathname)(IHTMLLocation *This,BSTR *p);
      HRESULT (WINAPI *put_search)(IHTMLLocation *This,BSTR v);
      HRESULT (WINAPI *get_search)(IHTMLLocation *This,BSTR *p);
      HRESULT (WINAPI *put_hash)(IHTMLLocation *This,BSTR v);
      HRESULT (WINAPI *get_hash)(IHTMLLocation *This,BSTR *p);
      HRESULT (WINAPI *reload)(IHTMLLocation *This,VARIANT_BOOL flag);
      HRESULT (WINAPI *replace)(IHTMLLocation *This,BSTR bstr);
      HRESULT (WINAPI *assign)(IHTMLLocation *This,BSTR bstr);
      HRESULT (WINAPI *toString)(IHTMLLocation *This,BSTR *string);
    END_INTERFACE
  } IHTMLLocationVtbl;
  interface IHTMLLocation {
    CONST_VTBL struct IHTMLLocationVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLLocation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLLocation_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLLocation_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLLocation_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLLocation_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLLocation_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLLocation_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLLocation_put_href(This,v) (This)->lpVtbl->put_href(This,v)
#define IHTMLLocation_get_href(This,p) (This)->lpVtbl->get_href(This,p)
#define IHTMLLocation_put_protocol(This,v) (This)->lpVtbl->put_protocol(This,v)
#define IHTMLLocation_get_protocol(This,p) (This)->lpVtbl->get_protocol(This,p)
#define IHTMLLocation_put_host(This,v) (This)->lpVtbl->put_host(This,v)
#define IHTMLLocation_get_host(This,p) (This)->lpVtbl->get_host(This,p)
#define IHTMLLocation_put_hostname(This,v) (This)->lpVtbl->put_hostname(This,v)
#define IHTMLLocation_get_hostname(This,p) (This)->lpVtbl->get_hostname(This,p)
#define IHTMLLocation_put_port(This,v) (This)->lpVtbl->put_port(This,v)
#define IHTMLLocation_get_port(This,p) (This)->lpVtbl->get_port(This,p)
#define IHTMLLocation_put_pathname(This,v) (This)->lpVtbl->put_pathname(This,v)
#define IHTMLLocation_get_pathname(This,p) (This)->lpVtbl->get_pathname(This,p)
#define IHTMLLocation_put_search(This,v) (This)->lpVtbl->put_search(This,v)
#define IHTMLLocation_get_search(This,p) (This)->lpVtbl->get_search(This,p)
#define IHTMLLocation_put_hash(This,v) (This)->lpVtbl->put_hash(This,v)
#define IHTMLLocation_get_hash(This,p) (This)->lpVtbl->get_hash(This,p)
#define IHTMLLocation_reload(This,flag) (This)->lpVtbl->reload(This,flag)
#define IHTMLLocation_replace(This,bstr) (This)->lpVtbl->replace(This,bstr)
#define IHTMLLocation_assign(This,bstr) (This)->lpVtbl->assign(This,bstr)
#define IHTMLLocation_toString(This,string) (This)->lpVtbl->toString(This,string)
#endif
#endif
  HRESULT WINAPI IHTMLLocation_put_href_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_href_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_protocol_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_protocol_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_host_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_host_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_hostname_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_hostname_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_port_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_port_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_pathname_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_pathname_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_search_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_search_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_put_hash_Proxy(IHTMLLocation *This,BSTR v);
  void __RPC_STUB IHTMLLocation_put_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_get_hash_Proxy(IHTMLLocation *This,BSTR *p);
  void __RPC_STUB IHTMLLocation_get_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_reload_Proxy(IHTMLLocation *This,VARIANT_BOOL flag);
  void __RPC_STUB IHTMLLocation_reload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_replace_Proxy(IHTMLLocation *This,BSTR bstr);
  void __RPC_STUB IHTMLLocation_replace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_assign_Proxy(IHTMLLocation *This,BSTR bstr);
  void __RPC_STUB IHTMLLocation_assign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLocation_toString_Proxy(IHTMLLocation *This,BSTR *string);
  void __RPC_STUB IHTMLLocation_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
  EXTERN_C const CLSID CLSID_HTMLHistory;
#ifdef __cplusplus
  class HTMLHistory;
#endif
  EXTERN_C const CLSID CLSID_CMimeTypes;
#ifdef __cplusplus
  class CMimeTypes;
#endif
  EXTERN_C const CLSID CLSID_CPlugins;
#ifdef __cplusplus
  class CPlugins;
#endif
  EXTERN_C const CLSID CLSID_COpsProfile;
#ifdef __cplusplus
  class COpsProfile;
#endif
  EXTERN_C const CLSID CLSID_HTMLNavigator;
#ifdef __cplusplus
  class HTMLNavigator;
#endif
  EXTERN_C const CLSID CLSID_HTMLLocation;
#ifdef __cplusplus
  class HTMLLocation;
#endif

#ifndef __IHTMLBookmarkCollection_INTERFACE_DEFINED__
#define __IHTMLBookmarkCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBookmarkCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLBookmarkCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(long index,VARIANT *pVarBookmark) = 0;
  };
#else
  typedef struct IHTMLBookmarkCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLBookmarkCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLBookmarkCollection *This);
      ULONG (WINAPI *Release)(IHTMLBookmarkCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLBookmarkCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLBookmarkCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLBookmarkCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLBookmarkCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLBookmarkCollection *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLBookmarkCollection *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLBookmarkCollection *This,long index,VARIANT *pVarBookmark);
    END_INTERFACE
  } IHTMLBookmarkCollectionVtbl;
  interface IHTMLBookmarkCollection {
    CONST_VTBL struct IHTMLBookmarkCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLBookmarkCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLBookmarkCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLBookmarkCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLBookmarkCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLBookmarkCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLBookmarkCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLBookmarkCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLBookmarkCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLBookmarkCollection_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLBookmarkCollection_item(This,index,pVarBookmark) (This)->lpVtbl->item(This,index,pVarBookmark)
#endif
#endif
  HRESULT WINAPI IHTMLBookmarkCollection_get_length_Proxy(IHTMLBookmarkCollection *This,long *p);
  void __RPC_STUB IHTMLBookmarkCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBookmarkCollection_get__newEnum_Proxy(IHTMLBookmarkCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLBookmarkCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBookmarkCollection_item_Proxy(IHTMLBookmarkCollection *This,long index,VARIANT *pVarBookmark);
  void __RPC_STUB IHTMLBookmarkCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDataTransfer_INTERFACE_DEFINED__
#define __IHTMLDataTransfer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDataTransfer;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDataTransfer : public IDispatch {
  public:
    virtual HRESULT WINAPI setData(BSTR format,VARIANT *data,VARIANT_BOOL *pret) = 0;
    virtual HRESULT WINAPI getData(BSTR format,VARIANT *pvarRet) = 0;
    virtual HRESULT WINAPI clearData(BSTR format,VARIANT_BOOL *pret) = 0;
    virtual HRESULT WINAPI put_dropEffect(BSTR v) = 0;
    virtual HRESULT WINAPI get_dropEffect(BSTR *p) = 0;
    virtual HRESULT WINAPI put_effectAllowed(BSTR v) = 0;
    virtual HRESULT WINAPI get_effectAllowed(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLDataTransferVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDataTransfer *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDataTransfer *This);
      ULONG (WINAPI *Release)(IHTMLDataTransfer *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDataTransfer *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDataTransfer *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDataTransfer *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDataTransfer *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *setData)(IHTMLDataTransfer *This,BSTR format,VARIANT *data,VARIANT_BOOL *pret);
      HRESULT (WINAPI *getData)(IHTMLDataTransfer *This,BSTR format,VARIANT *pvarRet);
      HRESULT (WINAPI *clearData)(IHTMLDataTransfer *This,BSTR format,VARIANT_BOOL *pret);
      HRESULT (WINAPI *put_dropEffect)(IHTMLDataTransfer *This,BSTR v);
      HRESULT (WINAPI *get_dropEffect)(IHTMLDataTransfer *This,BSTR *p);
      HRESULT (WINAPI *put_effectAllowed)(IHTMLDataTransfer *This,BSTR v);
      HRESULT (WINAPI *get_effectAllowed)(IHTMLDataTransfer *This,BSTR *p);
    END_INTERFACE
  } IHTMLDataTransferVtbl;
  interface IHTMLDataTransfer {
    CONST_VTBL struct IHTMLDataTransferVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDataTransfer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDataTransfer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDataTransfer_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDataTransfer_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDataTransfer_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDataTransfer_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDataTransfer_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDataTransfer_setData(This,format,data,pret) (This)->lpVtbl->setData(This,format,data,pret)
#define IHTMLDataTransfer_getData(This,format,pvarRet) (This)->lpVtbl->getData(This,format,pvarRet)
#define IHTMLDataTransfer_clearData(This,format,pret) (This)->lpVtbl->clearData(This,format,pret)
#define IHTMLDataTransfer_put_dropEffect(This,v) (This)->lpVtbl->put_dropEffect(This,v)
#define IHTMLDataTransfer_get_dropEffect(This,p) (This)->lpVtbl->get_dropEffect(This,p)
#define IHTMLDataTransfer_put_effectAllowed(This,v) (This)->lpVtbl->put_effectAllowed(This,v)
#define IHTMLDataTransfer_get_effectAllowed(This,p) (This)->lpVtbl->get_effectAllowed(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLDataTransfer_setData_Proxy(IHTMLDataTransfer *This,BSTR format,VARIANT *data,VARIANT_BOOL *pret);
  void __RPC_STUB IHTMLDataTransfer_setData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_getData_Proxy(IHTMLDataTransfer *This,BSTR format,VARIANT *pvarRet);
  void __RPC_STUB IHTMLDataTransfer_getData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_clearData_Proxy(IHTMLDataTransfer *This,BSTR format,VARIANT_BOOL *pret);
  void __RPC_STUB IHTMLDataTransfer_clearData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_put_dropEffect_Proxy(IHTMLDataTransfer *This,BSTR v);
  void __RPC_STUB IHTMLDataTransfer_put_dropEffect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_get_dropEffect_Proxy(IHTMLDataTransfer *This,BSTR *p);
  void __RPC_STUB IHTMLDataTransfer_get_dropEffect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_put_effectAllowed_Proxy(IHTMLDataTransfer *This,BSTR v);
  void __RPC_STUB IHTMLDataTransfer_put_effectAllowed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDataTransfer_get_effectAllowed_Proxy(IHTMLDataTransfer *This,BSTR *p);
  void __RPC_STUB IHTMLDataTransfer_get_effectAllowed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEventObj2_INTERFACE_DEFINED__
#define __IHTMLEventObj2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEventObj2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLEventObj2 : public IDispatch {
  public:
    virtual HRESULT WINAPI setAttribute(BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags = 1) = 0;
    virtual HRESULT WINAPI getAttribute(BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue) = 0;
    virtual HRESULT WINAPI removeAttribute(BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess) = 0;
    virtual HRESULT WINAPI put_propertyName(BSTR v) = 0;
    virtual HRESULT WINAPI get_propertyName(BSTR *p) = 0;
    virtual HRESULT WINAPI putref_bookmarks(IHTMLBookmarkCollection *v) = 0;
    virtual HRESULT WINAPI get_bookmarks(IHTMLBookmarkCollection **p) = 0;
    virtual HRESULT WINAPI putref_recordset(IDispatch *v) = 0;
    virtual HRESULT WINAPI get_recordset(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_dataFld(BSTR v) = 0;
    virtual HRESULT WINAPI get_dataFld(BSTR *p) = 0;
    virtual HRESULT WINAPI putref_boundElements(IHTMLElementCollection *v) = 0;
    virtual HRESULT WINAPI get_boundElements(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_repeat(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_repeat(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_srcUrn(BSTR v) = 0;
    virtual HRESULT WINAPI get_srcUrn(BSTR *p) = 0;
    virtual HRESULT WINAPI putref_srcElement(IHTMLElement *v) = 0;
    virtual HRESULT WINAPI get_srcElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_altKey(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_altKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_ctrlKey(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_ctrlKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_shiftKey(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_shiftKey(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI putref_fromElement(IHTMLElement *v) = 0;
    virtual HRESULT WINAPI get_fromElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI putref_toElement(IHTMLElement *v) = 0;
    virtual HRESULT WINAPI get_toElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI put_button(long v) = 0;
    virtual HRESULT WINAPI get_button(long *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_qualifier(BSTR v) = 0;
    virtual HRESULT WINAPI get_qualifier(BSTR *p) = 0;
    virtual HRESULT WINAPI put_reason(long v) = 0;
    virtual HRESULT WINAPI get_reason(long *p) = 0;
    virtual HRESULT WINAPI put_x(long v) = 0;
    virtual HRESULT WINAPI get_x(long *p) = 0;
    virtual HRESULT WINAPI put_y(long v) = 0;
    virtual HRESULT WINAPI get_y(long *p) = 0;
    virtual HRESULT WINAPI put_clientX(long v) = 0;
    virtual HRESULT WINAPI get_clientX(long *p) = 0;
    virtual HRESULT WINAPI put_clientY(long v) = 0;
    virtual HRESULT WINAPI get_clientY(long *p) = 0;
    virtual HRESULT WINAPI put_offsetX(long v) = 0;
    virtual HRESULT WINAPI get_offsetX(long *p) = 0;
    virtual HRESULT WINAPI put_offsetY(long v) = 0;
    virtual HRESULT WINAPI get_offsetY(long *p) = 0;
    virtual HRESULT WINAPI put_screenX(long v) = 0;
    virtual HRESULT WINAPI get_screenX(long *p) = 0;
    virtual HRESULT WINAPI put_screenY(long v) = 0;
    virtual HRESULT WINAPI get_screenY(long *p) = 0;
    virtual HRESULT WINAPI putref_srcFilter(IDispatch *v) = 0;
    virtual HRESULT WINAPI get_srcFilter(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_dataTransfer(IHTMLDataTransfer **p) = 0;
  };
#else
  typedef struct IHTMLEventObj2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLEventObj2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLEventObj2 *This);
      ULONG (WINAPI *Release)(IHTMLEventObj2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLEventObj2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLEventObj2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLEventObj2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLEventObj2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *setAttribute)(IHTMLEventObj2 *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
      HRESULT (WINAPI *getAttribute)(IHTMLEventObj2 *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
      HRESULT (WINAPI *removeAttribute)(IHTMLEventObj2 *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
      HRESULT (WINAPI *put_propertyName)(IHTMLEventObj2 *This,BSTR v);
      HRESULT (WINAPI *get_propertyName)(IHTMLEventObj2 *This,BSTR *p);
      HRESULT (WINAPI *putref_bookmarks)(IHTMLEventObj2 *This,IHTMLBookmarkCollection *v);
      HRESULT (WINAPI *get_bookmarks)(IHTMLEventObj2 *This,IHTMLBookmarkCollection **p);
      HRESULT (WINAPI *putref_recordset)(IHTMLEventObj2 *This,IDispatch *v);
      HRESULT (WINAPI *get_recordset)(IHTMLEventObj2 *This,IDispatch **p);
      HRESULT (WINAPI *put_dataFld)(IHTMLEventObj2 *This,BSTR v);
      HRESULT (WINAPI *get_dataFld)(IHTMLEventObj2 *This,BSTR *p);
      HRESULT (WINAPI *putref_boundElements)(IHTMLEventObj2 *This,IHTMLElementCollection *v);
      HRESULT (WINAPI *get_boundElements)(IHTMLEventObj2 *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *put_repeat)(IHTMLEventObj2 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_repeat)(IHTMLEventObj2 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_srcUrn)(IHTMLEventObj2 *This,BSTR v);
      HRESULT (WINAPI *get_srcUrn)(IHTMLEventObj2 *This,BSTR *p);
      HRESULT (WINAPI *putref_srcElement)(IHTMLEventObj2 *This,IHTMLElement *v);
      HRESULT (WINAPI *get_srcElement)(IHTMLEventObj2 *This,IHTMLElement **p);
      HRESULT (WINAPI *put_altKey)(IHTMLEventObj2 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_altKey)(IHTMLEventObj2 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_ctrlKey)(IHTMLEventObj2 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_ctrlKey)(IHTMLEventObj2 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_shiftKey)(IHTMLEventObj2 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_shiftKey)(IHTMLEventObj2 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *putref_fromElement)(IHTMLEventObj2 *This,IHTMLElement *v);
      HRESULT (WINAPI *get_fromElement)(IHTMLEventObj2 *This,IHTMLElement **p);
      HRESULT (WINAPI *putref_toElement)(IHTMLEventObj2 *This,IHTMLElement *v);
      HRESULT (WINAPI *get_toElement)(IHTMLEventObj2 *This,IHTMLElement **p);
      HRESULT (WINAPI *put_button)(IHTMLEventObj2 *This,long v);
      HRESULT (WINAPI *get_button)(IHTMLEventObj2 *This,long *p);
      HRESULT (WINAPI *put_type)(IHTMLEventObj2 *This,BSTR v);
      HRESULT (WINAPI *get_type)(IHTMLEventObj2 *This,BSTR *p);
      HRESULT (WINAPI *put_qualifier)(IHTMLEventObj2 *This,BSTR v);
      HRESULT (WINAPI *get_qualifier)(IHTMLEventObj2 *This,BSTR *p);
      HRESULT (WINAPI *put_reason)(IHTMLEventObj2 *This,long v);
      HRESULT (WINAPI *get_reason)(IHTMLEventObj2 *This,long *p);
      HRESULT (WINAPI *put_x)(IHTMLEventObj2 *This,long v);
      HRESULT (WINAPI *get_x)(IHTMLEventObj2 *This,long *p);
      HRESULT (WINAPI *put_y)(IHTMLEventObj2 *This,long v);
      HRESULT (WINAPI *get_y)(IHTMLEventObj2 *This,long *p);
      HRESULT (WINAPI *put_clientX)(IHTMLEventObj2 *This,long v);
      HRESULT (WINAPI *get_clientX)(IHTMLEventObj2 *This,long *p);
      HRESULT (WINAPI *put_clientY)(IHTMLEventObj2 *This,long v);
      HRESULT (WINAPI *get_clientY)(IHTMLEventObj2 *This,long *p);
      HRESULT (WINAPI *put_offsetX)(IHTMLEventObj2 *This,long v);
      HRESULT (WINAPI *get_offsetX)(IHTMLEventObj2 *This,long *p);
      HRESULT (WINAPI *put_offsetY)(IHTMLEventObj2 *This,long v);
      HRESULT (WINAPI *get_offsetY)(IHTMLEventObj2 *This,long *p);
      HRESULT (WINAPI *put_screenX)(IHTMLEventObj2 *This,long v);
      HRESULT (WINAPI *get_screenX)(IHTMLEventObj2 *This,long *p);
      HRESULT (WINAPI *put_screenY)(IHTMLEventObj2 *This,long v);
      HRESULT (WINAPI *get_screenY)(IHTMLEventObj2 *This,long *p);
      HRESULT (WINAPI *putref_srcFilter)(IHTMLEventObj2 *This,IDispatch *v);
      HRESULT (WINAPI *get_srcFilter)(IHTMLEventObj2 *This,IDispatch **p);
      HRESULT (WINAPI *get_dataTransfer)(IHTMLEventObj2 *This,IHTMLDataTransfer **p);
    END_INTERFACE
  } IHTMLEventObj2Vtbl;
  interface IHTMLEventObj2 {
    CONST_VTBL struct IHTMLEventObj2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLEventObj2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLEventObj2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLEventObj2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLEventObj2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLEventObj2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLEventObj2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLEventObj2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLEventObj2_setAttribute(This,strAttributeName,AttributeValue,lFlags) (This)->lpVtbl->setAttribute(This,strAttributeName,AttributeValue,lFlags)
#define IHTMLEventObj2_getAttribute(This,strAttributeName,lFlags,AttributeValue) (This)->lpVtbl->getAttribute(This,strAttributeName,lFlags,AttributeValue)
#define IHTMLEventObj2_removeAttribute(This,strAttributeName,lFlags,pfSuccess) (This)->lpVtbl->removeAttribute(This,strAttributeName,lFlags,pfSuccess)
#define IHTMLEventObj2_put_propertyName(This,v) (This)->lpVtbl->put_propertyName(This,v)
#define IHTMLEventObj2_get_propertyName(This,p) (This)->lpVtbl->get_propertyName(This,p)
#define IHTMLEventObj2_putref_bookmarks(This,v) (This)->lpVtbl->putref_bookmarks(This,v)
#define IHTMLEventObj2_get_bookmarks(This,p) (This)->lpVtbl->get_bookmarks(This,p)
#define IHTMLEventObj2_putref_recordset(This,v) (This)->lpVtbl->putref_recordset(This,v)
#define IHTMLEventObj2_get_recordset(This,p) (This)->lpVtbl->get_recordset(This,p)
#define IHTMLEventObj2_put_dataFld(This,v) (This)->lpVtbl->put_dataFld(This,v)
#define IHTMLEventObj2_get_dataFld(This,p) (This)->lpVtbl->get_dataFld(This,p)
#define IHTMLEventObj2_putref_boundElements(This,v) (This)->lpVtbl->putref_boundElements(This,v)
#define IHTMLEventObj2_get_boundElements(This,p) (This)->lpVtbl->get_boundElements(This,p)
#define IHTMLEventObj2_put_repeat(This,v) (This)->lpVtbl->put_repeat(This,v)
#define IHTMLEventObj2_get_repeat(This,p) (This)->lpVtbl->get_repeat(This,p)
#define IHTMLEventObj2_put_srcUrn(This,v) (This)->lpVtbl->put_srcUrn(This,v)
#define IHTMLEventObj2_get_srcUrn(This,p) (This)->lpVtbl->get_srcUrn(This,p)
#define IHTMLEventObj2_putref_srcElement(This,v) (This)->lpVtbl->putref_srcElement(This,v)
#define IHTMLEventObj2_get_srcElement(This,p) (This)->lpVtbl->get_srcElement(This,p)
#define IHTMLEventObj2_put_altKey(This,v) (This)->lpVtbl->put_altKey(This,v)
#define IHTMLEventObj2_get_altKey(This,p) (This)->lpVtbl->get_altKey(This,p)
#define IHTMLEventObj2_put_ctrlKey(This,v) (This)->lpVtbl->put_ctrlKey(This,v)
#define IHTMLEventObj2_get_ctrlKey(This,p) (This)->lpVtbl->get_ctrlKey(This,p)
#define IHTMLEventObj2_put_shiftKey(This,v) (This)->lpVtbl->put_shiftKey(This,v)
#define IHTMLEventObj2_get_shiftKey(This,p) (This)->lpVtbl->get_shiftKey(This,p)
#define IHTMLEventObj2_putref_fromElement(This,v) (This)->lpVtbl->putref_fromElement(This,v)
#define IHTMLEventObj2_get_fromElement(This,p) (This)->lpVtbl->get_fromElement(This,p)
#define IHTMLEventObj2_putref_toElement(This,v) (This)->lpVtbl->putref_toElement(This,v)
#define IHTMLEventObj2_get_toElement(This,p) (This)->lpVtbl->get_toElement(This,p)
#define IHTMLEventObj2_put_button(This,v) (This)->lpVtbl->put_button(This,v)
#define IHTMLEventObj2_get_button(This,p) (This)->lpVtbl->get_button(This,p)
#define IHTMLEventObj2_put_type(This,v) (This)->lpVtbl->put_type(This,v)
#define IHTMLEventObj2_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLEventObj2_put_qualifier(This,v) (This)->lpVtbl->put_qualifier(This,v)
#define IHTMLEventObj2_get_qualifier(This,p) (This)->lpVtbl->get_qualifier(This,p)
#define IHTMLEventObj2_put_reason(This,v) (This)->lpVtbl->put_reason(This,v)
#define IHTMLEventObj2_get_reason(This,p) (This)->lpVtbl->get_reason(This,p)
#define IHTMLEventObj2_put_x(This,v) (This)->lpVtbl->put_x(This,v)
#define IHTMLEventObj2_get_x(This,p) (This)->lpVtbl->get_x(This,p)
#define IHTMLEventObj2_put_y(This,v) (This)->lpVtbl->put_y(This,v)
#define IHTMLEventObj2_get_y(This,p) (This)->lpVtbl->get_y(This,p)
#define IHTMLEventObj2_put_clientX(This,v) (This)->lpVtbl->put_clientX(This,v)
#define IHTMLEventObj2_get_clientX(This,p) (This)->lpVtbl->get_clientX(This,p)
#define IHTMLEventObj2_put_clientY(This,v) (This)->lpVtbl->put_clientY(This,v)
#define IHTMLEventObj2_get_clientY(This,p) (This)->lpVtbl->get_clientY(This,p)
#define IHTMLEventObj2_put_offsetX(This,v) (This)->lpVtbl->put_offsetX(This,v)
#define IHTMLEventObj2_get_offsetX(This,p) (This)->lpVtbl->get_offsetX(This,p)
#define IHTMLEventObj2_put_offsetY(This,v) (This)->lpVtbl->put_offsetY(This,v)
#define IHTMLEventObj2_get_offsetY(This,p) (This)->lpVtbl->get_offsetY(This,p)
#define IHTMLEventObj2_put_screenX(This,v) (This)->lpVtbl->put_screenX(This,v)
#define IHTMLEventObj2_get_screenX(This,p) (This)->lpVtbl->get_screenX(This,p)
#define IHTMLEventObj2_put_screenY(This,v) (This)->lpVtbl->put_screenY(This,v)
#define IHTMLEventObj2_get_screenY(This,p) (This)->lpVtbl->get_screenY(This,p)
#define IHTMLEventObj2_putref_srcFilter(This,v) (This)->lpVtbl->putref_srcFilter(This,v)
#define IHTMLEventObj2_get_srcFilter(This,p) (This)->lpVtbl->get_srcFilter(This,p)
#define IHTMLEventObj2_get_dataTransfer(This,p) (This)->lpVtbl->get_dataTransfer(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLEventObj2_setAttribute_Proxy(IHTMLEventObj2 *This,BSTR strAttributeName,VARIANT AttributeValue,LONG lFlags);
  void __RPC_STUB IHTMLEventObj2_setAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_getAttribute_Proxy(IHTMLEventObj2 *This,BSTR strAttributeName,LONG lFlags,VARIANT *AttributeValue);
  void __RPC_STUB IHTMLEventObj2_getAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_removeAttribute_Proxy(IHTMLEventObj2 *This,BSTR strAttributeName,LONG lFlags,VARIANT_BOOL *pfSuccess);
  void __RPC_STUB IHTMLEventObj2_removeAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_propertyName_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_propertyName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_propertyName_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_propertyName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_bookmarks_Proxy(IHTMLEventObj2 *This,IHTMLBookmarkCollection *v);
  void __RPC_STUB IHTMLEventObj2_putref_bookmarks_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_bookmarks_Proxy(IHTMLEventObj2 *This,IHTMLBookmarkCollection **p);
  void __RPC_STUB IHTMLEventObj2_get_bookmarks_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_recordset_Proxy(IHTMLEventObj2 *This,IDispatch *v);
  void __RPC_STUB IHTMLEventObj2_putref_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_recordset_Proxy(IHTMLEventObj2 *This,IDispatch **p);
  void __RPC_STUB IHTMLEventObj2_get_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_dataFld_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_dataFld_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_dataFld_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_dataFld_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_boundElements_Proxy(IHTMLEventObj2 *This,IHTMLElementCollection *v);
  void __RPC_STUB IHTMLEventObj2_putref_boundElements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_boundElements_Proxy(IHTMLEventObj2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLEventObj2_get_boundElements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_repeat_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj2_put_repeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_repeat_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj2_get_repeat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_srcUrn_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_srcUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_srcUrn_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_srcUrn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_srcElement_Proxy(IHTMLEventObj2 *This,IHTMLElement *v);
  void __RPC_STUB IHTMLEventObj2_putref_srcElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_srcElement_Proxy(IHTMLEventObj2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj2_get_srcElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_altKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj2_put_altKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_altKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj2_get_altKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_ctrlKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj2_put_ctrlKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_ctrlKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj2_get_ctrlKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_shiftKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj2_put_shiftKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_shiftKey_Proxy(IHTMLEventObj2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj2_get_shiftKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_fromElement_Proxy(IHTMLEventObj2 *This,IHTMLElement *v);
  void __RPC_STUB IHTMLEventObj2_putref_fromElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_fromElement_Proxy(IHTMLEventObj2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj2_get_fromElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_toElement_Proxy(IHTMLEventObj2 *This,IHTMLElement *v);
  void __RPC_STUB IHTMLEventObj2_putref_toElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_toElement_Proxy(IHTMLEventObj2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLEventObj2_get_toElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_button_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_button_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_button_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_button_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_type_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_type_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_qualifier_Proxy(IHTMLEventObj2 *This,BSTR v);
  void __RPC_STUB IHTMLEventObj2_put_qualifier_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_qualifier_Proxy(IHTMLEventObj2 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj2_get_qualifier_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_reason_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_reason_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_reason_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_reason_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_x_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_x_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_x_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_x_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_y_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_y_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_y_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_y_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_clientX_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_clientX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_clientX_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_clientX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_clientY_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_clientY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_clientY_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_clientY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_offsetX_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_offsetX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_offsetX_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_offsetX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_offsetY_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_offsetY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_offsetY_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_offsetY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_screenX_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_screenX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_screenX_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_screenX_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_put_screenY_Proxy(IHTMLEventObj2 *This,long v);
  void __RPC_STUB IHTMLEventObj2_put_screenY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_screenY_Proxy(IHTMLEventObj2 *This,long *p);
  void __RPC_STUB IHTMLEventObj2_get_screenY_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_putref_srcFilter_Proxy(IHTMLEventObj2 *This,IDispatch *v);
  void __RPC_STUB IHTMLEventObj2_putref_srcFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_srcFilter_Proxy(IHTMLEventObj2 *This,IDispatch **p);
  void __RPC_STUB IHTMLEventObj2_get_srcFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj2_get_dataTransfer_Proxy(IHTMLEventObj2 *This,IHTMLDataTransfer **p);
  void __RPC_STUB IHTMLEventObj2_get_dataTransfer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEventObj3_INTERFACE_DEFINED__
#define __IHTMLEventObj3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEventObj3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLEventObj3 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_contentOverflow(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_shiftLeft(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_shiftLeft(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_altLeft(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_altLeft(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_ctrlLeft(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_ctrlLeft(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_imeCompositionChange(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_imeNotifyCommand(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_imeNotifyData(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_imeRequest(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_imeRequestData(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_keyboardLayout(LONG_PTR *p) = 0;
    virtual HRESULT WINAPI get_behaviorCookie(long *p) = 0;
    virtual HRESULT WINAPI get_behaviorPart(long *p) = 0;
    virtual HRESULT WINAPI get_nextPage(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLEventObj3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLEventObj3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLEventObj3 *This);
      ULONG (WINAPI *Release)(IHTMLEventObj3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLEventObj3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLEventObj3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLEventObj3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLEventObj3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_contentOverflow)(IHTMLEventObj3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_shiftLeft)(IHTMLEventObj3 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_shiftLeft)(IHTMLEventObj3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_altLeft)(IHTMLEventObj3 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_altLeft)(IHTMLEventObj3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_ctrlLeft)(IHTMLEventObj3 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_ctrlLeft)(IHTMLEventObj3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_imeCompositionChange)(IHTMLEventObj3 *This,LONG_PTR *p);
      HRESULT (WINAPI *get_imeNotifyCommand)(IHTMLEventObj3 *This,LONG_PTR *p);
      HRESULT (WINAPI *get_imeNotifyData)(IHTMLEventObj3 *This,LONG_PTR *p);
      HRESULT (WINAPI *get_imeRequest)(IHTMLEventObj3 *This,LONG_PTR *p);
      HRESULT (WINAPI *get_imeRequestData)(IHTMLEventObj3 *This,LONG_PTR *p);
      HRESULT (WINAPI *get_keyboardLayout)(IHTMLEventObj3 *This,LONG_PTR *p);
      HRESULT (WINAPI *get_behaviorCookie)(IHTMLEventObj3 *This,long *p);
      HRESULT (WINAPI *get_behaviorPart)(IHTMLEventObj3 *This,long *p);
      HRESULT (WINAPI *get_nextPage)(IHTMLEventObj3 *This,BSTR *p);
    END_INTERFACE
  } IHTMLEventObj3Vtbl;
  interface IHTMLEventObj3 {
    CONST_VTBL struct IHTMLEventObj3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLEventObj3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLEventObj3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLEventObj3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLEventObj3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLEventObj3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLEventObj3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLEventObj3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLEventObj3_get_contentOverflow(This,p) (This)->lpVtbl->get_contentOverflow(This,p)
#define IHTMLEventObj3_put_shiftLeft(This,v) (This)->lpVtbl->put_shiftLeft(This,v)
#define IHTMLEventObj3_get_shiftLeft(This,p) (This)->lpVtbl->get_shiftLeft(This,p)
#define IHTMLEventObj3_put_altLeft(This,v) (This)->lpVtbl->put_altLeft(This,v)
#define IHTMLEventObj3_get_altLeft(This,p) (This)->lpVtbl->get_altLeft(This,p)
#define IHTMLEventObj3_put_ctrlLeft(This,v) (This)->lpVtbl->put_ctrlLeft(This,v)
#define IHTMLEventObj3_get_ctrlLeft(This,p) (This)->lpVtbl->get_ctrlLeft(This,p)
#define IHTMLEventObj3_get_imeCompositionChange(This,p) (This)->lpVtbl->get_imeCompositionChange(This,p)
#define IHTMLEventObj3_get_imeNotifyCommand(This,p) (This)->lpVtbl->get_imeNotifyCommand(This,p)
#define IHTMLEventObj3_get_imeNotifyData(This,p) (This)->lpVtbl->get_imeNotifyData(This,p)
#define IHTMLEventObj3_get_imeRequest(This,p) (This)->lpVtbl->get_imeRequest(This,p)
#define IHTMLEventObj3_get_imeRequestData(This,p) (This)->lpVtbl->get_imeRequestData(This,p)
#define IHTMLEventObj3_get_keyboardLayout(This,p) (This)->lpVtbl->get_keyboardLayout(This,p)
#define IHTMLEventObj3_get_behaviorCookie(This,p) (This)->lpVtbl->get_behaviorCookie(This,p)
#define IHTMLEventObj3_get_behaviorPart(This,p) (This)->lpVtbl->get_behaviorPart(This,p)
#define IHTMLEventObj3_get_nextPage(This,p) (This)->lpVtbl->get_nextPage(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLEventObj3_get_contentOverflow_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj3_get_contentOverflow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_put_shiftLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj3_put_shiftLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_shiftLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj3_get_shiftLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_put_altLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj3_put_altLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_altLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj3_get_altLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_put_ctrlLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLEventObj3_put_ctrlLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_ctrlLeft_Proxy(IHTMLEventObj3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLEventObj3_get_ctrlLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeCompositionChange_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeCompositionChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeNotifyCommand_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeNotifyCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeNotifyData_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeNotifyData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeRequest_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeRequest_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_imeRequestData_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_imeRequestData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_keyboardLayout_Proxy(IHTMLEventObj3 *This,LONG_PTR *p);
  void __RPC_STUB IHTMLEventObj3_get_keyboardLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_behaviorCookie_Proxy(IHTMLEventObj3 *This,long *p);
  void __RPC_STUB IHTMLEventObj3_get_behaviorCookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_behaviorPart_Proxy(IHTMLEventObj3 *This,long *p);
  void __RPC_STUB IHTMLEventObj3_get_behaviorPart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEventObj3_get_nextPage_Proxy(IHTMLEventObj3 *This,BSTR *p);
  void __RPC_STUB IHTMLEventObj3_get_nextPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEventObj4_INTERFACE_DEFINED__
#define __IHTMLEventObj4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEventObj4;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLEventObj4 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_wheelDelta(long *p) = 0;
  };
#else
  typedef struct IHTMLEventObj4Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLEventObj4 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLEventObj4 *This);
      ULONG (WINAPI *Release)(IHTMLEventObj4 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLEventObj4 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLEventObj4 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLEventObj4 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLEventObj4 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_wheelDelta)(IHTMLEventObj4 *This,long *p);
    END_INTERFACE
  } IHTMLEventObj4Vtbl;
  interface IHTMLEventObj4 {
    CONST_VTBL struct IHTMLEventObj4Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLEventObj4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLEventObj4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLEventObj4_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLEventObj4_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLEventObj4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLEventObj4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLEventObj4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLEventObj4_get_wheelDelta(This,p) (This)->lpVtbl->get_wheelDelta(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLEventObj4_get_wheelDelta_Proxy(IHTMLEventObj4 *This,long *p);
  void __RPC_STUB IHTMLEventObj4_get_wheelDelta_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispCEventObj_DISPINTERFACE_DEFINED__
#define __DispCEventObj_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispCEventObj;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispCEventObj : public IDispatch {
  };
#else
  typedef struct DispCEventObjVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispCEventObj *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispCEventObj *This);
      ULONG (WINAPI *Release)(DispCEventObj *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispCEventObj *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispCEventObj *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispCEventObj *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispCEventObj *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispCEventObjVtbl;
  interface DispCEventObj {
    CONST_VTBL struct DispCEventObjVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispCEventObj_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispCEventObj_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispCEventObj_Release(This) (This)->lpVtbl->Release(This)
#define DispCEventObj_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispCEventObj_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispCEventObj_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispCEventObj_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_CEventObj;
#ifdef __cplusplus
  class CEventObj;
#endif

#ifndef __HTMLWindowEvents2_DISPINTERFACE_DEFINED__
#define __HTMLWindowEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLWindowEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLWindowEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLWindowEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLWindowEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLWindowEvents2 *This);
      ULONG (WINAPI *Release)(HTMLWindowEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLWindowEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLWindowEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLWindowEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLWindowEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLWindowEvents2Vtbl;
  interface HTMLWindowEvents2 {
    CONST_VTBL struct HTMLWindowEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLWindowEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLWindowEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLWindowEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLWindowEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLWindowEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLWindowEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLWindowEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLWindowEvents_DISPINTERFACE_DEFINED__
#define __HTMLWindowEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLWindowEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLWindowEvents : public IDispatch {
  };
#else
  typedef struct HTMLWindowEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLWindowEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLWindowEvents *This);
      ULONG (WINAPI *Release)(HTMLWindowEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLWindowEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLWindowEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLWindowEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLWindowEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLWindowEventsVtbl;
  interface HTMLWindowEvents {
    CONST_VTBL struct HTMLWindowEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLWindowEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLWindowEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLWindowEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLWindowEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLWindowEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLWindowEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLWindowEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLDocument2_INTERFACE_DEFINED__
#define __IHTMLDocument2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDocument2 : public IHTMLDocument {
  public:
    virtual HRESULT WINAPI get_all(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_body(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_activeElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_images(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_applets(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_links(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_forms(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_anchors(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_title(BSTR v) = 0;
    virtual HRESULT WINAPI get_title(BSTR *p) = 0;
    virtual HRESULT WINAPI get_scripts(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_designMode(BSTR v) = 0;
    virtual HRESULT WINAPI get_designMode(BSTR *p) = 0;
    virtual HRESULT WINAPI get_selection(IHTMLSelectionObject **p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI get_frames(IHTMLFramesCollection2 **p) = 0;
    virtual HRESULT WINAPI get_embeds(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_plugins(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_alinkColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_alinkColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_fgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_fgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_linkColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_linkColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_vlinkColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_vlinkColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_referrer(BSTR *p) = 0;
    virtual HRESULT WINAPI get_location(IHTMLLocation **p) = 0;
    virtual HRESULT WINAPI get_lastModified(BSTR *p) = 0;
    virtual HRESULT WINAPI put_URL(BSTR v) = 0;
    virtual HRESULT WINAPI get_URL(BSTR *p) = 0;
    virtual HRESULT WINAPI put_domain(BSTR v) = 0;
    virtual HRESULT WINAPI get_domain(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cookie(BSTR v) = 0;
    virtual HRESULT WINAPI get_cookie(BSTR *p) = 0;
    virtual HRESULT WINAPI put_expando(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_expando(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
    virtual HRESULT WINAPI put_defaultCharset(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultCharset(BSTR *p) = 0;
    virtual HRESULT WINAPI get_mimeType(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileSize(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileCreatedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileModifiedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_fileUpdatedDate(BSTR *p) = 0;
    virtual HRESULT WINAPI get_security(BSTR *p) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI get_nameProp(BSTR *p) = 0;
    virtual HRESULT WINAPI write(SAFEARRAY *psarray) = 0;
    virtual HRESULT WINAPI writeln(SAFEARRAY *psarray) = 0;
    virtual HRESULT WINAPI open(BSTR url,VARIANT name,VARIANT features,VARIANT replace,IDispatch **pomWindowResult) = 0;
    virtual HRESULT WINAPI close(void) = 0;
    virtual HRESULT WINAPI clear(void) = 0;
    virtual HRESULT WINAPI queryCommandSupported(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandEnabled(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandState(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandIndeterm(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI queryCommandText(BSTR cmdID,BSTR *pcmdText) = 0;
    virtual HRESULT WINAPI queryCommandValue(BSTR cmdID,VARIANT *pcmdValue) = 0;
    virtual HRESULT WINAPI execCommand(BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI execCommandShowHelp(BSTR cmdID,VARIANT_BOOL *pfRet) = 0;
    virtual HRESULT WINAPI createElement(BSTR eTag,IHTMLElement **newElem) = 0;
    virtual HRESULT WINAPI put_onhelp(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onhelp(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onclick(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onclick(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondblclick(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondblclick(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeyup(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeyup(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeydown(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeydown(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onkeypress(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onkeypress(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseup(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseup(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmousedown(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousedown(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmousemove(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousemove(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseout(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseout(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onmouseover(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmouseover(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowexit(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowexit(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowenter(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowenter(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondragstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondragstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onselectstart(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselectstart(VARIANT *p) = 0;
    virtual HRESULT WINAPI elementFromPoint(long x,long y,IHTMLElement **elementHit) = 0;
    virtual HRESULT WINAPI get_parentWindow(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI get_styleSheets(IHTMLStyleSheetsCollection **p) = 0;
    virtual HRESULT WINAPI put_onbeforeupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerrorupdate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerrorupdate(VARIANT *p) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI createStyleSheet(BSTR bstrHref,long lIndex,IHTMLStyleSheet **ppnewStyleSheet) = 0;
  };
#else
  typedef struct IHTMLDocument2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDocument2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDocument2 *This);
      ULONG (WINAPI *Release)(IHTMLDocument2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDocument2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDocument2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDocument2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDocument2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_Script)(IHTMLDocument2 *This,IDispatch **p);
      HRESULT (WINAPI *get_all)(IHTMLDocument2 *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *get_body)(IHTMLDocument2 *This,IHTMLElement **p);
      HRESULT (WINAPI *get_activeElement)(IHTMLDocument2 *This,IHTMLElement **p);
      HRESULT (WINAPI *get_images)(IHTMLDocument2 *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *get_applets)(IHTMLDocument2 *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *get_links)(IHTMLDocument2 *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *get_forms)(IHTMLDocument2 *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *get_anchors)(IHTMLDocument2 *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *put_title)(IHTMLDocument2 *This,BSTR v);
      HRESULT (WINAPI *get_title)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *get_scripts)(IHTMLDocument2 *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *put_designMode)(IHTMLDocument2 *This,BSTR v);
      HRESULT (WINAPI *get_designMode)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *get_selection)(IHTMLDocument2 *This,IHTMLSelectionObject **p);
      HRESULT (WINAPI *get_readyState)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *get_frames)(IHTMLDocument2 *This,IHTMLFramesCollection2 **p);
      HRESULT (WINAPI *get_embeds)(IHTMLDocument2 *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *get_plugins)(IHTMLDocument2 *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *put_alinkColor)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_alinkColor)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_bgColor)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_bgColor)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_fgColor)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_fgColor)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_linkColor)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_linkColor)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_vlinkColor)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_vlinkColor)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *get_referrer)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *get_location)(IHTMLDocument2 *This,IHTMLLocation **p);
      HRESULT (WINAPI *get_lastModified)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *put_URL)(IHTMLDocument2 *This,BSTR v);
      HRESULT (WINAPI *get_URL)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *put_domain)(IHTMLDocument2 *This,BSTR v);
      HRESULT (WINAPI *get_domain)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *put_cookie)(IHTMLDocument2 *This,BSTR v);
      HRESULT (WINAPI *get_cookie)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *put_expando)(IHTMLDocument2 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_expando)(IHTMLDocument2 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_charset)(IHTMLDocument2 *This,BSTR v);
      HRESULT (WINAPI *get_charset)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *put_defaultCharset)(IHTMLDocument2 *This,BSTR v);
      HRESULT (WINAPI *get_defaultCharset)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *get_mimeType)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *get_fileSize)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *get_fileCreatedDate)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *get_fileModifiedDate)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *get_fileUpdatedDate)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *get_security)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *get_protocol)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *get_nameProp)(IHTMLDocument2 *This,BSTR *p);
      HRESULT (WINAPI *write)(IHTMLDocument2 *This,SAFEARRAY *psarray);
      HRESULT (WINAPI *writeln)(IHTMLDocument2 *This,SAFEARRAY *psarray);
      HRESULT (WINAPI *open)(IHTMLDocument2 *This,BSTR url,VARIANT name,VARIANT features,VARIANT replace,IDispatch **pomWindowResult);
      HRESULT (WINAPI *close)(IHTMLDocument2 *This);
      HRESULT (WINAPI *clear)(IHTMLDocument2 *This);
      HRESULT (WINAPI *queryCommandSupported)(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *queryCommandEnabled)(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *queryCommandState)(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *queryCommandIndeterm)(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *queryCommandText)(IHTMLDocument2 *This,BSTR cmdID,BSTR *pcmdText);
      HRESULT (WINAPI *queryCommandValue)(IHTMLDocument2 *This,BSTR cmdID,VARIANT *pcmdValue);
      HRESULT (WINAPI *execCommand)(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *execCommandShowHelp)(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
      HRESULT (WINAPI *createElement)(IHTMLDocument2 *This,BSTR eTag,IHTMLElement **newElem);
      HRESULT (WINAPI *put_onhelp)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onhelp)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onclick)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onclick)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondblclick)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_ondblclick)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onkeyup)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onkeyup)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onkeydown)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onkeydown)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onkeypress)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onkeypress)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onmouseup)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onmouseup)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onmousedown)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onmousedown)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onmousemove)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onmousemove)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onmouseout)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onmouseout)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onmouseover)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onmouseover)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onreadystatechange)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onreadystatechange)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onafterupdate)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onafterupdate)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onrowexit)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onrowexit)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onrowenter)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onrowenter)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondragstart)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_ondragstart)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onselectstart)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onselectstart)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *elementFromPoint)(IHTMLDocument2 *This,long x,long y,IHTMLElement **elementHit);
      HRESULT (WINAPI *get_parentWindow)(IHTMLDocument2 *This,IHTMLWindow2 **p);
      HRESULT (WINAPI *get_styleSheets)(IHTMLDocument2 *This,IHTMLStyleSheetsCollection **p);
      HRESULT (WINAPI *put_onbeforeupdate)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforeupdate)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onerrorupdate)(IHTMLDocument2 *This,VARIANT v);
      HRESULT (WINAPI *get_onerrorupdate)(IHTMLDocument2 *This,VARIANT *p);
      HRESULT (WINAPI *toString)(IHTMLDocument2 *This,BSTR *String);
      HRESULT (WINAPI *createStyleSheet)(IHTMLDocument2 *This,BSTR bstrHref,long lIndex,IHTMLStyleSheet **ppnewStyleSheet);
    END_INTERFACE
  } IHTMLDocument2Vtbl;
  interface IHTMLDocument2 {
    CONST_VTBL struct IHTMLDocument2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDocument2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDocument2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDocument2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDocument2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDocument2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDocument2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDocument2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDocument2_get_Script(This,p) (This)->lpVtbl->get_Script(This,p)
#define IHTMLDocument2_get_all(This,p) (This)->lpVtbl->get_all(This,p)
#define IHTMLDocument2_get_body(This,p) (This)->lpVtbl->get_body(This,p)
#define IHTMLDocument2_get_activeElement(This,p) (This)->lpVtbl->get_activeElement(This,p)
#define IHTMLDocument2_get_images(This,p) (This)->lpVtbl->get_images(This,p)
#define IHTMLDocument2_get_applets(This,p) (This)->lpVtbl->get_applets(This,p)
#define IHTMLDocument2_get_links(This,p) (This)->lpVtbl->get_links(This,p)
#define IHTMLDocument2_get_forms(This,p) (This)->lpVtbl->get_forms(This,p)
#define IHTMLDocument2_get_anchors(This,p) (This)->lpVtbl->get_anchors(This,p)
#define IHTMLDocument2_put_title(This,v) (This)->lpVtbl->put_title(This,v)
#define IHTMLDocument2_get_title(This,p) (This)->lpVtbl->get_title(This,p)
#define IHTMLDocument2_get_scripts(This,p) (This)->lpVtbl->get_scripts(This,p)
#define IHTMLDocument2_put_designMode(This,v) (This)->lpVtbl->put_designMode(This,v)
#define IHTMLDocument2_get_designMode(This,p) (This)->lpVtbl->get_designMode(This,p)
#define IHTMLDocument2_get_selection(This,p) (This)->lpVtbl->get_selection(This,p)
#define IHTMLDocument2_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IHTMLDocument2_get_frames(This,p) (This)->lpVtbl->get_frames(This,p)
#define IHTMLDocument2_get_embeds(This,p) (This)->lpVtbl->get_embeds(This,p)
#define IHTMLDocument2_get_plugins(This,p) (This)->lpVtbl->get_plugins(This,p)
#define IHTMLDocument2_put_alinkColor(This,v) (This)->lpVtbl->put_alinkColor(This,v)
#define IHTMLDocument2_get_alinkColor(This,p) (This)->lpVtbl->get_alinkColor(This,p)
#define IHTMLDocument2_put_bgColor(This,v) (This)->lpVtbl->put_bgColor(This,v)
#define IHTMLDocument2_get_bgColor(This,p) (This)->lpVtbl->get_bgColor(This,p)
#define IHTMLDocument2_put_fgColor(This,v) (This)->lpVtbl->put_fgColor(This,v)
#define IHTMLDocument2_get_fgColor(This,p) (This)->lpVtbl->get_fgColor(This,p)
#define IHTMLDocument2_put_linkColor(This,v) (This)->lpVtbl->put_linkColor(This,v)
#define IHTMLDocument2_get_linkColor(This,p) (This)->lpVtbl->get_linkColor(This,p)
#define IHTMLDocument2_put_vlinkColor(This,v) (This)->lpVtbl->put_vlinkColor(This,v)
#define IHTMLDocument2_get_vlinkColor(This,p) (This)->lpVtbl->get_vlinkColor(This,p)
#define IHTMLDocument2_get_referrer(This,p) (This)->lpVtbl->get_referrer(This,p)
#define IHTMLDocument2_get_location(This,p) (This)->lpVtbl->get_location(This,p)
#define IHTMLDocument2_get_lastModified(This,p) (This)->lpVtbl->get_lastModified(This,p)
#define IHTMLDocument2_put_URL(This,v) (This)->lpVtbl->put_URL(This,v)
#define IHTMLDocument2_get_URL(This,p) (This)->lpVtbl->get_URL(This,p)
#define IHTMLDocument2_put_domain(This,v) (This)->lpVtbl->put_domain(This,v)
#define IHTMLDocument2_get_domain(This,p) (This)->lpVtbl->get_domain(This,p)
#define IHTMLDocument2_put_cookie(This,v) (This)->lpVtbl->put_cookie(This,v)
#define IHTMLDocument2_get_cookie(This,p) (This)->lpVtbl->get_cookie(This,p)
#define IHTMLDocument2_put_expando(This,v) (This)->lpVtbl->put_expando(This,v)
#define IHTMLDocument2_get_expando(This,p) (This)->lpVtbl->get_expando(This,p)
#define IHTMLDocument2_put_charset(This,v) (This)->lpVtbl->put_charset(This,v)
#define IHTMLDocument2_get_charset(This,p) (This)->lpVtbl->get_charset(This,p)
#define IHTMLDocument2_put_defaultCharset(This,v) (This)->lpVtbl->put_defaultCharset(This,v)
#define IHTMLDocument2_get_defaultCharset(This,p) (This)->lpVtbl->get_defaultCharset(This,p)
#define IHTMLDocument2_get_mimeType(This,p) (This)->lpVtbl->get_mimeType(This,p)
#define IHTMLDocument2_get_fileSize(This,p) (This)->lpVtbl->get_fileSize(This,p)
#define IHTMLDocument2_get_fileCreatedDate(This,p) (This)->lpVtbl->get_fileCreatedDate(This,p)
#define IHTMLDocument2_get_fileModifiedDate(This,p) (This)->lpVtbl->get_fileModifiedDate(This,p)
#define IHTMLDocument2_get_fileUpdatedDate(This,p) (This)->lpVtbl->get_fileUpdatedDate(This,p)
#define IHTMLDocument2_get_security(This,p) (This)->lpVtbl->get_security(This,p)
#define IHTMLDocument2_get_protocol(This,p) (This)->lpVtbl->get_protocol(This,p)
#define IHTMLDocument2_get_nameProp(This,p) (This)->lpVtbl->get_nameProp(This,p)
#define IHTMLDocument2_write(This,psarray) (This)->lpVtbl->write(This,psarray)
#define IHTMLDocument2_writeln(This,psarray) (This)->lpVtbl->writeln(This,psarray)
#define IHTMLDocument2_open(This,url,name,features,replace,pomWindowResult) (This)->lpVtbl->open(This,url,name,features,replace,pomWindowResult)
#define IHTMLDocument2_close(This) (This)->lpVtbl->close(This)
#define IHTMLDocument2_clear(This) (This)->lpVtbl->clear(This)
#define IHTMLDocument2_queryCommandSupported(This,cmdID,pfRet) (This)->lpVtbl->queryCommandSupported(This,cmdID,pfRet)
#define IHTMLDocument2_queryCommandEnabled(This,cmdID,pfRet) (This)->lpVtbl->queryCommandEnabled(This,cmdID,pfRet)
#define IHTMLDocument2_queryCommandState(This,cmdID,pfRet) (This)->lpVtbl->queryCommandState(This,cmdID,pfRet)
#define IHTMLDocument2_queryCommandIndeterm(This,cmdID,pfRet) (This)->lpVtbl->queryCommandIndeterm(This,cmdID,pfRet)
#define IHTMLDocument2_queryCommandText(This,cmdID,pcmdText) (This)->lpVtbl->queryCommandText(This,cmdID,pcmdText)
#define IHTMLDocument2_queryCommandValue(This,cmdID,pcmdValue) (This)->lpVtbl->queryCommandValue(This,cmdID,pcmdValue)
#define IHTMLDocument2_execCommand(This,cmdID,showUI,value,pfRet) (This)->lpVtbl->execCommand(This,cmdID,showUI,value,pfRet)
#define IHTMLDocument2_execCommandShowHelp(This,cmdID,pfRet) (This)->lpVtbl->execCommandShowHelp(This,cmdID,pfRet)
#define IHTMLDocument2_createElement(This,eTag,newElem) (This)->lpVtbl->createElement(This,eTag,newElem)
#define IHTMLDocument2_put_onhelp(This,v) (This)->lpVtbl->put_onhelp(This,v)
#define IHTMLDocument2_get_onhelp(This,p) (This)->lpVtbl->get_onhelp(This,p)
#define IHTMLDocument2_put_onclick(This,v) (This)->lpVtbl->put_onclick(This,v)
#define IHTMLDocument2_get_onclick(This,p) (This)->lpVtbl->get_onclick(This,p)
#define IHTMLDocument2_put_ondblclick(This,v) (This)->lpVtbl->put_ondblclick(This,v)
#define IHTMLDocument2_get_ondblclick(This,p) (This)->lpVtbl->get_ondblclick(This,p)
#define IHTMLDocument2_put_onkeyup(This,v) (This)->lpVtbl->put_onkeyup(This,v)
#define IHTMLDocument2_get_onkeyup(This,p) (This)->lpVtbl->get_onkeyup(This,p)
#define IHTMLDocument2_put_onkeydown(This,v) (This)->lpVtbl->put_onkeydown(This,v)
#define IHTMLDocument2_get_onkeydown(This,p) (This)->lpVtbl->get_onkeydown(This,p)
#define IHTMLDocument2_put_onkeypress(This,v) (This)->lpVtbl->put_onkeypress(This,v)
#define IHTMLDocument2_get_onkeypress(This,p) (This)->lpVtbl->get_onkeypress(This,p)
#define IHTMLDocument2_put_onmouseup(This,v) (This)->lpVtbl->put_onmouseup(This,v)
#define IHTMLDocument2_get_onmouseup(This,p) (This)->lpVtbl->get_onmouseup(This,p)
#define IHTMLDocument2_put_onmousedown(This,v) (This)->lpVtbl->put_onmousedown(This,v)
#define IHTMLDocument2_get_onmousedown(This,p) (This)->lpVtbl->get_onmousedown(This,p)
#define IHTMLDocument2_put_onmousemove(This,v) (This)->lpVtbl->put_onmousemove(This,v)
#define IHTMLDocument2_get_onmousemove(This,p) (This)->lpVtbl->get_onmousemove(This,p)
#define IHTMLDocument2_put_onmouseout(This,v) (This)->lpVtbl->put_onmouseout(This,v)
#define IHTMLDocument2_get_onmouseout(This,p) (This)->lpVtbl->get_onmouseout(This,p)
#define IHTMLDocument2_put_onmouseover(This,v) (This)->lpVtbl->put_onmouseover(This,v)
#define IHTMLDocument2_get_onmouseover(This,p) (This)->lpVtbl->get_onmouseover(This,p)
#define IHTMLDocument2_put_onreadystatechange(This,v) (This)->lpVtbl->put_onreadystatechange(This,v)
#define IHTMLDocument2_get_onreadystatechange(This,p) (This)->lpVtbl->get_onreadystatechange(This,p)
#define IHTMLDocument2_put_onafterupdate(This,v) (This)->lpVtbl->put_onafterupdate(This,v)
#define IHTMLDocument2_get_onafterupdate(This,p) (This)->lpVtbl->get_onafterupdate(This,p)
#define IHTMLDocument2_put_onrowexit(This,v) (This)->lpVtbl->put_onrowexit(This,v)
#define IHTMLDocument2_get_onrowexit(This,p) (This)->lpVtbl->get_onrowexit(This,p)
#define IHTMLDocument2_put_onrowenter(This,v) (This)->lpVtbl->put_onrowenter(This,v)
#define IHTMLDocument2_get_onrowenter(This,p) (This)->lpVtbl->get_onrowenter(This,p)
#define IHTMLDocument2_put_ondragstart(This,v) (This)->lpVtbl->put_ondragstart(This,v)
#define IHTMLDocument2_get_ondragstart(This,p) (This)->lpVtbl->get_ondragstart(This,p)
#define IHTMLDocument2_put_onselectstart(This,v) (This)->lpVtbl->put_onselectstart(This,v)
#define IHTMLDocument2_get_onselectstart(This,p) (This)->lpVtbl->get_onselectstart(This,p)
#define IHTMLDocument2_elementFromPoint(This,x,y,elementHit) (This)->lpVtbl->elementFromPoint(This,x,y,elementHit)
#define IHTMLDocument2_get_parentWindow(This,p) (This)->lpVtbl->get_parentWindow(This,p)
#define IHTMLDocument2_get_styleSheets(This,p) (This)->lpVtbl->get_styleSheets(This,p)
#define IHTMLDocument2_put_onbeforeupdate(This,v) (This)->lpVtbl->put_onbeforeupdate(This,v)
#define IHTMLDocument2_get_onbeforeupdate(This,p) (This)->lpVtbl->get_onbeforeupdate(This,p)
#define IHTMLDocument2_put_onerrorupdate(This,v) (This)->lpVtbl->put_onerrorupdate(This,v)
#define IHTMLDocument2_get_onerrorupdate(This,p) (This)->lpVtbl->get_onerrorupdate(This,p)
#define IHTMLDocument2_toString(This,String) (This)->lpVtbl->toString(This,String)
#define IHTMLDocument2_createStyleSheet(This,bstrHref,lIndex,ppnewStyleSheet) (This)->lpVtbl->createStyleSheet(This,bstrHref,lIndex,ppnewStyleSheet)
#endif
#endif
  HRESULT WINAPI IHTMLDocument2_get_all_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_all_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_body_Proxy(IHTMLDocument2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLDocument2_get_body_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_activeElement_Proxy(IHTMLDocument2 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLDocument2_get_activeElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_images_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_images_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_applets_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_applets_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_links_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_links_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_forms_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_forms_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_anchors_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_anchors_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_title_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_title_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_title_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_scripts_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_scripts_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_designMode_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_designMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_designMode_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_designMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_selection_Proxy(IHTMLDocument2 *This,IHTMLSelectionObject **p);
  void __RPC_STUB IHTMLDocument2_get_selection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_readyState_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_frames_Proxy(IHTMLDocument2 *This,IHTMLFramesCollection2 **p);
  void __RPC_STUB IHTMLDocument2_get_frames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_embeds_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_embeds_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_plugins_Proxy(IHTMLDocument2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLDocument2_get_plugins_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_alinkColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_alinkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_alinkColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_alinkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_bgColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_bgColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_fgColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_fgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fgColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_fgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_linkColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_linkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_linkColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_linkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_vlinkColor_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_vlinkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_vlinkColor_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_vlinkColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_referrer_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_referrer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_location_Proxy(IHTMLDocument2 *This,IHTMLLocation **p);
  void __RPC_STUB IHTMLDocument2_get_location_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_lastModified_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_lastModified_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_URL_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_URL_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_domain_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_domain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_domain_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_domain_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_cookie_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_cookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_cookie_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_cookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_expando_Proxy(IHTMLDocument2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDocument2_put_expando_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_expando_Proxy(IHTMLDocument2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDocument2_get_expando_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_charset_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_charset_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_defaultCharset_Proxy(IHTMLDocument2 *This,BSTR v);
  void __RPC_STUB IHTMLDocument2_put_defaultCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_defaultCharset_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_defaultCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_mimeType_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_mimeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fileSize_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_fileSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fileCreatedDate_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_fileCreatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fileModifiedDate_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_fileModifiedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_fileUpdatedDate_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_fileUpdatedDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_security_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_security_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_protocol_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_nameProp_Proxy(IHTMLDocument2 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument2_get_nameProp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_write_Proxy(IHTMLDocument2 *This,SAFEARRAY *psarray);
  void __RPC_STUB IHTMLDocument2_write_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_writeln_Proxy(IHTMLDocument2 *This,SAFEARRAY *psarray);
  void __RPC_STUB IHTMLDocument2_writeln_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_open_Proxy(IHTMLDocument2 *This,BSTR url,VARIANT name,VARIANT features,VARIANT replace,IDispatch **pomWindowResult);
  void __RPC_STUB IHTMLDocument2_open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_close_Proxy(IHTMLDocument2 *This);
  void __RPC_STUB IHTMLDocument2_close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_clear_Proxy(IHTMLDocument2 *This);
  void __RPC_STUB IHTMLDocument2_clear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandSupported_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_queryCommandSupported_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandEnabled_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_queryCommandEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandState_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_queryCommandState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandIndeterm_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_queryCommandIndeterm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandText_Proxy(IHTMLDocument2 *This,BSTR cmdID,BSTR *pcmdText);
  void __RPC_STUB IHTMLDocument2_queryCommandText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_queryCommandValue_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT *pcmdValue);
  void __RPC_STUB IHTMLDocument2_queryCommandValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_execCommand_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL showUI,VARIANT value,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_execCommand_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_execCommandShowHelp_Proxy(IHTMLDocument2 *This,BSTR cmdID,VARIANT_BOOL *pfRet);
  void __RPC_STUB IHTMLDocument2_execCommandShowHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_createElement_Proxy(IHTMLDocument2 *This,BSTR eTag,IHTMLElement **newElem);
  void __RPC_STUB IHTMLDocument2_createElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onhelp_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onhelp_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onclick_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onclick_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_ondblclick_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_ondblclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_ondblclick_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_ondblclick_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onkeyup_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onkeyup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onkeyup_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onkeyup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onkeydown_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onkeydown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onkeydown_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onkeydown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onkeypress_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onkeypress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onkeypress_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onkeypress_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmouseup_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmouseup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmouseup_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmouseup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmousedown_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmousedown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmousedown_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmousedown_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmousemove_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmousemove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmousemove_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmousemove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmouseout_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmouseout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmouseout_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmouseout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onmouseover_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onmouseover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onmouseover_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onmouseover_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onreadystatechange_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onreadystatechange_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onafterupdate_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onafterupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onafterupdate_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onafterupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onrowexit_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onrowexit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onrowexit_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onrowexit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onrowenter_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onrowenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onrowenter_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onrowenter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_ondragstart_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_ondragstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_ondragstart_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_ondragstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onselectstart_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onselectstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onselectstart_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onselectstart_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_elementFromPoint_Proxy(IHTMLDocument2 *This,long x,long y,IHTMLElement **elementHit);
  void __RPC_STUB IHTMLDocument2_elementFromPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_parentWindow_Proxy(IHTMLDocument2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLDocument2_get_parentWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_styleSheets_Proxy(IHTMLDocument2 *This,IHTMLStyleSheetsCollection **p);
  void __RPC_STUB IHTMLDocument2_get_styleSheets_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onbeforeupdate_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onbeforeupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onbeforeupdate_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onbeforeupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_put_onerrorupdate_Proxy(IHTMLDocument2 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument2_put_onerrorupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_get_onerrorupdate_Proxy(IHTMLDocument2 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument2_get_onerrorupdate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_toString_Proxy(IHTMLDocument2 *This,BSTR *String);
  void __RPC_STUB IHTMLDocument2_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument2_createStyleSheet_Proxy(IHTMLDocument2 *This,BSTR bstrHref,long lIndex,IHTMLStyleSheet **ppnewStyleSheet);
  void __RPC_STUB IHTMLDocument2_createStyleSheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFramesCollection2_INTERFACE_DEFINED__
#define __IHTMLFramesCollection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFramesCollection2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFramesCollection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI item(VARIANT *pvarIndex,VARIANT *pvarResult) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
  };
#else
  typedef struct IHTMLFramesCollection2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFramesCollection2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFramesCollection2 *This);
      ULONG (WINAPI *Release)(IHTMLFramesCollection2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFramesCollection2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFramesCollection2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFramesCollection2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFramesCollection2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *item)(IHTMLFramesCollection2 *This,VARIANT *pvarIndex,VARIANT *pvarResult);
      HRESULT (WINAPI *get_length)(IHTMLFramesCollection2 *This,long *p);
    END_INTERFACE
  } IHTMLFramesCollection2Vtbl;
  interface IHTMLFramesCollection2 {
    CONST_VTBL struct IHTMLFramesCollection2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFramesCollection2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFramesCollection2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFramesCollection2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFramesCollection2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFramesCollection2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFramesCollection2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFramesCollection2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFramesCollection2_item(This,pvarIndex,pvarResult) (This)->lpVtbl->item(This,pvarIndex,pvarResult)
#define IHTMLFramesCollection2_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLFramesCollection2_item_Proxy(IHTMLFramesCollection2 *This,VARIANT *pvarIndex,VARIANT *pvarResult);
  void __RPC_STUB IHTMLFramesCollection2_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFramesCollection2_get_length_Proxy(IHTMLFramesCollection2 *This,long *p);
  void __RPC_STUB IHTMLFramesCollection2_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLWindow2_INTERFACE_DEFINED__
#define __IHTMLWindow2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLWindow2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLWindow2 : public IHTMLFramesCollection2 {
  public:
    virtual HRESULT WINAPI get_frames(IHTMLFramesCollection2 **p) = 0;
    virtual HRESULT WINAPI put_defaultStatus(BSTR v) = 0;
    virtual HRESULT WINAPI get_defaultStatus(BSTR *p) = 0;
    virtual HRESULT WINAPI put_status(BSTR v) = 0;
    virtual HRESULT WINAPI get_status(BSTR *p) = 0;
    virtual HRESULT WINAPI setTimeout(BSTR expression,long msec,VARIANT *language,long *timerID) = 0;
    virtual HRESULT WINAPI clearTimeout(long timerID) = 0;
    virtual HRESULT WINAPI alert(BSTR message = L"") = 0;
    virtual HRESULT WINAPI confirm(BSTR message,VARIANT_BOOL *confirmed) = 0;
    virtual HRESULT WINAPI prompt(BSTR message,BSTR defstr,VARIANT *textdata) = 0;
    virtual HRESULT WINAPI get_Image(IHTMLImageElementFactory **p) = 0;
    virtual HRESULT WINAPI get_location(IHTMLLocation **p) = 0;
    virtual HRESULT WINAPI get_history(IOmHistory **p) = 0;
    virtual HRESULT WINAPI close(void) = 0;
    virtual HRESULT WINAPI put_opener(VARIANT v) = 0;
    virtual HRESULT WINAPI get_opener(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_navigator(IOmNavigator **p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI get_parent(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI open(BSTR url,BSTR name,BSTR features,VARIANT_BOOL replace,IHTMLWindow2 **pomWindowResult) = 0;
    virtual HRESULT WINAPI get_self(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI get_top(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI get_window(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI navigate(BSTR url) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforeunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onhelp(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onhelp(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onresize(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onresize(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onscroll(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onscroll(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_document(IHTMLDocument2 **p) = 0;
    virtual HRESULT WINAPI get_event(IHTMLEventObj **p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI showModalDialog(BSTR dialog,VARIANT *varArgIn,VARIANT *varOptions,VARIANT *varArgOut) = 0;
    virtual HRESULT WINAPI showHelp(BSTR helpURL,VARIANT helpArg,BSTR features = L"") = 0;
    virtual HRESULT WINAPI get_screen(IHTMLScreen **p) = 0;
    virtual HRESULT WINAPI get_Option(IHTMLOptionElementFactory **p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI get_closed(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
    virtual HRESULT WINAPI scroll(long x,long y) = 0;
    virtual HRESULT WINAPI get_clientInformation(IOmNavigator **p) = 0;
    virtual HRESULT WINAPI setInterval(BSTR expression,long msec,VARIANT *language,long *timerID) = 0;
    virtual HRESULT WINAPI clearInterval(long timerID) = 0;
    virtual HRESULT WINAPI put_offscreenBuffering(VARIANT v) = 0;
    virtual HRESULT WINAPI get_offscreenBuffering(VARIANT *p) = 0;
    virtual HRESULT WINAPI execScript(BSTR code,BSTR language,VARIANT *pvarRet) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
    virtual HRESULT WINAPI scrollBy(long x,long y) = 0;
    virtual HRESULT WINAPI scrollTo(long x,long y) = 0;
    virtual HRESULT WINAPI moveTo(long x,long y) = 0;
    virtual HRESULT WINAPI moveBy(long x,long y) = 0;
    virtual HRESULT WINAPI resizeTo(long x,long y) = 0;
    virtual HRESULT WINAPI resizeBy(long x,long y) = 0;
    virtual HRESULT WINAPI get_external(IDispatch **p) = 0;
  };
#else
  typedef struct IHTMLWindow2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLWindow2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLWindow2 *This);
      ULONG (WINAPI *Release)(IHTMLWindow2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLWindow2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLWindow2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLWindow2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLWindow2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *item)(IHTMLWindow2 *This,VARIANT *pvarIndex,VARIANT *pvarResult);
      HRESULT (WINAPI *get_length)(IHTMLWindow2 *This,long *p);
      HRESULT (WINAPI *get_frames)(IHTMLWindow2 *This,IHTMLFramesCollection2 **p);
      HRESULT (WINAPI *put_defaultStatus)(IHTMLWindow2 *This,BSTR v);
      HRESULT (WINAPI *get_defaultStatus)(IHTMLWindow2 *This,BSTR *p);
      HRESULT (WINAPI *put_status)(IHTMLWindow2 *This,BSTR v);
      HRESULT (WINAPI *get_status)(IHTMLWindow2 *This,BSTR *p);
      HRESULT (WINAPI *setTimeout)(IHTMLWindow2 *This,BSTR expression,long msec,VARIANT *language,long *timerID);
      HRESULT (WINAPI *clearTimeout)(IHTMLWindow2 *This,long timerID);
      HRESULT (WINAPI *alert)(IHTMLWindow2 *This,BSTR message);
      HRESULT (WINAPI *confirm)(IHTMLWindow2 *This,BSTR message,VARIANT_BOOL *confirmed);
      HRESULT (WINAPI *prompt)(IHTMLWindow2 *This,BSTR message,BSTR defstr,VARIANT *textdata);
      HRESULT (WINAPI *get_Image)(IHTMLWindow2 *This,IHTMLImageElementFactory **p);
      HRESULT (WINAPI *get_location)(IHTMLWindow2 *This,IHTMLLocation **p);
      HRESULT (WINAPI *get_history)(IHTMLWindow2 *This,IOmHistory **p);
      HRESULT (WINAPI *close)(IHTMLWindow2 *This);
      HRESULT (WINAPI *put_opener)(IHTMLWindow2 *This,VARIANT v);
      HRESULT (WINAPI *get_opener)(IHTMLWindow2 *This,VARIANT *p);
      HRESULT (WINAPI *get_navigator)(IHTMLWindow2 *This,IOmNavigator **p);
      HRESULT (WINAPI *put_name)(IHTMLWindow2 *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLWindow2 *This,BSTR *p);
      HRESULT (WINAPI *get_parent)(IHTMLWindow2 *This,IHTMLWindow2 **p);
      HRESULT (WINAPI *open)(IHTMLWindow2 *This,BSTR url,BSTR name,BSTR features,VARIANT_BOOL replace,IHTMLWindow2 **pomWindowResult);
      HRESULT (WINAPI *get_self)(IHTMLWindow2 *This,IHTMLWindow2 **p);
      HRESULT (WINAPI *get_top)(IHTMLWindow2 *This,IHTMLWindow2 **p);
      HRESULT (WINAPI *get_window)(IHTMLWindow2 *This,IHTMLWindow2 **p);
      HRESULT (WINAPI *navigate)(IHTMLWindow2 *This,BSTR url);
      HRESULT (WINAPI *put_onfocus)(IHTMLWindow2 *This,VARIANT v);
      HRESULT (WINAPI *get_onfocus)(IHTMLWindow2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onblur)(IHTMLWindow2 *This,VARIANT v);
      HRESULT (WINAPI *get_onblur)(IHTMLWindow2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onload)(IHTMLWindow2 *This,VARIANT v);
      HRESULT (WINAPI *get_onload)(IHTMLWindow2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onbeforeunload)(IHTMLWindow2 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforeunload)(IHTMLWindow2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onunload)(IHTMLWindow2 *This,VARIANT v);
      HRESULT (WINAPI *get_onunload)(IHTMLWindow2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onhelp)(IHTMLWindow2 *This,VARIANT v);
      HRESULT (WINAPI *get_onhelp)(IHTMLWindow2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onerror)(IHTMLWindow2 *This,VARIANT v);
      HRESULT (WINAPI *get_onerror)(IHTMLWindow2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onresize)(IHTMLWindow2 *This,VARIANT v);
      HRESULT (WINAPI *get_onresize)(IHTMLWindow2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onscroll)(IHTMLWindow2 *This,VARIANT v);
      HRESULT (WINAPI *get_onscroll)(IHTMLWindow2 *This,VARIANT *p);
      HRESULT (WINAPI *get_document)(IHTMLWindow2 *This,IHTMLDocument2 **p);
      HRESULT (WINAPI *get_event)(IHTMLWindow2 *This,IHTMLEventObj **p);
      HRESULT (WINAPI *get__newEnum)(IHTMLWindow2 *This,IUnknown **p);
      HRESULT (WINAPI *showModalDialog)(IHTMLWindow2 *This,BSTR dialog,VARIANT *varArgIn,VARIANT *varOptions,VARIANT *varArgOut);
      HRESULT (WINAPI *showHelp)(IHTMLWindow2 *This,BSTR helpURL,VARIANT helpArg,BSTR features);
      HRESULT (WINAPI *get_screen)(IHTMLWindow2 *This,IHTMLScreen **p);
      HRESULT (WINAPI *get_Option)(IHTMLWindow2 *This,IHTMLOptionElementFactory **p);
      HRESULT (WINAPI *focus)(IHTMLWindow2 *This);
      HRESULT (WINAPI *get_closed)(IHTMLWindow2 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *blur)(IHTMLWindow2 *This);
      HRESULT (WINAPI *scroll)(IHTMLWindow2 *This,long x,long y);
      HRESULT (WINAPI *get_clientInformation)(IHTMLWindow2 *This,IOmNavigator **p);
      HRESULT (WINAPI *setInterval)(IHTMLWindow2 *This,BSTR expression,long msec,VARIANT *language,long *timerID);
      HRESULT (WINAPI *clearInterval)(IHTMLWindow2 *This,long timerID);
      HRESULT (WINAPI *put_offscreenBuffering)(IHTMLWindow2 *This,VARIANT v);
      HRESULT (WINAPI *get_offscreenBuffering)(IHTMLWindow2 *This,VARIANT *p);
      HRESULT (WINAPI *execScript)(IHTMLWindow2 *This,BSTR code,BSTR language,VARIANT *pvarRet);
      HRESULT (WINAPI *toString)(IHTMLWindow2 *This,BSTR *String);
      HRESULT (WINAPI *scrollBy)(IHTMLWindow2 *This,long x,long y);
      HRESULT (WINAPI *scrollTo)(IHTMLWindow2 *This,long x,long y);
      HRESULT (WINAPI *moveTo)(IHTMLWindow2 *This,long x,long y);
      HRESULT (WINAPI *moveBy)(IHTMLWindow2 *This,long x,long y);
      HRESULT (WINAPI *resizeTo)(IHTMLWindow2 *This,long x,long y);
      HRESULT (WINAPI *resizeBy)(IHTMLWindow2 *This,long x,long y);
      HRESULT (WINAPI *get_external)(IHTMLWindow2 *This,IDispatch **p);
    END_INTERFACE
  } IHTMLWindow2Vtbl;
  interface IHTMLWindow2 {
    CONST_VTBL struct IHTMLWindow2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLWindow2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLWindow2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLWindow2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLWindow2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLWindow2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLWindow2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLWindow2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLWindow2_item(This,pvarIndex,pvarResult) (This)->lpVtbl->item(This,pvarIndex,pvarResult)
#define IHTMLWindow2_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLWindow2_get_frames(This,p) (This)->lpVtbl->get_frames(This,p)
#define IHTMLWindow2_put_defaultStatus(This,v) (This)->lpVtbl->put_defaultStatus(This,v)
#define IHTMLWindow2_get_defaultStatus(This,p) (This)->lpVtbl->get_defaultStatus(This,p)
#define IHTMLWindow2_put_status(This,v) (This)->lpVtbl->put_status(This,v)
#define IHTMLWindow2_get_status(This,p) (This)->lpVtbl->get_status(This,p)
#define IHTMLWindow2_setTimeout(This,expression,msec,language,timerID) (This)->lpVtbl->setTimeout(This,expression,msec,language,timerID)
#define IHTMLWindow2_clearTimeout(This,timerID) (This)->lpVtbl->clearTimeout(This,timerID)
#define IHTMLWindow2_alert(This,message) (This)->lpVtbl->alert(This,message)
#define IHTMLWindow2_confirm(This,message,confirmed) (This)->lpVtbl->confirm(This,message,confirmed)
#define IHTMLWindow2_prompt(This,message,defstr,textdata) (This)->lpVtbl->prompt(This,message,defstr,textdata)
#define IHTMLWindow2_get_Image(This,p) (This)->lpVtbl->get_Image(This,p)
#define IHTMLWindow2_get_location(This,p) (This)->lpVtbl->get_location(This,p)
#define IHTMLWindow2_get_history(This,p) (This)->lpVtbl->get_history(This,p)
#define IHTMLWindow2_close(This) (This)->lpVtbl->close(This)
#define IHTMLWindow2_put_opener(This,v) (This)->lpVtbl->put_opener(This,v)
#define IHTMLWindow2_get_opener(This,p) (This)->lpVtbl->get_opener(This,p)
#define IHTMLWindow2_get_navigator(This,p) (This)->lpVtbl->get_navigator(This,p)
#define IHTMLWindow2_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLWindow2_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLWindow2_get_parent(This,p) (This)->lpVtbl->get_parent(This,p)
#define IHTMLWindow2_open(This,url,name,features,replace,pomWindowResult) (This)->lpVtbl->open(This,url,name,features,replace,pomWindowResult)
#define IHTMLWindow2_get_self(This,p) (This)->lpVtbl->get_self(This,p)
#define IHTMLWindow2_get_top(This,p) (This)->lpVtbl->get_top(This,p)
#define IHTMLWindow2_get_window(This,p) (This)->lpVtbl->get_window(This,p)
#define IHTMLWindow2_navigate(This,url) (This)->lpVtbl->navigate(This,url)
#define IHTMLWindow2_put_onfocus(This,v) (This)->lpVtbl->put_onfocus(This,v)
#define IHTMLWindow2_get_onfocus(This,p) (This)->lpVtbl->get_onfocus(This,p)
#define IHTMLWindow2_put_onblur(This,v) (This)->lpVtbl->put_onblur(This,v)
#define IHTMLWindow2_get_onblur(This,p) (This)->lpVtbl->get_onblur(This,p)
#define IHTMLWindow2_put_onload(This,v) (This)->lpVtbl->put_onload(This,v)
#define IHTMLWindow2_get_onload(This,p) (This)->lpVtbl->get_onload(This,p)
#define IHTMLWindow2_put_onbeforeunload(This,v) (This)->lpVtbl->put_onbeforeunload(This,v)
#define IHTMLWindow2_get_onbeforeunload(This,p) (This)->lpVtbl->get_onbeforeunload(This,p)
#define IHTMLWindow2_put_onunload(This,v) (This)->lpVtbl->put_onunload(This,v)
#define IHTMLWindow2_get_onunload(This,p) (This)->lpVtbl->get_onunload(This,p)
#define IHTMLWindow2_put_onhelp(This,v) (This)->lpVtbl->put_onhelp(This,v)
#define IHTMLWindow2_get_onhelp(This,p) (This)->lpVtbl->get_onhelp(This,p)
#define IHTMLWindow2_put_onerror(This,v) (This)->lpVtbl->put_onerror(This,v)
#define IHTMLWindow2_get_onerror(This,p) (This)->lpVtbl->get_onerror(This,p)
#define IHTMLWindow2_put_onresize(This,v) (This)->lpVtbl->put_onresize(This,v)
#define IHTMLWindow2_get_onresize(This,p) (This)->lpVtbl->get_onresize(This,p)
#define IHTMLWindow2_put_onscroll(This,v) (This)->lpVtbl->put_onscroll(This,v)
#define IHTMLWindow2_get_onscroll(This,p) (This)->lpVtbl->get_onscroll(This,p)
#define IHTMLWindow2_get_document(This,p) (This)->lpVtbl->get_document(This,p)
#define IHTMLWindow2_get_event(This,p) (This)->lpVtbl->get_event(This,p)
#define IHTMLWindow2_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLWindow2_showModalDialog(This,dialog,varArgIn,varOptions,varArgOut) (This)->lpVtbl->showModalDialog(This,dialog,varArgIn,varOptions,varArgOut)
#define IHTMLWindow2_showHelp(This,helpURL,helpArg,features) (This)->lpVtbl->showHelp(This,helpURL,helpArg,features)
#define IHTMLWindow2_get_screen(This,p) (This)->lpVtbl->get_screen(This,p)
#define IHTMLWindow2_get_Option(This,p) (This)->lpVtbl->get_Option(This,p)
#define IHTMLWindow2_focus(This) (This)->lpVtbl->focus(This)
#define IHTMLWindow2_get_closed(This,p) (This)->lpVtbl->get_closed(This,p)
#define IHTMLWindow2_blur(This) (This)->lpVtbl->blur(This)
#define IHTMLWindow2_scroll(This,x,y) (This)->lpVtbl->scroll(This,x,y)
#define IHTMLWindow2_get_clientInformation(This,p) (This)->lpVtbl->get_clientInformation(This,p)
#define IHTMLWindow2_setInterval(This,expression,msec,language,timerID) (This)->lpVtbl->setInterval(This,expression,msec,language,timerID)
#define IHTMLWindow2_clearInterval(This,timerID) (This)->lpVtbl->clearInterval(This,timerID)
#define IHTMLWindow2_put_offscreenBuffering(This,v) (This)->lpVtbl->put_offscreenBuffering(This,v)
#define IHTMLWindow2_get_offscreenBuffering(This,p) (This)->lpVtbl->get_offscreenBuffering(This,p)
#define IHTMLWindow2_execScript(This,code,language,pvarRet) (This)->lpVtbl->execScript(This,code,language,pvarRet)
#define IHTMLWindow2_toString(This,String) (This)->lpVtbl->toString(This,String)
#define IHTMLWindow2_scrollBy(This,x,y) (This)->lpVtbl->scrollBy(This,x,y)
#define IHTMLWindow2_scrollTo(This,x,y) (This)->lpVtbl->scrollTo(This,x,y)
#define IHTMLWindow2_moveTo(This,x,y) (This)->lpVtbl->moveTo(This,x,y)
#define IHTMLWindow2_moveBy(This,x,y) (This)->lpVtbl->moveBy(This,x,y)
#define IHTMLWindow2_resizeTo(This,x,y) (This)->lpVtbl->resizeTo(This,x,y)
#define IHTMLWindow2_resizeBy(This,x,y) (This)->lpVtbl->resizeBy(This,x,y)
#define IHTMLWindow2_get_external(This,p) (This)->lpVtbl->get_external(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLWindow2_get_frames_Proxy(IHTMLWindow2 *This,IHTMLFramesCollection2 **p);
  void __RPC_STUB IHTMLWindow2_get_frames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_defaultStatus_Proxy(IHTMLWindow2 *This,BSTR v);
  void __RPC_STUB IHTMLWindow2_put_defaultStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_defaultStatus_Proxy(IHTMLWindow2 *This,BSTR *p);
  void __RPC_STUB IHTMLWindow2_get_defaultStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_status_Proxy(IHTMLWindow2 *This,BSTR v);
  void __RPC_STUB IHTMLWindow2_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_status_Proxy(IHTMLWindow2 *This,BSTR *p);
  void __RPC_STUB IHTMLWindow2_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_setTimeout_Proxy(IHTMLWindow2 *This,BSTR expression,long msec,VARIANT *language,long *timerID);
  void __RPC_STUB IHTMLWindow2_setTimeout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_clearTimeout_Proxy(IHTMLWindow2 *This,long timerID);
  void __RPC_STUB IHTMLWindow2_clearTimeout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_alert_Proxy(IHTMLWindow2 *This,BSTR message);
  void __RPC_STUB IHTMLWindow2_alert_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_confirm_Proxy(IHTMLWindow2 *This,BSTR message,VARIANT_BOOL *confirmed);
  void __RPC_STUB IHTMLWindow2_confirm_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_prompt_Proxy(IHTMLWindow2 *This,BSTR message,BSTR defstr,VARIANT *textdata);
  void __RPC_STUB IHTMLWindow2_prompt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_Image_Proxy(IHTMLWindow2 *This,IHTMLImageElementFactory **p);
  void __RPC_STUB IHTMLWindow2_get_Image_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_location_Proxy(IHTMLWindow2 *This,IHTMLLocation **p);
  void __RPC_STUB IHTMLWindow2_get_location_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_history_Proxy(IHTMLWindow2 *This,IOmHistory **p);
  void __RPC_STUB IHTMLWindow2_get_history_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_close_Proxy(IHTMLWindow2 *This);
  void __RPC_STUB IHTMLWindow2_close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_opener_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_opener_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_opener_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_opener_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_navigator_Proxy(IHTMLWindow2 *This,IOmNavigator **p);
  void __RPC_STUB IHTMLWindow2_get_navigator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_name_Proxy(IHTMLWindow2 *This,BSTR v);
  void __RPC_STUB IHTMLWindow2_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_name_Proxy(IHTMLWindow2 *This,BSTR *p);
  void __RPC_STUB IHTMLWindow2_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_parent_Proxy(IHTMLWindow2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLWindow2_get_parent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_open_Proxy(IHTMLWindow2 *This,BSTR url,BSTR name,BSTR features,VARIANT_BOOL replace,IHTMLWindow2 **pomWindowResult);
  void __RPC_STUB IHTMLWindow2_open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_self_Proxy(IHTMLWindow2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLWindow2_get_self_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_top_Proxy(IHTMLWindow2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLWindow2_get_top_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_window_Proxy(IHTMLWindow2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLWindow2_get_window_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_navigate_Proxy(IHTMLWindow2 *This,BSTR url);
  void __RPC_STUB IHTMLWindow2_navigate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onfocus_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onfocus_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onblur_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onblur_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onload_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onload_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onbeforeunload_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onbeforeunload_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onunload_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onunload_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onhelp_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onhelp_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onhelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onerror_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onerror_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onresize_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onresize_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onresize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_onscroll_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_onscroll_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_onscroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_document_Proxy(IHTMLWindow2 *This,IHTMLDocument2 **p);
  void __RPC_STUB IHTMLWindow2_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_event_Proxy(IHTMLWindow2 *This,IHTMLEventObj **p);
  void __RPC_STUB IHTMLWindow2_get_event_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get__newEnum_Proxy(IHTMLWindow2 *This,IUnknown **p);
  void __RPC_STUB IHTMLWindow2_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_showModalDialog_Proxy(IHTMLWindow2 *This,BSTR dialog,VARIANT *varArgIn,VARIANT *varOptions,VARIANT *varArgOut);
  void __RPC_STUB IHTMLWindow2_showModalDialog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_showHelp_Proxy(IHTMLWindow2 *This,BSTR helpURL,VARIANT helpArg,BSTR features);
  void __RPC_STUB IHTMLWindow2_showHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_screen_Proxy(IHTMLWindow2 *This,IHTMLScreen **p);
  void __RPC_STUB IHTMLWindow2_get_screen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_Option_Proxy(IHTMLWindow2 *This,IHTMLOptionElementFactory **p);
  void __RPC_STUB IHTMLWindow2_get_Option_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_focus_Proxy(IHTMLWindow2 *This);
  void __RPC_STUB IHTMLWindow2_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_closed_Proxy(IHTMLWindow2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLWindow2_get_closed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_blur_Proxy(IHTMLWindow2 *This);
  void __RPC_STUB IHTMLWindow2_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_scroll_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_clientInformation_Proxy(IHTMLWindow2 *This,IOmNavigator **p);
  void __RPC_STUB IHTMLWindow2_get_clientInformation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_setInterval_Proxy(IHTMLWindow2 *This,BSTR expression,long msec,VARIANT *language,long *timerID);
  void __RPC_STUB IHTMLWindow2_setInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_clearInterval_Proxy(IHTMLWindow2 *This,long timerID);
  void __RPC_STUB IHTMLWindow2_clearInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_put_offscreenBuffering_Proxy(IHTMLWindow2 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow2_put_offscreenBuffering_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_offscreenBuffering_Proxy(IHTMLWindow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow2_get_offscreenBuffering_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_execScript_Proxy(IHTMLWindow2 *This,BSTR code,BSTR language,VARIANT *pvarRet);
  void __RPC_STUB IHTMLWindow2_execScript_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_toString_Proxy(IHTMLWindow2 *This,BSTR *String);
  void __RPC_STUB IHTMLWindow2_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_scrollBy_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_scrollBy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_scrollTo_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_scrollTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_moveTo_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_moveTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_moveBy_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_moveBy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_resizeTo_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_resizeTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_resizeBy_Proxy(IHTMLWindow2 *This,long x,long y);
  void __RPC_STUB IHTMLWindow2_resizeBy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow2_get_external_Proxy(IHTMLWindow2 *This,IDispatch **p);
  void __RPC_STUB IHTMLWindow2_get_external_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLWindow3_INTERFACE_DEFINED__
#define __IHTMLWindow3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLWindow3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLWindow3 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_screenLeft(long *p) = 0;
    virtual HRESULT WINAPI get_screenTop(long *p) = 0;
    virtual HRESULT WINAPI attachEvent(BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI detachEvent(BSTR event,IDispatch *pDisp) = 0;
    virtual HRESULT WINAPI setTimeout(VARIANT *expression,long msec,VARIANT *language,long *timerID) = 0;
    virtual HRESULT WINAPI setInterval(VARIANT *expression,long msec,VARIANT *language,long *timerID) = 0;
    virtual HRESULT WINAPI print(void) = 0;
    virtual HRESULT WINAPI put_onbeforeprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeprint(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterprint(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_clipboardData(IHTMLDataTransfer **p) = 0;
    virtual HRESULT WINAPI showModelessDialog(BSTR url,VARIANT *varArgIn,VARIANT *options,IHTMLWindow2 **pDialog) = 0;
  };
#else
  typedef struct IHTMLWindow3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLWindow3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLWindow3 *This);
      ULONG (WINAPI *Release)(IHTMLWindow3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLWindow3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLWindow3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLWindow3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLWindow3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_screenLeft)(IHTMLWindow3 *This,long *p);
      HRESULT (WINAPI *get_screenTop)(IHTMLWindow3 *This,long *p);
      HRESULT (WINAPI *attachEvent)(IHTMLWindow3 *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
      HRESULT (WINAPI *detachEvent)(IHTMLWindow3 *This,BSTR event,IDispatch *pDisp);
      HRESULT (WINAPI *setTimeout)(IHTMLWindow3 *This,VARIANT *expression,long msec,VARIANT *language,long *timerID);
      HRESULT (WINAPI *setInterval)(IHTMLWindow3 *This,VARIANT *expression,long msec,VARIANT *language,long *timerID);
      HRESULT (WINAPI *print)(IHTMLWindow3 *This);
      HRESULT (WINAPI *put_onbeforeprint)(IHTMLWindow3 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforeprint)(IHTMLWindow3 *This,VARIANT *p);
      HRESULT (WINAPI *put_onafterprint)(IHTMLWindow3 *This,VARIANT v);
      HRESULT (WINAPI *get_onafterprint)(IHTMLWindow3 *This,VARIANT *p);
      HRESULT (WINAPI *get_clipboardData)(IHTMLWindow3 *This,IHTMLDataTransfer **p);
      HRESULT (WINAPI *showModelessDialog)(IHTMLWindow3 *This,BSTR url,VARIANT *varArgIn,VARIANT *options,IHTMLWindow2 **pDialog);
    END_INTERFACE
  } IHTMLWindow3Vtbl;
  interface IHTMLWindow3 {
    CONST_VTBL struct IHTMLWindow3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLWindow3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLWindow3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLWindow3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLWindow3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLWindow3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLWindow3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLWindow3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLWindow3_get_screenLeft(This,p) (This)->lpVtbl->get_screenLeft(This,p)
#define IHTMLWindow3_get_screenTop(This,p) (This)->lpVtbl->get_screenTop(This,p)
#define IHTMLWindow3_attachEvent(This,event,pDisp,pfResult) (This)->lpVtbl->attachEvent(This,event,pDisp,pfResult)
#define IHTMLWindow3_detachEvent(This,event,pDisp) (This)->lpVtbl->detachEvent(This,event,pDisp)
#define IHTMLWindow3_setTimeout(This,expression,msec,language,timerID) (This)->lpVtbl->setTimeout(This,expression,msec,language,timerID)
#define IHTMLWindow3_setInterval(This,expression,msec,language,timerID) (This)->lpVtbl->setInterval(This,expression,msec,language,timerID)
#define IHTMLWindow3_print(This) (This)->lpVtbl->print(This)
#define IHTMLWindow3_put_onbeforeprint(This,v) (This)->lpVtbl->put_onbeforeprint(This,v)
#define IHTMLWindow3_get_onbeforeprint(This,p) (This)->lpVtbl->get_onbeforeprint(This,p)
#define IHTMLWindow3_put_onafterprint(This,v) (This)->lpVtbl->put_onafterprint(This,v)
#define IHTMLWindow3_get_onafterprint(This,p) (This)->lpVtbl->get_onafterprint(This,p)
#define IHTMLWindow3_get_clipboardData(This,p) (This)->lpVtbl->get_clipboardData(This,p)
#define IHTMLWindow3_showModelessDialog(This,url,varArgIn,options,pDialog) (This)->lpVtbl->showModelessDialog(This,url,varArgIn,options,pDialog)
#endif
#endif
  HRESULT WINAPI IHTMLWindow3_get_screenLeft_Proxy(IHTMLWindow3 *This,long *p);
  void __RPC_STUB IHTMLWindow3_get_screenLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_get_screenTop_Proxy(IHTMLWindow3 *This,long *p);
  void __RPC_STUB IHTMLWindow3_get_screenTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_attachEvent_Proxy(IHTMLWindow3 *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLWindow3_attachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_detachEvent_Proxy(IHTMLWindow3 *This,BSTR event,IDispatch *pDisp);
  void __RPC_STUB IHTMLWindow3_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_setTimeout_Proxy(IHTMLWindow3 *This,VARIANT *expression,long msec,VARIANT *language,long *timerID);
  void __RPC_STUB IHTMLWindow3_setTimeout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_setInterval_Proxy(IHTMLWindow3 *This,VARIANT *expression,long msec,VARIANT *language,long *timerID);
  void __RPC_STUB IHTMLWindow3_setInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_print_Proxy(IHTMLWindow3 *This);
  void __RPC_STUB IHTMLWindow3_print_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_put_onbeforeprint_Proxy(IHTMLWindow3 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow3_put_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_get_onbeforeprint_Proxy(IHTMLWindow3 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow3_get_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_put_onafterprint_Proxy(IHTMLWindow3 *This,VARIANT v);
  void __RPC_STUB IHTMLWindow3_put_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_get_onafterprint_Proxy(IHTMLWindow3 *This,VARIANT *p);
  void __RPC_STUB IHTMLWindow3_get_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_get_clipboardData_Proxy(IHTMLWindow3 *This,IHTMLDataTransfer **p);
  void __RPC_STUB IHTMLWindow3_get_clipboardData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow3_showModelessDialog_Proxy(IHTMLWindow3 *This,BSTR url,VARIANT *varArgIn,VARIANT *options,IHTMLWindow2 **pDialog);
  void __RPC_STUB IHTMLWindow3_showModelessDialog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFrameBase_INTERFACE_DEFINED__
#define __IHTMLFrameBase_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameBase;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFrameBase : public IDispatch {
  public:
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_frameBorder(BSTR v) = 0;
    virtual HRESULT WINAPI get_frameBorder(BSTR *p) = 0;
    virtual HRESULT WINAPI put_frameSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_frameSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_marginHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_marginHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_noResize(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noResize(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_scrolling(BSTR v) = 0;
    virtual HRESULT WINAPI get_scrolling(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLFrameBaseVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFrameBase *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFrameBase *This);
      ULONG (WINAPI *Release)(IHTMLFrameBase *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFrameBase *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFrameBase *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFrameBase *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFrameBase *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_src)(IHTMLFrameBase *This,BSTR v);
      HRESULT (WINAPI *get_src)(IHTMLFrameBase *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLFrameBase *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLFrameBase *This,BSTR *p);
      HRESULT (WINAPI *put_border)(IHTMLFrameBase *This,VARIANT v);
      HRESULT (WINAPI *get_border)(IHTMLFrameBase *This,VARIANT *p);
      HRESULT (WINAPI *put_frameBorder)(IHTMLFrameBase *This,BSTR v);
      HRESULT (WINAPI *get_frameBorder)(IHTMLFrameBase *This,BSTR *p);
      HRESULT (WINAPI *put_frameSpacing)(IHTMLFrameBase *This,VARIANT v);
      HRESULT (WINAPI *get_frameSpacing)(IHTMLFrameBase *This,VARIANT *p);
      HRESULT (WINAPI *put_marginWidth)(IHTMLFrameBase *This,VARIANT v);
      HRESULT (WINAPI *get_marginWidth)(IHTMLFrameBase *This,VARIANT *p);
      HRESULT (WINAPI *put_marginHeight)(IHTMLFrameBase *This,VARIANT v);
      HRESULT (WINAPI *get_marginHeight)(IHTMLFrameBase *This,VARIANT *p);
      HRESULT (WINAPI *put_noResize)(IHTMLFrameBase *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_noResize)(IHTMLFrameBase *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_scrolling)(IHTMLFrameBase *This,BSTR v);
      HRESULT (WINAPI *get_scrolling)(IHTMLFrameBase *This,BSTR *p);
    END_INTERFACE
  } IHTMLFrameBaseVtbl;
  interface IHTMLFrameBase {
    CONST_VTBL struct IHTMLFrameBaseVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFrameBase_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFrameBase_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFrameBase_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFrameBase_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFrameBase_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFrameBase_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFrameBase_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFrameBase_put_src(This,v) (This)->lpVtbl->put_src(This,v)
#define IHTMLFrameBase_get_src(This,p) (This)->lpVtbl->get_src(This,p)
#define IHTMLFrameBase_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLFrameBase_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLFrameBase_put_border(This,v) (This)->lpVtbl->put_border(This,v)
#define IHTMLFrameBase_get_border(This,p) (This)->lpVtbl->get_border(This,p)
#define IHTMLFrameBase_put_frameBorder(This,v) (This)->lpVtbl->put_frameBorder(This,v)
#define IHTMLFrameBase_get_frameBorder(This,p) (This)->lpVtbl->get_frameBorder(This,p)
#define IHTMLFrameBase_put_frameSpacing(This,v) (This)->lpVtbl->put_frameSpacing(This,v)
#define IHTMLFrameBase_get_frameSpacing(This,p) (This)->lpVtbl->get_frameSpacing(This,p)
#define IHTMLFrameBase_put_marginWidth(This,v) (This)->lpVtbl->put_marginWidth(This,v)
#define IHTMLFrameBase_get_marginWidth(This,p) (This)->lpVtbl->get_marginWidth(This,p)
#define IHTMLFrameBase_put_marginHeight(This,v) (This)->lpVtbl->put_marginHeight(This,v)
#define IHTMLFrameBase_get_marginHeight(This,p) (This)->lpVtbl->get_marginHeight(This,p)
#define IHTMLFrameBase_put_noResize(This,v) (This)->lpVtbl->put_noResize(This,v)
#define IHTMLFrameBase_get_noResize(This,p) (This)->lpVtbl->get_noResize(This,p)
#define IHTMLFrameBase_put_scrolling(This,v) (This)->lpVtbl->put_scrolling(This,v)
#define IHTMLFrameBase_get_scrolling(This,p) (This)->lpVtbl->get_scrolling(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLFrameBase_put_src_Proxy(IHTMLFrameBase *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_src_Proxy(IHTMLFrameBase *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_name_Proxy(IHTMLFrameBase *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_name_Proxy(IHTMLFrameBase *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_border_Proxy(IHTMLFrameBase *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_border_Proxy(IHTMLFrameBase *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_frameBorder_Proxy(IHTMLFrameBase *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase_put_frameBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_frameBorder_Proxy(IHTMLFrameBase *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase_get_frameBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_frameSpacing_Proxy(IHTMLFrameBase *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase_put_frameSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_frameSpacing_Proxy(IHTMLFrameBase *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase_get_frameSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_marginWidth_Proxy(IHTMLFrameBase *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase_put_marginWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_marginWidth_Proxy(IHTMLFrameBase *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase_get_marginWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_marginHeight_Proxy(IHTMLFrameBase *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase_put_marginHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_marginHeight_Proxy(IHTMLFrameBase *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase_get_marginHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_noResize_Proxy(IHTMLFrameBase *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLFrameBase_put_noResize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_noResize_Proxy(IHTMLFrameBase *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLFrameBase_get_noResize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_put_scrolling_Proxy(IHTMLFrameBase *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase_put_scrolling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase_get_scrolling_Proxy(IHTMLFrameBase *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase_get_scrolling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLScreen_INTERFACE_DEFINED__
#define __IHTMLScreen_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLScreen;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLScreen : public IDispatch {
  public:
    virtual HRESULT WINAPI get_colorDepth(long *p) = 0;
    virtual HRESULT WINAPI put_bufferDepth(long v) = 0;
    virtual HRESULT WINAPI get_bufferDepth(long *p) = 0;
    virtual HRESULT WINAPI get_width(long *p) = 0;
    virtual HRESULT WINAPI get_height(long *p) = 0;
    virtual HRESULT WINAPI put_updateInterval(long v) = 0;
    virtual HRESULT WINAPI get_updateInterval(long *p) = 0;
    virtual HRESULT WINAPI get_availHeight(long *p) = 0;
    virtual HRESULT WINAPI get_availWidth(long *p) = 0;
    virtual HRESULT WINAPI get_fontSmoothingEnabled(VARIANT_BOOL *p) = 0;
  };
#else
  typedef struct IHTMLScreenVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLScreen *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLScreen *This);
      ULONG (WINAPI *Release)(IHTMLScreen *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLScreen *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLScreen *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLScreen *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLScreen *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_colorDepth)(IHTMLScreen *This,long *p);
      HRESULT (WINAPI *put_bufferDepth)(IHTMLScreen *This,long v);
      HRESULT (WINAPI *get_bufferDepth)(IHTMLScreen *This,long *p);
      HRESULT (WINAPI *get_width)(IHTMLScreen *This,long *p);
      HRESULT (WINAPI *get_height)(IHTMLScreen *This,long *p);
      HRESULT (WINAPI *put_updateInterval)(IHTMLScreen *This,long v);
      HRESULT (WINAPI *get_updateInterval)(IHTMLScreen *This,long *p);
      HRESULT (WINAPI *get_availHeight)(IHTMLScreen *This,long *p);
      HRESULT (WINAPI *get_availWidth)(IHTMLScreen *This,long *p);
      HRESULT (WINAPI *get_fontSmoothingEnabled)(IHTMLScreen *This,VARIANT_BOOL *p);
    END_INTERFACE
  } IHTMLScreenVtbl;
  interface IHTMLScreen {
    CONST_VTBL struct IHTMLScreenVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLScreen_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLScreen_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLScreen_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLScreen_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLScreen_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLScreen_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLScreen_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLScreen_get_colorDepth(This,p) (This)->lpVtbl->get_colorDepth(This,p)
#define IHTMLScreen_put_bufferDepth(This,v) (This)->lpVtbl->put_bufferDepth(This,v)
#define IHTMLScreen_get_bufferDepth(This,p) (This)->lpVtbl->get_bufferDepth(This,p)
#define IHTMLScreen_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLScreen_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLScreen_put_updateInterval(This,v) (This)->lpVtbl->put_updateInterval(This,v)
#define IHTMLScreen_get_updateInterval(This,p) (This)->lpVtbl->get_updateInterval(This,p)
#define IHTMLScreen_get_availHeight(This,p) (This)->lpVtbl->get_availHeight(This,p)
#define IHTMLScreen_get_availWidth(This,p) (This)->lpVtbl->get_availWidth(This,p)
#define IHTMLScreen_get_fontSmoothingEnabled(This,p) (This)->lpVtbl->get_fontSmoothingEnabled(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLScreen_get_colorDepth_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_colorDepth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_put_bufferDepth_Proxy(IHTMLScreen *This,long v);
  void __RPC_STUB IHTMLScreen_put_bufferDepth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_bufferDepth_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_bufferDepth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_width_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_height_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_put_updateInterval_Proxy(IHTMLScreen *This,long v);
  void __RPC_STUB IHTMLScreen_put_updateInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_updateInterval_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_updateInterval_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_availHeight_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_availHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_availWidth_Proxy(IHTMLScreen *This,long *p);
  void __RPC_STUB IHTMLScreen_get_availWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen_get_fontSmoothingEnabled_Proxy(IHTMLScreen *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLScreen_get_fontSmoothingEnabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLScreen2_INTERFACE_DEFINED__
#define __IHTMLScreen2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLScreen2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLScreen2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_logicalXDPI(long *p) = 0;
    virtual HRESULT WINAPI get_logicalYDPI(long *p) = 0;
    virtual HRESULT WINAPI get_deviceXDPI(long *p) = 0;
    virtual HRESULT WINAPI get_deviceYDPI(long *p) = 0;
  };
#else
  typedef struct IHTMLScreen2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLScreen2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLScreen2 *This);
      ULONG (WINAPI *Release)(IHTMLScreen2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLScreen2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLScreen2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLScreen2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLScreen2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_logicalXDPI)(IHTMLScreen2 *This,long *p);
      HRESULT (WINAPI *get_logicalYDPI)(IHTMLScreen2 *This,long *p);
      HRESULT (WINAPI *get_deviceXDPI)(IHTMLScreen2 *This,long *p);
      HRESULT (WINAPI *get_deviceYDPI)(IHTMLScreen2 *This,long *p);
    END_INTERFACE
  } IHTMLScreen2Vtbl;
  interface IHTMLScreen2 {
    CONST_VTBL struct IHTMLScreen2Vtbl *lpVtbl;
  };

#ifdef COBJMACROS
#define IHTMLScreen2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLScreen2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLScreen2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLScreen2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLScreen2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLScreen2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLScreen2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLScreen2_get_logicalXDPI(This,p) (This)->lpVtbl->get_logicalXDPI(This,p)
#define IHTMLScreen2_get_logicalYDPI(This,p) (This)->lpVtbl->get_logicalYDPI(This,p)
#define IHTMLScreen2_get_deviceXDPI(This,p) (This)->lpVtbl->get_deviceXDPI(This,p)
#define IHTMLScreen2_get_deviceYDPI(This,p) (This)->lpVtbl->get_deviceYDPI(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLScreen2_get_logicalXDPI_Proxy(IHTMLScreen2 *This,long *p);
  void __RPC_STUB IHTMLScreen2_get_logicalXDPI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen2_get_logicalYDPI_Proxy(IHTMLScreen2 *This,long *p);
  void __RPC_STUB IHTMLScreen2_get_logicalYDPI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen2_get_deviceXDPI_Proxy(IHTMLScreen2 *This,long *p);
  void __RPC_STUB IHTMLScreen2_get_deviceXDPI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScreen2_get_deviceYDPI_Proxy(IHTMLScreen2 *This,long *p);
  void __RPC_STUB IHTMLScreen2_get_deviceYDPI_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLWindow4_INTERFACE_DEFINED__
#define __IHTMLWindow4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLWindow4;

#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLWindow4 : public IDispatch {
  public:
    virtual HRESULT WINAPI createPopup(VARIANT *varArgIn,IDispatch **ppPopup) = 0;
    virtual HRESULT WINAPI get_frameElement(IHTMLFrameBase **p) = 0;
  };
#else
  typedef struct IHTMLWindow4Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLWindow4 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLWindow4 *This);
      ULONG (WINAPI *Release)(IHTMLWindow4 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLWindow4 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLWindow4 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLWindow4 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLWindow4 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *createPopup)(IHTMLWindow4 *This,VARIANT *varArgIn,IDispatch **ppPopup);
      HRESULT (WINAPI *get_frameElement)(IHTMLWindow4 *This,IHTMLFrameBase **p);
    END_INTERFACE
  } IHTMLWindow4Vtbl;
  interface IHTMLWindow4 {
    CONST_VTBL struct IHTMLWindow4Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLWindow4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLWindow4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLWindow4_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLWindow4_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLWindow4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLWindow4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLWindow4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLWindow4_createPopup(This,varArgIn,ppPopup) (This)->lpVtbl->createPopup(This,varArgIn,ppPopup)
#define IHTMLWindow4_get_frameElement(This,p) (This)->lpVtbl->get_frameElement(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLWindow4_createPopup_Proxy(IHTMLWindow4 *This,VARIANT *varArgIn,IDispatch **ppPopup);
  void __RPC_STUB IHTMLWindow4_createPopup_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLWindow4_get_frameElement_Proxy(IHTMLWindow4 *This,IHTMLFrameBase **p);
  void __RPC_STUB IHTMLWindow4_get_frameElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_FramesCollection;
#ifdef __cplusplus
  class FramesCollection;
#endif

#ifndef __DispHTMLScreen_DISPINTERFACE_DEFINED__
#define __DispHTMLScreen_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLScreen;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLScreen : public IDispatch {
  };
#else
  typedef struct DispHTMLScreenVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLScreen *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLScreen *This);
      ULONG (WINAPI *Release)(DispHTMLScreen *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLScreen *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLScreen *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLScreen *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLScreen *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLScreenVtbl;
  interface DispHTMLScreen {
    CONST_VTBL struct DispHTMLScreenVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLScreen_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLScreen_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLScreen_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLScreen_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLScreen_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLScreen_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLScreen_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLScreen;
#ifdef __cplusplus
  class HTMLScreen;
#endif

#ifndef __DispHTMLWindow2_DISPINTERFACE_DEFINED__
#define __DispHTMLWindow2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLWindow2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLWindow2 : public IDispatch {
  };
#else
  typedef struct DispHTMLWindow2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLWindow2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLWindow2 *This);
      ULONG (WINAPI *Release)(DispHTMLWindow2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLWindow2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLWindow2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLWindow2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLWindow2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLWindow2Vtbl;
  interface DispHTMLWindow2 {
    CONST_VTBL struct DispHTMLWindow2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLWindow2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLWindow2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLWindow2_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLWindow2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLWindow2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLWindow2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLWindow2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLWindow2;
#ifdef __cplusplus
  class HTMLWindow2;
#endif

#ifndef __DispHTMLWindowProxy_DISPINTERFACE_DEFINED__
#define __DispHTMLWindowProxy_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLWindowProxy;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLWindowProxy : public IDispatch {
  };
#else
  typedef struct DispHTMLWindowProxyVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLWindowProxy *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLWindowProxy *This);
      ULONG (WINAPI *Release)(DispHTMLWindowProxy *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLWindowProxy *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLWindowProxy *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLWindowProxy *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLWindowProxy *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLWindowProxyVtbl;
  interface DispHTMLWindowProxy {
    CONST_VTBL struct DispHTMLWindowProxyVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLWindowProxy_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLWindowProxy_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLWindowProxy_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLWindowProxy_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLWindowProxy_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLWindowProxy_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLWindowProxy_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLWindowProxy;
#ifdef __cplusplus
  class HTMLWindowProxy;
#endif

#ifndef __HTMLDocumentEvents2_DISPINTERFACE_DEFINED__
#define __HTMLDocumentEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLDocumentEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLDocumentEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLDocumentEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLDocumentEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLDocumentEvents2 *This);
      ULONG (WINAPI *Release)(HTMLDocumentEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLDocumentEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLDocumentEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLDocumentEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLDocumentEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLDocumentEvents2Vtbl;
  interface HTMLDocumentEvents2 {
    CONST_VTBL struct HTMLDocumentEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLDocumentEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLDocumentEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLDocumentEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLDocumentEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLDocumentEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLDocumentEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLDocumentEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLDocumentEvents_DISPINTERFACE_DEFINED__
#define __HTMLDocumentEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLDocumentEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLDocumentEvents : public IDispatch {
  };
#else
  typedef struct HTMLDocumentEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLDocumentEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLDocumentEvents *This);
      ULONG (WINAPI *Release)(HTMLDocumentEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLDocumentEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLDocumentEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLDocumentEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLDocumentEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLDocumentEventsVtbl;
  interface HTMLDocumentEvents {
    CONST_VTBL struct HTMLDocumentEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLDocumentEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLDocumentEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLDocumentEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLDocumentEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLDocumentEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLDocumentEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLDocumentEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLDocument3_INTERFACE_DEFINED__
#define __IHTMLDocument3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDocument3 : public IDispatch {
  public:
    virtual HRESULT WINAPI releaseCapture(void) = 0;
    virtual HRESULT WINAPI recalc(VARIANT_BOOL fForce = 0) = 0;
    virtual HRESULT WINAPI createTextNode(BSTR text,IHTMLDOMNode **newTextNode) = 0;
    virtual HRESULT WINAPI get_documentElement(IHTMLElement **p) = 0;
    virtual HRESULT WINAPI get_uniqueID(BSTR *p) = 0;
    virtual HRESULT WINAPI attachEvent(BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI detachEvent(BSTR event,IDispatch *pDisp) = 0;
    virtual HRESULT WINAPI put_onrowsdelete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowsdelete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onrowsinserted(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onrowsinserted(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_oncellchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncellchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondatasetchanged(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondatasetchanged(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondataavailable(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondataavailable(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondatasetcomplete(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondatasetcomplete(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onpropertychange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onpropertychange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dir(BSTR v) = 0;
    virtual HRESULT WINAPI get_dir(BSTR *p) = 0;
    virtual HRESULT WINAPI put_oncontextmenu(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncontextmenu(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onstop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onstop(VARIANT *p) = 0;
    virtual HRESULT WINAPI createDocumentFragment(IHTMLDocument2 **pNewDoc) = 0;
    virtual HRESULT WINAPI get_parentDocument(IHTMLDocument2 **p) = 0;
    virtual HRESULT WINAPI put_enableDownload(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_enableDownload(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_baseUrl(BSTR v) = 0;
    virtual HRESULT WINAPI get_baseUrl(BSTR *p) = 0;
    virtual HRESULT WINAPI get_childNodes(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_inheritStyleSheets(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_inheritStyleSheets(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onbeforeeditfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeeditfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI getElementsByName(BSTR v,IHTMLElementCollection **pelColl) = 0;
    virtual HRESULT WINAPI getElementById(BSTR v,IHTMLElement **pel) = 0;
    virtual HRESULT WINAPI getElementsByTagName(BSTR v,IHTMLElementCollection **pelColl) = 0;
  };
#else
  typedef struct IHTMLDocument3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDocument3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDocument3 *This);
      ULONG (WINAPI *Release)(IHTMLDocument3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDocument3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDocument3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDocument3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDocument3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *releaseCapture)(IHTMLDocument3 *This);
      HRESULT (WINAPI *recalc)(IHTMLDocument3 *This,VARIANT_BOOL fForce);
      HRESULT (WINAPI *createTextNode)(IHTMLDocument3 *This,BSTR text,IHTMLDOMNode **newTextNode);
      HRESULT (WINAPI *get_documentElement)(IHTMLDocument3 *This,IHTMLElement **p);
      HRESULT (WINAPI *get_uniqueID)(IHTMLDocument3 *This,BSTR *p);
      HRESULT (WINAPI *attachEvent)(IHTMLDocument3 *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
      HRESULT (WINAPI *detachEvent)(IHTMLDocument3 *This,BSTR event,IDispatch *pDisp);
      HRESULT (WINAPI *put_onrowsdelete)(IHTMLDocument3 *This,VARIANT v);
      HRESULT (WINAPI *get_onrowsdelete)(IHTMLDocument3 *This,VARIANT *p);
      HRESULT (WINAPI *put_onrowsinserted)(IHTMLDocument3 *This,VARIANT v);
      HRESULT (WINAPI *get_onrowsinserted)(IHTMLDocument3 *This,VARIANT *p);
      HRESULT (WINAPI *put_oncellchange)(IHTMLDocument3 *This,VARIANT v);
      HRESULT (WINAPI *get_oncellchange)(IHTMLDocument3 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondatasetchanged)(IHTMLDocument3 *This,VARIANT v);
      HRESULT (WINAPI *get_ondatasetchanged)(IHTMLDocument3 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondataavailable)(IHTMLDocument3 *This,VARIANT v);
      HRESULT (WINAPI *get_ondataavailable)(IHTMLDocument3 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondatasetcomplete)(IHTMLDocument3 *This,VARIANT v);
      HRESULT (WINAPI *get_ondatasetcomplete)(IHTMLDocument3 *This,VARIANT *p);
      HRESULT (WINAPI *put_onpropertychange)(IHTMLDocument3 *This,VARIANT v);
      HRESULT (WINAPI *get_onpropertychange)(IHTMLDocument3 *This,VARIANT *p);
      HRESULT (WINAPI *put_dir)(IHTMLDocument3 *This,BSTR v);
      HRESULT (WINAPI *get_dir)(IHTMLDocument3 *This,BSTR *p);
      HRESULT (WINAPI *put_oncontextmenu)(IHTMLDocument3 *This,VARIANT v);
      HRESULT (WINAPI *get_oncontextmenu)(IHTMLDocument3 *This,VARIANT *p);
      HRESULT (WINAPI *put_onstop)(IHTMLDocument3 *This,VARIANT v);
      HRESULT (WINAPI *get_onstop)(IHTMLDocument3 *This,VARIANT *p);
      HRESULT (WINAPI *createDocumentFragment)(IHTMLDocument3 *This,IHTMLDocument2 **pNewDoc);
      HRESULT (WINAPI *get_parentDocument)(IHTMLDocument3 *This,IHTMLDocument2 **p);
      HRESULT (WINAPI *put_enableDownload)(IHTMLDocument3 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_enableDownload)(IHTMLDocument3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_baseUrl)(IHTMLDocument3 *This,BSTR v);
      HRESULT (WINAPI *get_baseUrl)(IHTMLDocument3 *This,BSTR *p);
      HRESULT (WINAPI *get_childNodes)(IHTMLDocument3 *This,IDispatch **p);
      HRESULT (WINAPI *put_inheritStyleSheets)(IHTMLDocument3 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_inheritStyleSheets)(IHTMLDocument3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_onbeforeeditfocus)(IHTMLDocument3 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforeeditfocus)(IHTMLDocument3 *This,VARIANT *p);
      HRESULT (WINAPI *getElementsByName)(IHTMLDocument3 *This,BSTR v,IHTMLElementCollection **pelColl);
      HRESULT (WINAPI *getElementById)(IHTMLDocument3 *This,BSTR v,IHTMLElement **pel);
      HRESULT (WINAPI *getElementsByTagName)(IHTMLDocument3 *This,BSTR v,IHTMLElementCollection **pelColl);
    END_INTERFACE
  } IHTMLDocument3Vtbl;
  interface IHTMLDocument3 {
    CONST_VTBL struct IHTMLDocument3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDocument3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDocument3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDocument3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDocument3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDocument3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDocument3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDocument3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDocument3_releaseCapture(This) (This)->lpVtbl->releaseCapture(This)
#define IHTMLDocument3_recalc(This,fForce) (This)->lpVtbl->recalc(This,fForce)
#define IHTMLDocument3_createTextNode(This,text,newTextNode) (This)->lpVtbl->createTextNode(This,text,newTextNode)
#define IHTMLDocument3_get_documentElement(This,p) (This)->lpVtbl->get_documentElement(This,p)
#define IHTMLDocument3_get_uniqueID(This,p) (This)->lpVtbl->get_uniqueID(This,p)
#define IHTMLDocument3_attachEvent(This,event,pDisp,pfResult) (This)->lpVtbl->attachEvent(This,event,pDisp,pfResult)
#define IHTMLDocument3_detachEvent(This,event,pDisp) (This)->lpVtbl->detachEvent(This,event,pDisp)
#define IHTMLDocument3_put_onrowsdelete(This,v) (This)->lpVtbl->put_onrowsdelete(This,v)
#define IHTMLDocument3_get_onrowsdelete(This,p) (This)->lpVtbl->get_onrowsdelete(This,p)
#define IHTMLDocument3_put_onrowsinserted(This,v) (This)->lpVtbl->put_onrowsinserted(This,v)
#define IHTMLDocument3_get_onrowsinserted(This,p) (This)->lpVtbl->get_onrowsinserted(This,p)
#define IHTMLDocument3_put_oncellchange(This,v) (This)->lpVtbl->put_oncellchange(This,v)
#define IHTMLDocument3_get_oncellchange(This,p) (This)->lpVtbl->get_oncellchange(This,p)
#define IHTMLDocument3_put_ondatasetchanged(This,v) (This)->lpVtbl->put_ondatasetchanged(This,v)
#define IHTMLDocument3_get_ondatasetchanged(This,p) (This)->lpVtbl->get_ondatasetchanged(This,p)
#define IHTMLDocument3_put_ondataavailable(This,v) (This)->lpVtbl->put_ondataavailable(This,v)
#define IHTMLDocument3_get_ondataavailable(This,p) (This)->lpVtbl->get_ondataavailable(This,p)
#define IHTMLDocument3_put_ondatasetcomplete(This,v) (This)->lpVtbl->put_ondatasetcomplete(This,v)
#define IHTMLDocument3_get_ondatasetcomplete(This,p) (This)->lpVtbl->get_ondatasetcomplete(This,p)
#define IHTMLDocument3_put_onpropertychange(This,v) (This)->lpVtbl->put_onpropertychange(This,v)
#define IHTMLDocument3_get_onpropertychange(This,p) (This)->lpVtbl->get_onpropertychange(This,p)
#define IHTMLDocument3_put_dir(This,v) (This)->lpVtbl->put_dir(This,v)
#define IHTMLDocument3_get_dir(This,p) (This)->lpVtbl->get_dir(This,p)
#define IHTMLDocument3_put_oncontextmenu(This,v) (This)->lpVtbl->put_oncontextmenu(This,v)
#define IHTMLDocument3_get_oncontextmenu(This,p) (This)->lpVtbl->get_oncontextmenu(This,p)
#define IHTMLDocument3_put_onstop(This,v) (This)->lpVtbl->put_onstop(This,v)
#define IHTMLDocument3_get_onstop(This,p) (This)->lpVtbl->get_onstop(This,p)
#define IHTMLDocument3_createDocumentFragment(This,pNewDoc) (This)->lpVtbl->createDocumentFragment(This,pNewDoc)
#define IHTMLDocument3_get_parentDocument(This,p) (This)->lpVtbl->get_parentDocument(This,p)
#define IHTMLDocument3_put_enableDownload(This,v) (This)->lpVtbl->put_enableDownload(This,v)
#define IHTMLDocument3_get_enableDownload(This,p) (This)->lpVtbl->get_enableDownload(This,p)
#define IHTMLDocument3_put_baseUrl(This,v) (This)->lpVtbl->put_baseUrl(This,v)
#define IHTMLDocument3_get_baseUrl(This,p) (This)->lpVtbl->get_baseUrl(This,p)
#define IHTMLDocument3_get_childNodes(This,p) (This)->lpVtbl->get_childNodes(This,p)
#define IHTMLDocument3_put_inheritStyleSheets(This,v) (This)->lpVtbl->put_inheritStyleSheets(This,v)
#define IHTMLDocument3_get_inheritStyleSheets(This,p) (This)->lpVtbl->get_inheritStyleSheets(This,p)
#define IHTMLDocument3_put_onbeforeeditfocus(This,v) (This)->lpVtbl->put_onbeforeeditfocus(This,v)
#define IHTMLDocument3_get_onbeforeeditfocus(This,p) (This)->lpVtbl->get_onbeforeeditfocus(This,p)
#define IHTMLDocument3_getElementsByName(This,v,pelColl) (This)->lpVtbl->getElementsByName(This,v,pelColl)
#define IHTMLDocument3_getElementById(This,v,pel) (This)->lpVtbl->getElementById(This,v,pel)
#define IHTMLDocument3_getElementsByTagName(This,v,pelColl) (This)->lpVtbl->getElementsByTagName(This,v,pelColl)
#endif
#endif

  HRESULT WINAPI IHTMLDocument3_releaseCapture_Proxy(IHTMLDocument3 *This);
  void __RPC_STUB IHTMLDocument3_releaseCapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_recalc_Proxy(IHTMLDocument3 *This,VARIANT_BOOL fForce);
  void __RPC_STUB IHTMLDocument3_recalc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_createTextNode_Proxy(IHTMLDocument3 *This,BSTR text,IHTMLDOMNode **newTextNode);
  void __RPC_STUB IHTMLDocument3_createTextNode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_documentElement_Proxy(IHTMLDocument3 *This,IHTMLElement **p);
  void __RPC_STUB IHTMLDocument3_get_documentElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_uniqueID_Proxy(IHTMLDocument3 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument3_get_uniqueID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_attachEvent_Proxy(IHTMLDocument3 *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLDocument3_attachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_detachEvent_Proxy(IHTMLDocument3 *This,BSTR event,IDispatch *pDisp);
  void __RPC_STUB IHTMLDocument3_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onrowsdelete_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onrowsdelete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onrowsdelete_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onrowsdelete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onrowsinserted_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onrowsinserted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onrowsinserted_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onrowsinserted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_oncellchange_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_oncellchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_oncellchange_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_oncellchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_ondatasetchanged_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_ondatasetchanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_ondatasetchanged_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_ondatasetchanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_ondataavailable_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_ondataavailable_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_ondataavailable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_ondatasetcomplete_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_ondatasetcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_ondatasetcomplete_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_ondatasetcomplete_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onpropertychange_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onpropertychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onpropertychange_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onpropertychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_dir_Proxy(IHTMLDocument3 *This,BSTR v);
  void __RPC_STUB IHTMLDocument3_put_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_dir_Proxy(IHTMLDocument3 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument3_get_dir_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_oncontextmenu_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_oncontextmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_oncontextmenu_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_oncontextmenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onstop_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onstop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onstop_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onstop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_createDocumentFragment_Proxy(IHTMLDocument3 *This,IHTMLDocument2 **pNewDoc);
  void __RPC_STUB IHTMLDocument3_createDocumentFragment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_parentDocument_Proxy(IHTMLDocument3 *This,IHTMLDocument2 **p);
  void __RPC_STUB IHTMLDocument3_get_parentDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_enableDownload_Proxy(IHTMLDocument3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDocument3_put_enableDownload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_enableDownload_Proxy(IHTMLDocument3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDocument3_get_enableDownload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_baseUrl_Proxy(IHTMLDocument3 *This,BSTR v);
  void __RPC_STUB IHTMLDocument3_put_baseUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_baseUrl_Proxy(IHTMLDocument3 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument3_get_baseUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_childNodes_Proxy(IHTMLDocument3 *This,IDispatch **p);
  void __RPC_STUB IHTMLDocument3_get_childNodes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_inheritStyleSheets_Proxy(IHTMLDocument3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLDocument3_put_inheritStyleSheets_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_inheritStyleSheets_Proxy(IHTMLDocument3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLDocument3_get_inheritStyleSheets_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_put_onbeforeeditfocus_Proxy(IHTMLDocument3 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument3_put_onbeforeeditfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_get_onbeforeeditfocus_Proxy(IHTMLDocument3 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument3_get_onbeforeeditfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_getElementsByName_Proxy(IHTMLDocument3 *This,BSTR v,IHTMLElementCollection **pelColl);
  void __RPC_STUB IHTMLDocument3_getElementsByName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_getElementById_Proxy(IHTMLDocument3 *This,BSTR v,IHTMLElement **pel);
  void __RPC_STUB IHTMLDocument3_getElementById_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument3_getElementsByTagName_Proxy(IHTMLDocument3 *This,BSTR v,IHTMLElementCollection **pelColl);
  void __RPC_STUB IHTMLDocument3_getElementsByTagName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDocument4_INTERFACE_DEFINED__
#define __IHTMLDocument4_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument4;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDocument4 : public IDispatch {
  public:
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI hasFocus(VARIANT_BOOL *pfFocus) = 0;
    virtual HRESULT WINAPI put_onselectionchange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onselectionchange(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_namespaces(IDispatch **p) = 0;
    virtual HRESULT WINAPI createDocumentFromUrl(BSTR bstrUrl,BSTR bstrOptions,IHTMLDocument2 **newDoc) = 0;
    virtual HRESULT WINAPI put_media(BSTR v) = 0;
    virtual HRESULT WINAPI get_media(BSTR *p) = 0;
    virtual HRESULT WINAPI createEventObject(VARIANT *pvarEventObject,IHTMLEventObj **ppEventObj) = 0;
    virtual HRESULT WINAPI fireEvent(BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled) = 0;
    virtual HRESULT WINAPI createRenderStyle(BSTR v,IHTMLRenderStyle **ppIHTMLRenderStyle) = 0;
    virtual HRESULT WINAPI put_oncontrolselect(VARIANT v) = 0;
    virtual HRESULT WINAPI get_oncontrolselect(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_URLUnencoded(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLDocument4Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDocument4 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDocument4 *This);
      ULONG (WINAPI *Release)(IHTMLDocument4 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDocument4 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDocument4 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDocument4 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDocument4 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *focus)(IHTMLDocument4 *This);
      HRESULT (WINAPI *hasFocus)(IHTMLDocument4 *This,VARIANT_BOOL *pfFocus);
      HRESULT (WINAPI *put_onselectionchange)(IHTMLDocument4 *This,VARIANT v);
      HRESULT (WINAPI *get_onselectionchange)(IHTMLDocument4 *This,VARIANT *p);
      HRESULT (WINAPI *get_namespaces)(IHTMLDocument4 *This,IDispatch **p);
      HRESULT (WINAPI *createDocumentFromUrl)(IHTMLDocument4 *This,BSTR bstrUrl,BSTR bstrOptions,IHTMLDocument2 **newDoc);
      HRESULT (WINAPI *put_media)(IHTMLDocument4 *This,BSTR v);
      HRESULT (WINAPI *get_media)(IHTMLDocument4 *This,BSTR *p);
      HRESULT (WINAPI *createEventObject)(IHTMLDocument4 *This,VARIANT *pvarEventObject,IHTMLEventObj **ppEventObj);
      HRESULT (WINAPI *fireEvent)(IHTMLDocument4 *This,BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled);
      HRESULT (WINAPI *createRenderStyle)(IHTMLDocument4 *This,BSTR v,IHTMLRenderStyle **ppIHTMLRenderStyle);
      HRESULT (WINAPI *put_oncontrolselect)(IHTMLDocument4 *This,VARIANT v);
      HRESULT (WINAPI *get_oncontrolselect)(IHTMLDocument4 *This,VARIANT *p);
      HRESULT (WINAPI *get_URLUnencoded)(IHTMLDocument4 *This,BSTR *p);
    END_INTERFACE
  } IHTMLDocument4Vtbl;
  interface IHTMLDocument4 {
    CONST_VTBL struct IHTMLDocument4Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDocument4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDocument4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDocument4_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDocument4_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDocument4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDocument4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDocument4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDocument4_focus(This) (This)->lpVtbl->focus(This)
#define IHTMLDocument4_hasFocus(This,pfFocus) (This)->lpVtbl->hasFocus(This,pfFocus)
#define IHTMLDocument4_put_onselectionchange(This,v) (This)->lpVtbl->put_onselectionchange(This,v)
#define IHTMLDocument4_get_onselectionchange(This,p) (This)->lpVtbl->get_onselectionchange(This,p)
#define IHTMLDocument4_get_namespaces(This,p) (This)->lpVtbl->get_namespaces(This,p)
#define IHTMLDocument4_createDocumentFromUrl(This,bstrUrl,bstrOptions,newDoc) (This)->lpVtbl->createDocumentFromUrl(This,bstrUrl,bstrOptions,newDoc)
#define IHTMLDocument4_put_media(This,v) (This)->lpVtbl->put_media(This,v)
#define IHTMLDocument4_get_media(This,p) (This)->lpVtbl->get_media(This,p)
#define IHTMLDocument4_createEventObject(This,pvarEventObject,ppEventObj) (This)->lpVtbl->createEventObject(This,pvarEventObject,ppEventObj)
#define IHTMLDocument4_fireEvent(This,bstrEventName,pvarEventObject,pfCancelled) (This)->lpVtbl->fireEvent(This,bstrEventName,pvarEventObject,pfCancelled)
#define IHTMLDocument4_createRenderStyle(This,v,ppIHTMLRenderStyle) (This)->lpVtbl->createRenderStyle(This,v,ppIHTMLRenderStyle)
#define IHTMLDocument4_put_oncontrolselect(This,v) (This)->lpVtbl->put_oncontrolselect(This,v)
#define IHTMLDocument4_get_oncontrolselect(This,p) (This)->lpVtbl->get_oncontrolselect(This,p)
#define IHTMLDocument4_get_URLUnencoded(This,p) (This)->lpVtbl->get_URLUnencoded(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLDocument4_focus_Proxy(IHTMLDocument4 *This);
  void __RPC_STUB IHTMLDocument4_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_hasFocus_Proxy(IHTMLDocument4 *This,VARIANT_BOOL *pfFocus);
  void __RPC_STUB IHTMLDocument4_hasFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_put_onselectionchange_Proxy(IHTMLDocument4 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument4_put_onselectionchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_onselectionchange_Proxy(IHTMLDocument4 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument4_get_onselectionchange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_namespaces_Proxy(IHTMLDocument4 *This,IDispatch **p);
  void __RPC_STUB IHTMLDocument4_get_namespaces_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_createDocumentFromUrl_Proxy(IHTMLDocument4 *This,BSTR bstrUrl,BSTR bstrOptions,IHTMLDocument2 **newDoc);
  void __RPC_STUB IHTMLDocument4_createDocumentFromUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_put_media_Proxy(IHTMLDocument4 *This,BSTR v);
  void __RPC_STUB IHTMLDocument4_put_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_media_Proxy(IHTMLDocument4 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument4_get_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_createEventObject_Proxy(IHTMLDocument4 *This,VARIANT *pvarEventObject,IHTMLEventObj **ppEventObj);
  void __RPC_STUB IHTMLDocument4_createEventObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_fireEvent_Proxy(IHTMLDocument4 *This,BSTR bstrEventName,VARIANT *pvarEventObject,VARIANT_BOOL *pfCancelled);
  void __RPC_STUB IHTMLDocument4_fireEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_createRenderStyle_Proxy(IHTMLDocument4 *This,BSTR v,IHTMLRenderStyle **ppIHTMLRenderStyle);
  void __RPC_STUB IHTMLDocument4_createRenderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_put_oncontrolselect_Proxy(IHTMLDocument4 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument4_put_oncontrolselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_oncontrolselect_Proxy(IHTMLDocument4 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument4_get_oncontrolselect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument4_get_URLUnencoded_Proxy(IHTMLDocument4 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument4_get_URLUnencoded_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDocument5_INTERFACE_DEFINED__
#define __IHTMLDocument5_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDocument5;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDocument5 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_onmousewheel(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onmousewheel(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_doctype(IHTMLDOMNode **p) = 0;
    virtual HRESULT WINAPI get_implementation(IHTMLDOMImplementation **p) = 0;
    virtual HRESULT WINAPI createAttribute(BSTR bstrattrName,IHTMLDOMAttribute **ppattribute) = 0;
    virtual HRESULT WINAPI createComment(BSTR bstrdata,IHTMLDOMNode **ppRetNode) = 0;
    virtual HRESULT WINAPI put_onfocusin(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocusin(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocusout(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocusout(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_ondeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_ondeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforedeactivate(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforedeactivate(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_compatMode(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLDocument5Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDocument5 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDocument5 *This);
      ULONG (WINAPI *Release)(IHTMLDocument5 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDocument5 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDocument5 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDocument5 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDocument5 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_onmousewheel)(IHTMLDocument5 *This,VARIANT v);
      HRESULT (WINAPI *get_onmousewheel)(IHTMLDocument5 *This,VARIANT *p);
      HRESULT (WINAPI *get_doctype)(IHTMLDocument5 *This,IHTMLDOMNode **p);
      HRESULT (WINAPI *get_implementation)(IHTMLDocument5 *This,IHTMLDOMImplementation **p);
      HRESULT (WINAPI *createAttribute)(IHTMLDocument5 *This,BSTR bstrattrName,IHTMLDOMAttribute **ppattribute);
      HRESULT (WINAPI *createComment)(IHTMLDocument5 *This,BSTR bstrdata,IHTMLDOMNode **ppRetNode);
      HRESULT (WINAPI *put_onfocusin)(IHTMLDocument5 *This,VARIANT v);
      HRESULT (WINAPI *get_onfocusin)(IHTMLDocument5 *This,VARIANT *p);
      HRESULT (WINAPI *put_onfocusout)(IHTMLDocument5 *This,VARIANT v);
      HRESULT (WINAPI *get_onfocusout)(IHTMLDocument5 *This,VARIANT *p);
      HRESULT (WINAPI *put_onactivate)(IHTMLDocument5 *This,VARIANT v);
      HRESULT (WINAPI *get_onactivate)(IHTMLDocument5 *This,VARIANT *p);
      HRESULT (WINAPI *put_ondeactivate)(IHTMLDocument5 *This,VARIANT v);
      HRESULT (WINAPI *get_ondeactivate)(IHTMLDocument5 *This,VARIANT *p);
      HRESULT (WINAPI *put_onbeforeactivate)(IHTMLDocument5 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforeactivate)(IHTMLDocument5 *This,VARIANT *p);
      HRESULT (WINAPI *put_onbeforedeactivate)(IHTMLDocument5 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforedeactivate)(IHTMLDocument5 *This,VARIANT *p);
      HRESULT (WINAPI *get_compatMode)(IHTMLDocument5 *This,BSTR *p);
    END_INTERFACE
  } IHTMLDocument5Vtbl;
  interface IHTMLDocument5 {
    CONST_VTBL struct IHTMLDocument5Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDocument5_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDocument5_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDocument5_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDocument5_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDocument5_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDocument5_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDocument5_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDocument5_put_onmousewheel(This,v) (This)->lpVtbl->put_onmousewheel(This,v)
#define IHTMLDocument5_get_onmousewheel(This,p) (This)->lpVtbl->get_onmousewheel(This,p)
#define IHTMLDocument5_get_doctype(This,p) (This)->lpVtbl->get_doctype(This,p)
#define IHTMLDocument5_get_implementation(This,p) (This)->lpVtbl->get_implementation(This,p)
#define IHTMLDocument5_createAttribute(This,bstrattrName,ppattribute) (This)->lpVtbl->createAttribute(This,bstrattrName,ppattribute)
#define IHTMLDocument5_createComment(This,bstrdata,ppRetNode) (This)->lpVtbl->createComment(This,bstrdata,ppRetNode)
#define IHTMLDocument5_put_onfocusin(This,v) (This)->lpVtbl->put_onfocusin(This,v)
#define IHTMLDocument5_get_onfocusin(This,p) (This)->lpVtbl->get_onfocusin(This,p)
#define IHTMLDocument5_put_onfocusout(This,v) (This)->lpVtbl->put_onfocusout(This,v)
#define IHTMLDocument5_get_onfocusout(This,p) (This)->lpVtbl->get_onfocusout(This,p)
#define IHTMLDocument5_put_onactivate(This,v) (This)->lpVtbl->put_onactivate(This,v)
#define IHTMLDocument5_get_onactivate(This,p) (This)->lpVtbl->get_onactivate(This,p)
#define IHTMLDocument5_put_ondeactivate(This,v) (This)->lpVtbl->put_ondeactivate(This,v)
#define IHTMLDocument5_get_ondeactivate(This,p) (This)->lpVtbl->get_ondeactivate(This,p)
#define IHTMLDocument5_put_onbeforeactivate(This,v) (This)->lpVtbl->put_onbeforeactivate(This,v)
#define IHTMLDocument5_get_onbeforeactivate(This,p) (This)->lpVtbl->get_onbeforeactivate(This,p)
#define IHTMLDocument5_put_onbeforedeactivate(This,v) (This)->lpVtbl->put_onbeforedeactivate(This,v)
#define IHTMLDocument5_get_onbeforedeactivate(This,p) (This)->lpVtbl->get_onbeforedeactivate(This,p)
#define IHTMLDocument5_get_compatMode(This,p) (This)->lpVtbl->get_compatMode(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLDocument5_put_onmousewheel_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onmousewheel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onmousewheel_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onmousewheel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_doctype_Proxy(IHTMLDocument5 *This,IHTMLDOMNode **p);
  void __RPC_STUB IHTMLDocument5_get_doctype_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_implementation_Proxy(IHTMLDocument5 *This,IHTMLDOMImplementation **p);
  void __RPC_STUB IHTMLDocument5_get_implementation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_createAttribute_Proxy(IHTMLDocument5 *This,BSTR bstrattrName,IHTMLDOMAttribute **ppattribute);
  void __RPC_STUB IHTMLDocument5_createAttribute_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_createComment_Proxy(IHTMLDocument5 *This,BSTR bstrdata,IHTMLDOMNode **ppRetNode);
  void __RPC_STUB IHTMLDocument5_createComment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onfocusin_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onfocusin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onfocusin_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onfocusin_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onfocusout_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onfocusout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onfocusout_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onfocusout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onactivate_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onactivate_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_ondeactivate_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_ondeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_ondeactivate_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_ondeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onbeforeactivate_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onbeforeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onbeforeactivate_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onbeforeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_put_onbeforedeactivate_Proxy(IHTMLDocument5 *This,VARIANT v);
  void __RPC_STUB IHTMLDocument5_put_onbeforedeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_onbeforedeactivate_Proxy(IHTMLDocument5 *This,VARIANT *p);
  void __RPC_STUB IHTMLDocument5_get_onbeforedeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDocument5_get_compatMode_Proxy(IHTMLDocument5 *This,BSTR *p);
  void __RPC_STUB IHTMLDocument5_get_compatMode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDocument_DISPINTERFACE_DEFINED__
#define __DispHTMLDocument_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDocument;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLDocument : public IDispatch {
  };
#else
  typedef struct DispHTMLDocumentVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLDocument *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLDocument *This);
      ULONG (WINAPI *Release)(DispHTMLDocument *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLDocument *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLDocument *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLDocument *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLDocument *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLDocumentVtbl;
  interface DispHTMLDocument {
    CONST_VTBL struct DispHTMLDocumentVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLDocument_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLDocument_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLDocument_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLDocument_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLDocument_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLDocument_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLDocument_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLDocument;
#ifdef __cplusplus
  class HTMLDocument;
#endif

#ifndef __DWebBridgeEvents_DISPINTERFACE_DEFINED__
#define __DWebBridgeEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DWebBridgeEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DWebBridgeEvents : public IDispatch {
  };
#else
  typedef struct DWebBridgeEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DWebBridgeEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DWebBridgeEvents *This);
      ULONG (WINAPI *Release)(DWebBridgeEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DWebBridgeEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DWebBridgeEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DWebBridgeEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DWebBridgeEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DWebBridgeEventsVtbl;
  interface DWebBridgeEvents {
    CONST_VTBL struct DWebBridgeEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DWebBridgeEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DWebBridgeEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DWebBridgeEvents_Release(This) (This)->lpVtbl->Release(This)
#define DWebBridgeEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DWebBridgeEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DWebBridgeEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DWebBridgeEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IWebBridge_INTERFACE_DEFINED__
#define __IWebBridge_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IWebBridge;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IWebBridge : public IDispatch {
  public:
    virtual HRESULT WINAPI put_URL(BSTR v) = 0;
    virtual HRESULT WINAPI get_URL(BSTR *p) = 0;
    virtual HRESULT WINAPI put_Scrollbar(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_Scrollbar(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_embed(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_embed(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_event(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_readyState(long *p) = 0;
    virtual HRESULT WINAPI AboutBox(void) = 0;
  };
#else
  typedef struct IWebBridgeVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IWebBridge *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IWebBridge *This);
      ULONG (WINAPI *Release)(IWebBridge *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IWebBridge *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IWebBridge *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IWebBridge *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IWebBridge *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_URL)(IWebBridge *This,BSTR v);
      HRESULT (WINAPI *get_URL)(IWebBridge *This,BSTR *p);
      HRESULT (WINAPI *put_Scrollbar)(IWebBridge *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_Scrollbar)(IWebBridge *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_embed)(IWebBridge *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_embed)(IWebBridge *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_event)(IWebBridge *This,IDispatch **p);
      HRESULT (WINAPI *get_readyState)(IWebBridge *This,long *p);
      HRESULT (WINAPI *AboutBox)(IWebBridge *This);
    END_INTERFACE
  } IWebBridgeVtbl;
  interface IWebBridge {
    CONST_VTBL struct IWebBridgeVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IWebBridge_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWebBridge_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWebBridge_Release(This) (This)->lpVtbl->Release(This)
#define IWebBridge_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IWebBridge_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IWebBridge_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IWebBridge_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IWebBridge_put_URL(This,v) (This)->lpVtbl->put_URL(This,v)
#define IWebBridge_get_URL(This,p) (This)->lpVtbl->get_URL(This,p)
#define IWebBridge_put_Scrollbar(This,v) (This)->lpVtbl->put_Scrollbar(This,v)
#define IWebBridge_get_Scrollbar(This,p) (This)->lpVtbl->get_Scrollbar(This,p)
#define IWebBridge_put_embed(This,v) (This)->lpVtbl->put_embed(This,v)
#define IWebBridge_get_embed(This,p) (This)->lpVtbl->get_embed(This,p)
#define IWebBridge_get_event(This,p) (This)->lpVtbl->get_event(This,p)
#define IWebBridge_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IWebBridge_AboutBox(This) (This)->lpVtbl->AboutBox(This)
#endif
#endif
  HRESULT WINAPI IWebBridge_put_URL_Proxy(IWebBridge *This,BSTR v);
  void __RPC_STUB IWebBridge_put_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_URL_Proxy(IWebBridge *This,BSTR *p);
  void __RPC_STUB IWebBridge_get_URL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_put_Scrollbar_Proxy(IWebBridge *This,VARIANT_BOOL v);
  void __RPC_STUB IWebBridge_put_Scrollbar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_Scrollbar_Proxy(IWebBridge *This,VARIANT_BOOL *p);
  void __RPC_STUB IWebBridge_get_Scrollbar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_put_embed_Proxy(IWebBridge *This,VARIANT_BOOL v);
  void __RPC_STUB IWebBridge_put_embed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_embed_Proxy(IWebBridge *This,VARIANT_BOOL *p);
  void __RPC_STUB IWebBridge_get_embed_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_event_Proxy(IWebBridge *This,IDispatch **p);
  void __RPC_STUB IWebBridge_get_event_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_get_readyState_Proxy(IWebBridge *This,long *p);
  void __RPC_STUB IWebBridge_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWebBridge_AboutBox_Proxy(IWebBridge *This);
  void __RPC_STUB IWebBridge_AboutBox_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IWBScriptControl_INTERFACE_DEFINED__
#define __IWBScriptControl_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IWBScriptControl;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IWBScriptControl : public IDispatch {
  public:
    virtual HRESULT WINAPI raiseEvent(BSTR name,VARIANT eventData) = 0;
    virtual HRESULT WINAPI bubbleEvent(void) = 0;
    virtual HRESULT WINAPI setContextMenu(VARIANT menuItemPairs) = 0;
    virtual HRESULT WINAPI put_selectableContent(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_selectableContent(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_frozen(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_scrollbar(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_scrollbar(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_version(BSTR *p) = 0;
    virtual HRESULT WINAPI get_visibility(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_onvisibilitychange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onvisibilitychange(VARIANT *p) = 0;
  };
#else
  typedef struct IWBScriptControlVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IWBScriptControl *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IWBScriptControl *This);
      ULONG (WINAPI *Release)(IWBScriptControl *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IWBScriptControl *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IWBScriptControl *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IWBScriptControl *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IWBScriptControl *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *raiseEvent)(IWBScriptControl *This,BSTR name,VARIANT eventData);
      HRESULT (WINAPI *bubbleEvent)(IWBScriptControl *This);
      HRESULT (WINAPI *setContextMenu)(IWBScriptControl *This,VARIANT menuItemPairs);
      HRESULT (WINAPI *put_selectableContent)(IWBScriptControl *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_selectableContent)(IWBScriptControl *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_frozen)(IWBScriptControl *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_scrollbar)(IWBScriptControl *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_scrollbar)(IWBScriptControl *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_version)(IWBScriptControl *This,BSTR *p);
      HRESULT (WINAPI *get_visibility)(IWBScriptControl *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_onvisibilitychange)(IWBScriptControl *This,VARIANT v);
      HRESULT (WINAPI *get_onvisibilitychange)(IWBScriptControl *This,VARIANT *p);
    END_INTERFACE
  } IWBScriptControlVtbl;
  interface IWBScriptControl {
    CONST_VTBL struct IWBScriptControlVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IWBScriptControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IWBScriptControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IWBScriptControl_Release(This) (This)->lpVtbl->Release(This)
#define IWBScriptControl_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IWBScriptControl_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IWBScriptControl_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IWBScriptControl_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IWBScriptControl_raiseEvent(This,name,eventData) (This)->lpVtbl->raiseEvent(This,name,eventData)
#define IWBScriptControl_bubbleEvent(This) (This)->lpVtbl->bubbleEvent(This)
#define IWBScriptControl_setContextMenu(This,menuItemPairs) (This)->lpVtbl->setContextMenu(This,menuItemPairs)
#define IWBScriptControl_put_selectableContent(This,v) (This)->lpVtbl->put_selectableContent(This,v)
#define IWBScriptControl_get_selectableContent(This,p) (This)->lpVtbl->get_selectableContent(This,p)
#define IWBScriptControl_get_frozen(This,p) (This)->lpVtbl->get_frozen(This,p)
#define IWBScriptControl_put_scrollbar(This,v) (This)->lpVtbl->put_scrollbar(This,v)
#define IWBScriptControl_get_scrollbar(This,p) (This)->lpVtbl->get_scrollbar(This,p)
#define IWBScriptControl_get_version(This,p) (This)->lpVtbl->get_version(This,p)
#define IWBScriptControl_get_visibility(This,p) (This)->lpVtbl->get_visibility(This,p)
#define IWBScriptControl_put_onvisibilitychange(This,v) (This)->lpVtbl->put_onvisibilitychange(This,v)
#define IWBScriptControl_get_onvisibilitychange(This,p) (This)->lpVtbl->get_onvisibilitychange(This,p)
#endif
#endif

  HRESULT WINAPI IWBScriptControl_raiseEvent_Proxy(IWBScriptControl *This,BSTR name,VARIANT eventData);
  void __RPC_STUB IWBScriptControl_raiseEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_bubbleEvent_Proxy(IWBScriptControl *This);
  void __RPC_STUB IWBScriptControl_bubbleEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_setContextMenu_Proxy(IWBScriptControl *This,VARIANT menuItemPairs);
  void __RPC_STUB IWBScriptControl_setContextMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_put_selectableContent_Proxy(IWBScriptControl *This,VARIANT_BOOL v);
  void __RPC_STUB IWBScriptControl_put_selectableContent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_selectableContent_Proxy(IWBScriptControl *This,VARIANT_BOOL *p);
  void __RPC_STUB IWBScriptControl_get_selectableContent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_frozen_Proxy(IWBScriptControl *This,VARIANT_BOOL *p);
  void __RPC_STUB IWBScriptControl_get_frozen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_put_scrollbar_Proxy(IWBScriptControl *This,VARIANT_BOOL v);
  void __RPC_STUB IWBScriptControl_put_scrollbar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_scrollbar_Proxy(IWBScriptControl *This,VARIANT_BOOL *p);
  void __RPC_STUB IWBScriptControl_get_scrollbar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_version_Proxy(IWBScriptControl *This,BSTR *p);
  void __RPC_STUB IWBScriptControl_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_visibility_Proxy(IWBScriptControl *This,VARIANT_BOOL *p);
  void __RPC_STUB IWBScriptControl_get_visibility_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_put_onvisibilitychange_Proxy(IWBScriptControl *This,VARIANT v);
  void __RPC_STUB IWBScriptControl_put_onvisibilitychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IWBScriptControl_get_onvisibilitychange_Proxy(IWBScriptControl *This,VARIANT *p);
  void __RPC_STUB IWBScriptControl_get_onvisibilitychange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_Scriptlet;
#ifdef __cplusplus
  class Scriptlet;
#endif

#ifndef __IHTMLEmbedElement_INTERFACE_DEFINED__
#define __IHTMLEmbedElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEmbedElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLEmbedElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_hidden(BSTR v) = 0;
    virtual HRESULT WINAPI get_hidden(BSTR *p) = 0;
    virtual HRESULT WINAPI get_palette(BSTR *p) = 0;
    virtual HRESULT WINAPI get_pluginspage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_units(BSTR v) = 0;
    virtual HRESULT WINAPI get_units(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLEmbedElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLEmbedElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLEmbedElement *This);
      ULONG (WINAPI *Release)(IHTMLEmbedElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLEmbedElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLEmbedElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLEmbedElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLEmbedElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_hidden)(IHTMLEmbedElement *This,BSTR v);
      HRESULT (WINAPI *get_hidden)(IHTMLEmbedElement *This,BSTR *p);
      HRESULT (WINAPI *get_palette)(IHTMLEmbedElement *This,BSTR *p);
      HRESULT (WINAPI *get_pluginspage)(IHTMLEmbedElement *This,BSTR *p);
      HRESULT (WINAPI *put_src)(IHTMLEmbedElement *This,BSTR v);
      HRESULT (WINAPI *get_src)(IHTMLEmbedElement *This,BSTR *p);
      HRESULT (WINAPI *put_units)(IHTMLEmbedElement *This,BSTR v);
      HRESULT (WINAPI *get_units)(IHTMLEmbedElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLEmbedElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLEmbedElement *This,BSTR *p);
      HRESULT (WINAPI *put_width)(IHTMLEmbedElement *This,VARIANT v);
      HRESULT (WINAPI *get_width)(IHTMLEmbedElement *This,VARIANT *p);
      HRESULT (WINAPI *put_height)(IHTMLEmbedElement *This,VARIANT v);
      HRESULT (WINAPI *get_height)(IHTMLEmbedElement *This,VARIANT *p);
    END_INTERFACE
  } IHTMLEmbedElementVtbl;
  interface IHTMLEmbedElement {
    CONST_VTBL struct IHTMLEmbedElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLEmbedElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLEmbedElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLEmbedElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLEmbedElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLEmbedElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLEmbedElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLEmbedElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLEmbedElement_put_hidden(This,v) (This)->lpVtbl->put_hidden(This,v)
#define IHTMLEmbedElement_get_hidden(This,p) (This)->lpVtbl->get_hidden(This,p)
#define IHTMLEmbedElement_get_palette(This,p) (This)->lpVtbl->get_palette(This,p)
#define IHTMLEmbedElement_get_pluginspage(This,p) (This)->lpVtbl->get_pluginspage(This,p)
#define IHTMLEmbedElement_put_src(This,v) (This)->lpVtbl->put_src(This,v)
#define IHTMLEmbedElement_get_src(This,p) (This)->lpVtbl->get_src(This,p)
#define IHTMLEmbedElement_put_units(This,v) (This)->lpVtbl->put_units(This,v)
#define IHTMLEmbedElement_get_units(This,p) (This)->lpVtbl->get_units(This,p)
#define IHTMLEmbedElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLEmbedElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLEmbedElement_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLEmbedElement_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLEmbedElement_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLEmbedElement_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLEmbedElement_put_hidden_Proxy(IHTMLEmbedElement *This,BSTR v);
  void __RPC_STUB IHTMLEmbedElement_put_hidden_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_hidden_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_hidden_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_palette_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_palette_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_pluginspage_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_pluginspage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_src_Proxy(IHTMLEmbedElement *This,BSTR v);
  void __RPC_STUB IHTMLEmbedElement_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_src_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_units_Proxy(IHTMLEmbedElement *This,BSTR v);
  void __RPC_STUB IHTMLEmbedElement_put_units_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_units_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_units_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_name_Proxy(IHTMLEmbedElement *This,BSTR v);
  void __RPC_STUB IHTMLEmbedElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_name_Proxy(IHTMLEmbedElement *This,BSTR *p);
  void __RPC_STUB IHTMLEmbedElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_width_Proxy(IHTMLEmbedElement *This,VARIANT v);
  void __RPC_STUB IHTMLEmbedElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_width_Proxy(IHTMLEmbedElement *This,VARIANT *p);
  void __RPC_STUB IHTMLEmbedElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_put_height_Proxy(IHTMLEmbedElement *This,VARIANT v);
  void __RPC_STUB IHTMLEmbedElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEmbedElement_get_height_Proxy(IHTMLEmbedElement *This,VARIANT *p);
  void __RPC_STUB IHTMLEmbedElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLEmbed_DISPINTERFACE_DEFINED__
#define __DispHTMLEmbed_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLEmbed;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLEmbed : public IDispatch {
  };
#else
  typedef struct DispHTMLEmbedVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLEmbed *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLEmbed *This);
      ULONG (WINAPI *Release)(DispHTMLEmbed *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLEmbed *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLEmbed *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLEmbed *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLEmbed *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLEmbedVtbl;
  interface DispHTMLEmbed {
    CONST_VTBL struct DispHTMLEmbedVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLEmbed_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLEmbed_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLEmbed_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLEmbed_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLEmbed_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLEmbed_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLEmbed_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLEmbed;
#ifdef __cplusplus
  class HTMLEmbed;
#endif

#ifndef __HTMLMapEvents2_DISPINTERFACE_DEFINED__
#define __HTMLMapEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLMapEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLMapEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLMapEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLMapEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLMapEvents2 *This);
      ULONG (WINAPI *Release)(HTMLMapEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLMapEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLMapEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLMapEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLMapEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLMapEvents2Vtbl;
  interface HTMLMapEvents2 {
    CONST_VTBL struct HTMLMapEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLMapEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLMapEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLMapEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLMapEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLMapEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLMapEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLMapEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLMapEvents_DISPINTERFACE_DEFINED__
#define __HTMLMapEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLMapEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLMapEvents : public IDispatch {
  };
#else
  typedef struct HTMLMapEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLMapEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLMapEvents *This);
      ULONG (WINAPI *Release)(HTMLMapEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLMapEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLMapEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLMapEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLMapEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLMapEventsVtbl;
  interface HTMLMapEvents {
    CONST_VTBL struct HTMLMapEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLMapEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLMapEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLMapEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLMapEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLMapEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLMapEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLMapEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLAreasCollection_INTERFACE_DEFINED__
#define __IHTMLAreasCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAreasCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLAreasCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI put_length(long v) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(VARIANT name,VARIANT index,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI tags(VARIANT tagName,IDispatch **pdisp) = 0;
    virtual HRESULT WINAPI add(IHTMLElement *element,VARIANT before) = 0;
    virtual HRESULT WINAPI remove(long index = -1) = 0;
  };
#else
  typedef struct IHTMLAreasCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLAreasCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLAreasCollection *This);
      ULONG (WINAPI *Release)(IHTMLAreasCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLAreasCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLAreasCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLAreasCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLAreasCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_length)(IHTMLAreasCollection *This,long v);
      HRESULT (WINAPI *get_length)(IHTMLAreasCollection *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLAreasCollection *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLAreasCollection *This,VARIANT name,VARIANT index,IDispatch **pdisp);
      HRESULT (WINAPI *tags)(IHTMLAreasCollection *This,VARIANT tagName,IDispatch **pdisp);
      HRESULT (WINAPI *add)(IHTMLAreasCollection *This,IHTMLElement *element,VARIANT before);
      HRESULT (WINAPI *remove)(IHTMLAreasCollection *This,long index);
    END_INTERFACE
  } IHTMLAreasCollectionVtbl;
  interface IHTMLAreasCollection {
    CONST_VTBL struct IHTMLAreasCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLAreasCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLAreasCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLAreasCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLAreasCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLAreasCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLAreasCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLAreasCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLAreasCollection_put_length(This,v) (This)->lpVtbl->put_length(This,v)
#define IHTMLAreasCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLAreasCollection_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLAreasCollection_item(This,name,index,pdisp) (This)->lpVtbl->item(This,name,index,pdisp)
#define IHTMLAreasCollection_tags(This,tagName,pdisp) (This)->lpVtbl->tags(This,tagName,pdisp)
#define IHTMLAreasCollection_add(This,element,before) (This)->lpVtbl->add(This,element,before)
#define IHTMLAreasCollection_remove(This,index) (This)->lpVtbl->remove(This,index)
#endif
#endif

  HRESULT WINAPI IHTMLAreasCollection_put_length_Proxy(IHTMLAreasCollection *This,long v);
  void __RPC_STUB IHTMLAreasCollection_put_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_get_length_Proxy(IHTMLAreasCollection *This,long *p);
  void __RPC_STUB IHTMLAreasCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_get__newEnum_Proxy(IHTMLAreasCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLAreasCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_item_Proxy(IHTMLAreasCollection *This,VARIANT name,VARIANT index,IDispatch **pdisp);
  void __RPC_STUB IHTMLAreasCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_tags_Proxy(IHTMLAreasCollection *This,VARIANT tagName,IDispatch **pdisp);
  void __RPC_STUB IHTMLAreasCollection_tags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_add_Proxy(IHTMLAreasCollection *This,IHTMLElement *element,VARIANT before);
  void __RPC_STUB IHTMLAreasCollection_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreasCollection_remove_Proxy(IHTMLAreasCollection *This,long index);
  void __RPC_STUB IHTMLAreasCollection_remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAreasCollection2_INTERFACE_DEFINED__
#define __IHTMLAreasCollection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAreasCollection2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLAreasCollection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI urns(VARIANT urn,IDispatch **pdisp) = 0;
  };
#else
  typedef struct IHTMLAreasCollection2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLAreasCollection2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLAreasCollection2 *This);
      ULONG (WINAPI *Release)(IHTMLAreasCollection2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLAreasCollection2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLAreasCollection2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLAreasCollection2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLAreasCollection2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *urns)(IHTMLAreasCollection2 *This,VARIANT urn,IDispatch **pdisp);
    END_INTERFACE
  } IHTMLAreasCollection2Vtbl;
  interface IHTMLAreasCollection2 {
    CONST_VTBL struct IHTMLAreasCollection2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLAreasCollection2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLAreasCollection2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLAreasCollection2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLAreasCollection2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLAreasCollection2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLAreasCollection2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLAreasCollection2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLAreasCollection2_urns(This,urn,pdisp) (This)->lpVtbl->urns(This,urn,pdisp)
#endif
#endif

  HRESULT WINAPI IHTMLAreasCollection2_urns_Proxy(IHTMLAreasCollection2 *This,VARIANT urn,IDispatch **pdisp);
  void __RPC_STUB IHTMLAreasCollection2_urns_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAreasCollection3_INTERFACE_DEFINED__
#define __IHTMLAreasCollection3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAreasCollection3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLAreasCollection3 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedItem(BSTR name,IDispatch **pdisp) = 0;
  };
#else
  typedef struct IHTMLAreasCollection3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLAreasCollection3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLAreasCollection3 *This);
      ULONG (WINAPI *Release)(IHTMLAreasCollection3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLAreasCollection3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLAreasCollection3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLAreasCollection3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLAreasCollection3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *namedItem)(IHTMLAreasCollection3 *This,BSTR name,IDispatch **pdisp);
    END_INTERFACE
  } IHTMLAreasCollection3Vtbl;
  interface IHTMLAreasCollection3 {
    CONST_VTBL struct IHTMLAreasCollection3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLAreasCollection3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLAreasCollection3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLAreasCollection3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLAreasCollection3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLAreasCollection3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLAreasCollection3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLAreasCollection3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLAreasCollection3_namedItem(This,name,pdisp) (This)->lpVtbl->namedItem(This,name,pdisp)
#endif
#endif

  HRESULT WINAPI IHTMLAreasCollection3_namedItem_Proxy(IHTMLAreasCollection3 *This,BSTR name,IDispatch **pdisp);
  void __RPC_STUB IHTMLAreasCollection3_namedItem_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLMapElement_INTERFACE_DEFINED__
#define __IHTMLMapElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLMapElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLMapElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_areas(IHTMLAreasCollection **p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLMapElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLMapElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLMapElement *This);
      ULONG (WINAPI *Release)(IHTMLMapElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLMapElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLMapElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLMapElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLMapElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_areas)(IHTMLMapElement *This,IHTMLAreasCollection **p);
      HRESULT (WINAPI *put_name)(IHTMLMapElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLMapElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLMapElementVtbl;
  interface IHTMLMapElement {
    CONST_VTBL struct IHTMLMapElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLMapElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLMapElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLMapElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLMapElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLMapElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLMapElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLMapElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLMapElement_get_areas(This,p) (This)->lpVtbl->get_areas(This,p)
#define IHTMLMapElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLMapElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLMapElement_get_areas_Proxy(IHTMLMapElement *This,IHTMLAreasCollection **p);
  void __RPC_STUB IHTMLMapElement_get_areas_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMapElement_put_name_Proxy(IHTMLMapElement *This,BSTR v);
  void __RPC_STUB IHTMLMapElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLMapElement_get_name_Proxy(IHTMLMapElement *This,BSTR *p);
  void __RPC_STUB IHTMLMapElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAreasCollection_DISPINTERFACE_DEFINED__
#define __DispHTMLAreasCollection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAreasCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLAreasCollection : public IDispatch {
  };
#else
  typedef struct DispHTMLAreasCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLAreasCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLAreasCollection *This);
      ULONG (WINAPI *Release)(DispHTMLAreasCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLAreasCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLAreasCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLAreasCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLAreasCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLAreasCollectionVtbl;
  interface DispHTMLAreasCollection {
    CONST_VTBL struct DispHTMLAreasCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLAreasCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLAreasCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLAreasCollection_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLAreasCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLAreasCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLAreasCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLAreasCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLAreasCollection;
#ifdef __cplusplus
  class HTMLAreasCollection;
#endif

#ifndef __DispHTMLMapElement_DISPINTERFACE_DEFINED__
#define __DispHTMLMapElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLMapElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLMapElement : public IDispatch {
  };
#else
  typedef struct DispHTMLMapElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLMapElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLMapElement *This);
      ULONG (WINAPI *Release)(DispHTMLMapElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLMapElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLMapElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLMapElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLMapElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLMapElementVtbl;
  interface DispHTMLMapElement {
    CONST_VTBL struct DispHTMLMapElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLMapElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLMapElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLMapElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLMapElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLMapElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLMapElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLMapElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLMapElement;
#ifdef __cplusplus
  class HTMLMapElement;
#endif

#ifndef __HTMLAreaEvents2_DISPINTERFACE_DEFINED__
#define __HTMLAreaEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLAreaEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLAreaEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLAreaEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLAreaEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLAreaEvents2 *This);
      ULONG (WINAPI *Release)(HTMLAreaEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLAreaEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLAreaEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLAreaEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLAreaEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLAreaEvents2Vtbl;
  interface HTMLAreaEvents2 {
    CONST_VTBL struct HTMLAreaEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLAreaEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLAreaEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLAreaEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLAreaEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLAreaEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLAreaEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLAreaEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLAreaEvents_DISPINTERFACE_DEFINED__
#define __HTMLAreaEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLAreaEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLAreaEvents : public IDispatch {
  };
#else
  typedef struct HTMLAreaEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLAreaEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLAreaEvents *This);
      ULONG (WINAPI *Release)(HTMLAreaEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLAreaEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLAreaEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLAreaEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLAreaEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLAreaEventsVtbl;
  interface HTMLAreaEvents {
    CONST_VTBL struct HTMLAreaEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLAreaEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLAreaEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLAreaEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLAreaEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLAreaEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLAreaEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLAreaEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLAreaElement_INTERFACE_DEFINED__
#define __IHTMLAreaElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAreaElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLAreaElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_shape(BSTR v) = 0;
    virtual HRESULT WINAPI get_shape(BSTR *p) = 0;
    virtual HRESULT WINAPI put_coords(BSTR v) = 0;
    virtual HRESULT WINAPI get_coords(BSTR *p) = 0;
    virtual HRESULT WINAPI put_href(BSTR v) = 0;
    virtual HRESULT WINAPI get_href(BSTR *p) = 0;
    virtual HRESULT WINAPI put_target(BSTR v) = 0;
    virtual HRESULT WINAPI get_target(BSTR *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_noHref(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noHref(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_host(BSTR v) = 0;
    virtual HRESULT WINAPI get_host(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hostname(BSTR v) = 0;
    virtual HRESULT WINAPI get_hostname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_pathname(BSTR v) = 0;
    virtual HRESULT WINAPI get_pathname(BSTR *p) = 0;
    virtual HRESULT WINAPI put_port(BSTR v) = 0;
    virtual HRESULT WINAPI get_port(BSTR *p) = 0;
    virtual HRESULT WINAPI put_protocol(BSTR v) = 0;
    virtual HRESULT WINAPI get_protocol(BSTR *p) = 0;
    virtual HRESULT WINAPI put_search(BSTR v) = 0;
    virtual HRESULT WINAPI get_search(BSTR *p) = 0;
    virtual HRESULT WINAPI put_hash(BSTR v) = 0;
    virtual HRESULT WINAPI get_hash(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onblur(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onblur(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onfocus(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onfocus(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_tabIndex(short v) = 0;
    virtual HRESULT WINAPI get_tabIndex(short *p) = 0;
    virtual HRESULT WINAPI focus(void) = 0;
    virtual HRESULT WINAPI blur(void) = 0;
  };
#else
  typedef struct IHTMLAreaElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLAreaElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLAreaElement *This);
      ULONG (WINAPI *Release)(IHTMLAreaElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLAreaElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLAreaElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLAreaElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLAreaElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_shape)(IHTMLAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_shape)(IHTMLAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_coords)(IHTMLAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_coords)(IHTMLAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_href)(IHTMLAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_href)(IHTMLAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_target)(IHTMLAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_target)(IHTMLAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_alt)(IHTMLAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_alt)(IHTMLAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_noHref)(IHTMLAreaElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_noHref)(IHTMLAreaElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_host)(IHTMLAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_host)(IHTMLAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_hostname)(IHTMLAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_hostname)(IHTMLAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_pathname)(IHTMLAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_pathname)(IHTMLAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_port)(IHTMLAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_port)(IHTMLAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_protocol)(IHTMLAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_protocol)(IHTMLAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_search)(IHTMLAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_search)(IHTMLAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_hash)(IHTMLAreaElement *This,BSTR v);
      HRESULT (WINAPI *get_hash)(IHTMLAreaElement *This,BSTR *p);
      HRESULT (WINAPI *put_onblur)(IHTMLAreaElement *This,VARIANT v);
      HRESULT (WINAPI *get_onblur)(IHTMLAreaElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onfocus)(IHTMLAreaElement *This,VARIANT v);
      HRESULT (WINAPI *get_onfocus)(IHTMLAreaElement *This,VARIANT *p);
      HRESULT (WINAPI *put_tabIndex)(IHTMLAreaElement *This,short v);
      HRESULT (WINAPI *get_tabIndex)(IHTMLAreaElement *This,short *p);
      HRESULT (WINAPI *focus)(IHTMLAreaElement *This);
      HRESULT (WINAPI *blur)(IHTMLAreaElement *This);
    END_INTERFACE
  } IHTMLAreaElementVtbl;
  interface IHTMLAreaElement {
    CONST_VTBL struct IHTMLAreaElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLAreaElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLAreaElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLAreaElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLAreaElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLAreaElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLAreaElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLAreaElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLAreaElement_put_shape(This,v) (This)->lpVtbl->put_shape(This,v)
#define IHTMLAreaElement_get_shape(This,p) (This)->lpVtbl->get_shape(This,p)
#define IHTMLAreaElement_put_coords(This,v) (This)->lpVtbl->put_coords(This,v)
#define IHTMLAreaElement_get_coords(This,p) (This)->lpVtbl->get_coords(This,p)
#define IHTMLAreaElement_put_href(This,v) (This)->lpVtbl->put_href(This,v)
#define IHTMLAreaElement_get_href(This,p) (This)->lpVtbl->get_href(This,p)
#define IHTMLAreaElement_put_target(This,v) (This)->lpVtbl->put_target(This,v)
#define IHTMLAreaElement_get_target(This,p) (This)->lpVtbl->get_target(This,p)
#define IHTMLAreaElement_put_alt(This,v) (This)->lpVtbl->put_alt(This,v)
#define IHTMLAreaElement_get_alt(This,p) (This)->lpVtbl->get_alt(This,p)
#define IHTMLAreaElement_put_noHref(This,v) (This)->lpVtbl->put_noHref(This,v)
#define IHTMLAreaElement_get_noHref(This,p) (This)->lpVtbl->get_noHref(This,p)
#define IHTMLAreaElement_put_host(This,v) (This)->lpVtbl->put_host(This,v)
#define IHTMLAreaElement_get_host(This,p) (This)->lpVtbl->get_host(This,p)
#define IHTMLAreaElement_put_hostname(This,v) (This)->lpVtbl->put_hostname(This,v)
#define IHTMLAreaElement_get_hostname(This,p) (This)->lpVtbl->get_hostname(This,p)
#define IHTMLAreaElement_put_pathname(This,v) (This)->lpVtbl->put_pathname(This,v)
#define IHTMLAreaElement_get_pathname(This,p) (This)->lpVtbl->get_pathname(This,p)
#define IHTMLAreaElement_put_port(This,v) (This)->lpVtbl->put_port(This,v)
#define IHTMLAreaElement_get_port(This,p) (This)->lpVtbl->get_port(This,p)
#define IHTMLAreaElement_put_protocol(This,v) (This)->lpVtbl->put_protocol(This,v)
#define IHTMLAreaElement_get_protocol(This,p) (This)->lpVtbl->get_protocol(This,p)
#define IHTMLAreaElement_put_search(This,v) (This)->lpVtbl->put_search(This,v)
#define IHTMLAreaElement_get_search(This,p) (This)->lpVtbl->get_search(This,p)
#define IHTMLAreaElement_put_hash(This,v) (This)->lpVtbl->put_hash(This,v)
#define IHTMLAreaElement_get_hash(This,p) (This)->lpVtbl->get_hash(This,p)
#define IHTMLAreaElement_put_onblur(This,v) (This)->lpVtbl->put_onblur(This,v)
#define IHTMLAreaElement_get_onblur(This,p) (This)->lpVtbl->get_onblur(This,p)
#define IHTMLAreaElement_put_onfocus(This,v) (This)->lpVtbl->put_onfocus(This,v)
#define IHTMLAreaElement_get_onfocus(This,p) (This)->lpVtbl->get_onfocus(This,p)
#define IHTMLAreaElement_put_tabIndex(This,v) (This)->lpVtbl->put_tabIndex(This,v)
#define IHTMLAreaElement_get_tabIndex(This,p) (This)->lpVtbl->get_tabIndex(This,p)
#define IHTMLAreaElement_focus(This) (This)->lpVtbl->focus(This)
#define IHTMLAreaElement_blur(This) (This)->lpVtbl->blur(This)
#endif
#endif

  HRESULT WINAPI IHTMLAreaElement_put_shape_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_shape_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_shape_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_shape_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_coords_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_coords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_coords_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_coords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_href_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_href_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_href_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_target_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_target_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_target_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_alt_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_alt_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_noHref_Proxy(IHTMLAreaElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLAreaElement_put_noHref_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_noHref_Proxy(IHTMLAreaElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLAreaElement_get_noHref_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_host_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_host_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_host_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_hostname_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_hostname_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_hostname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_pathname_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_pathname_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_pathname_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_port_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_port_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_port_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_protocol_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_protocol_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_protocol_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_search_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_search_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_search_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_hash_Proxy(IHTMLAreaElement *This,BSTR v);
  void __RPC_STUB IHTMLAreaElement_put_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_hash_Proxy(IHTMLAreaElement *This,BSTR *p);
  void __RPC_STUB IHTMLAreaElement_get_hash_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_onblur_Proxy(IHTMLAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLAreaElement_put_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_onblur_Proxy(IHTMLAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLAreaElement_get_onblur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_onfocus_Proxy(IHTMLAreaElement *This,VARIANT v);
  void __RPC_STUB IHTMLAreaElement_put_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_onfocus_Proxy(IHTMLAreaElement *This,VARIANT *p);
  void __RPC_STUB IHTMLAreaElement_get_onfocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_put_tabIndex_Proxy(IHTMLAreaElement *This,short v);
  void __RPC_STUB IHTMLAreaElement_put_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_get_tabIndex_Proxy(IHTMLAreaElement *This,short *p);
  void __RPC_STUB IHTMLAreaElement_get_tabIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_focus_Proxy(IHTMLAreaElement *This);
  void __RPC_STUB IHTMLAreaElement_focus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAreaElement_blur_Proxy(IHTMLAreaElement *This);
  void __RPC_STUB IHTMLAreaElement_blur_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAreaElement_DISPINTERFACE_DEFINED__
#define __DispHTMLAreaElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAreaElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLAreaElement : public IDispatch {
  };
#else
  typedef struct DispHTMLAreaElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLAreaElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLAreaElement *This);
      ULONG (WINAPI *Release)(DispHTMLAreaElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLAreaElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLAreaElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLAreaElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLAreaElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLAreaElementVtbl;
  interface DispHTMLAreaElement {
    CONST_VTBL struct DispHTMLAreaElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLAreaElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLAreaElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLAreaElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLAreaElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLAreaElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLAreaElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLAreaElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLAreaElement;
#ifdef __cplusplus
  class HTMLAreaElement;
#endif

#ifndef __IHTMLTableCaption_INTERFACE_DEFINED__
#define __IHTMLTableCaption_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCaption;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTableCaption : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLTableCaptionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTableCaption *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTableCaption *This);
      ULONG (WINAPI *Release)(IHTMLTableCaption *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTableCaption *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTableCaption *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTableCaption *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTableCaption *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_align)(IHTMLTableCaption *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLTableCaption *This,BSTR *p);
      HRESULT (WINAPI *put_vAlign)(IHTMLTableCaption *This,BSTR v);
      HRESULT (WINAPI *get_vAlign)(IHTMLTableCaption *This,BSTR *p);
    END_INTERFACE
  } IHTMLTableCaptionVtbl;
  interface IHTMLTableCaption {
    CONST_VTBL struct IHTMLTableCaptionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTableCaption_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTableCaption_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTableCaption_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTableCaption_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTableCaption_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTableCaption_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTableCaption_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTableCaption_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLTableCaption_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#define IHTMLTableCaption_put_vAlign(This,v) (This)->lpVtbl->put_vAlign(This,v)
#define IHTMLTableCaption_get_vAlign(This,p) (This)->lpVtbl->get_vAlign(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLTableCaption_put_align_Proxy(IHTMLTableCaption *This,BSTR v);
  void __RPC_STUB IHTMLTableCaption_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCaption_get_align_Proxy(IHTMLTableCaption *This,BSTR *p);
  void __RPC_STUB IHTMLTableCaption_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCaption_put_vAlign_Proxy(IHTMLTableCaption *This,BSTR v);
  void __RPC_STUB IHTMLTableCaption_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCaption_get_vAlign_Proxy(IHTMLTableCaption *This,BSTR *p);
  void __RPC_STUB IHTMLTableCaption_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLTableCaption_DISPINTERFACE_DEFINED__
#define __DispHTMLTableCaption_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableCaption;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLTableCaption : public IDispatch {
  };
#else
  typedef struct DispHTMLTableCaptionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLTableCaption *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLTableCaption *This);
      ULONG (WINAPI *Release)(DispHTMLTableCaption *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLTableCaption *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLTableCaption *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLTableCaption *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLTableCaption *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLTableCaptionVtbl;
  interface DispHTMLTableCaption {
    CONST_VTBL struct DispHTMLTableCaptionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLTableCaption_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLTableCaption_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLTableCaption_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLTableCaption_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLTableCaption_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLTableCaption_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLTableCaption_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLTableCaption;
#ifdef __cplusplus
  class HTMLTableCaption;
#endif

#ifndef __IHTMLCommentElement_INTERFACE_DEFINED__
#define __IHTMLCommentElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCommentElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLCommentElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
    virtual HRESULT WINAPI put_atomic(long v) = 0;
    virtual HRESULT WINAPI get_atomic(long *p) = 0;
  };
#else
  typedef struct IHTMLCommentElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLCommentElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLCommentElement *This);
      ULONG (WINAPI *Release)(IHTMLCommentElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLCommentElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLCommentElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLCommentElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLCommentElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_text)(IHTMLCommentElement *This,BSTR v);
      HRESULT (WINAPI *get_text)(IHTMLCommentElement *This,BSTR *p);
      HRESULT (WINAPI *put_atomic)(IHTMLCommentElement *This,long v);
      HRESULT (WINAPI *get_atomic)(IHTMLCommentElement *This,long *p);
    END_INTERFACE
  } IHTMLCommentElementVtbl;
  interface IHTMLCommentElement {
    CONST_VTBL struct IHTMLCommentElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLCommentElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLCommentElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLCommentElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLCommentElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLCommentElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLCommentElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLCommentElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLCommentElement_put_text(This,v) (This)->lpVtbl->put_text(This,v)
#define IHTMLCommentElement_get_text(This,p) (This)->lpVtbl->get_text(This,p)
#define IHTMLCommentElement_put_atomic(This,v) (This)->lpVtbl->put_atomic(This,v)
#define IHTMLCommentElement_get_atomic(This,p) (This)->lpVtbl->get_atomic(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLCommentElement_put_text_Proxy(IHTMLCommentElement *This,BSTR v);
  void __RPC_STUB IHTMLCommentElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement_get_text_Proxy(IHTMLCommentElement *This,BSTR *p);
  void __RPC_STUB IHTMLCommentElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement_put_atomic_Proxy(IHTMLCommentElement *This,long v);
  void __RPC_STUB IHTMLCommentElement_put_atomic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement_get_atomic_Proxy(IHTMLCommentElement *This,long *p);
  void __RPC_STUB IHTMLCommentElement_get_atomic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLCommentElement2_INTERFACE_DEFINED__
#define __IHTMLCommentElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCommentElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLCommentElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_data(BSTR v) = 0;
    virtual HRESULT WINAPI get_data(BSTR *p) = 0;
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI substringData(long offset,long Count,BSTR *pbstrsubString) = 0;
    virtual HRESULT WINAPI appendData(BSTR bstrstring) = 0;
    virtual HRESULT WINAPI insertData(long offset,BSTR bstrstring) = 0;
    virtual HRESULT WINAPI deleteData(long offset,long Count) = 0;
    virtual HRESULT WINAPI replaceData(long offset,long Count,BSTR bstrstring) = 0;
  };
#else
  typedef struct IHTMLCommentElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLCommentElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLCommentElement2 *This);
      ULONG (WINAPI *Release)(IHTMLCommentElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLCommentElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLCommentElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLCommentElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLCommentElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_data)(IHTMLCommentElement2 *This,BSTR v);
      HRESULT (WINAPI *get_data)(IHTMLCommentElement2 *This,BSTR *p);
      HRESULT (WINAPI *get_length)(IHTMLCommentElement2 *This,long *p);
      HRESULT (WINAPI *substringData)(IHTMLCommentElement2 *This,long offset,long Count,BSTR *pbstrsubString);
      HRESULT (WINAPI *appendData)(IHTMLCommentElement2 *This,BSTR bstrstring);
      HRESULT (WINAPI *insertData)(IHTMLCommentElement2 *This,long offset,BSTR bstrstring);
      HRESULT (WINAPI *deleteData)(IHTMLCommentElement2 *This,long offset,long Count);
      HRESULT (WINAPI *replaceData)(IHTMLCommentElement2 *This,long offset,long Count,BSTR bstrstring);
    END_INTERFACE
  } IHTMLCommentElement2Vtbl;
  interface IHTMLCommentElement2 {
    CONST_VTBL struct IHTMLCommentElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLCommentElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLCommentElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLCommentElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLCommentElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLCommentElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLCommentElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLCommentElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLCommentElement2_put_data(This,v) (This)->lpVtbl->put_data(This,v)
#define IHTMLCommentElement2_get_data(This,p) (This)->lpVtbl->get_data(This,p)
#define IHTMLCommentElement2_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLCommentElement2_substringData(This,offset,Count,pbstrsubString) (This)->lpVtbl->substringData(This,offset,Count,pbstrsubString)
#define IHTMLCommentElement2_appendData(This,bstrstring) (This)->lpVtbl->appendData(This,bstrstring)
#define IHTMLCommentElement2_insertData(This,offset,bstrstring) (This)->lpVtbl->insertData(This,offset,bstrstring)
#define IHTMLCommentElement2_deleteData(This,offset,Count) (This)->lpVtbl->deleteData(This,offset,Count)
#define IHTMLCommentElement2_replaceData(This,offset,Count,bstrstring) (This)->lpVtbl->replaceData(This,offset,Count,bstrstring)
#endif
#endif

  HRESULT WINAPI IHTMLCommentElement2_put_data_Proxy(IHTMLCommentElement2 *This,BSTR v);
  void __RPC_STUB IHTMLCommentElement2_put_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_get_data_Proxy(IHTMLCommentElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLCommentElement2_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_get_length_Proxy(IHTMLCommentElement2 *This,long *p);
  void __RPC_STUB IHTMLCommentElement2_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_substringData_Proxy(IHTMLCommentElement2 *This,long offset,long Count,BSTR *pbstrsubString);
  void __RPC_STUB IHTMLCommentElement2_substringData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_appendData_Proxy(IHTMLCommentElement2 *This,BSTR bstrstring);
  void __RPC_STUB IHTMLCommentElement2_appendData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_insertData_Proxy(IHTMLCommentElement2 *This,long offset,BSTR bstrstring);
  void __RPC_STUB IHTMLCommentElement2_insertData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_deleteData_Proxy(IHTMLCommentElement2 *This,long offset,long Count);
  void __RPC_STUB IHTMLCommentElement2_deleteData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCommentElement2_replaceData_Proxy(IHTMLCommentElement2 *This,long offset,long Count,BSTR bstrstring);
  void __RPC_STUB IHTMLCommentElement2_replaceData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLCommentElement_DISPINTERFACE_DEFINED__
#define __DispHTMLCommentElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLCommentElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLCommentElement : public IDispatch {
  };
#else
  typedef struct DispHTMLCommentElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLCommentElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLCommentElement *This);
      ULONG (WINAPI *Release)(DispHTMLCommentElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLCommentElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLCommentElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLCommentElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLCommentElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLCommentElementVtbl;
  interface DispHTMLCommentElement {
    CONST_VTBL struct DispHTMLCommentElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLCommentElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLCommentElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLCommentElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLCommentElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLCommentElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLCommentElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLCommentElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLCommentElement;
#ifdef __cplusplus
  class HTMLCommentElement;
#endif

#ifndef __IHTMLPhraseElement_INTERFACE_DEFINED__
#define __IHTMLPhraseElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPhraseElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLPhraseElement : public IDispatch {
  };
#else
  typedef struct IHTMLPhraseElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLPhraseElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLPhraseElement *This);
      ULONG (WINAPI *Release)(IHTMLPhraseElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLPhraseElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLPhraseElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLPhraseElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLPhraseElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } IHTMLPhraseElementVtbl;
  interface IHTMLPhraseElement {
    CONST_VTBL struct IHTMLPhraseElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLPhraseElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLPhraseElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLPhraseElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLPhraseElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLPhraseElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLPhraseElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLPhraseElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLPhraseElement2_INTERFACE_DEFINED__
#define __IHTMLPhraseElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPhraseElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLPhraseElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_cite(BSTR v) = 0;
    virtual HRESULT WINAPI get_cite(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dateTime(BSTR v) = 0;
    virtual HRESULT WINAPI get_dateTime(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLPhraseElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLPhraseElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLPhraseElement2 *This);
      ULONG (WINAPI *Release)(IHTMLPhraseElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLPhraseElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLPhraseElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLPhraseElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLPhraseElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_cite)(IHTMLPhraseElement2 *This,BSTR v);
      HRESULT (WINAPI *get_cite)(IHTMLPhraseElement2 *This,BSTR *p);
      HRESULT (WINAPI *put_dateTime)(IHTMLPhraseElement2 *This,BSTR v);
      HRESULT (WINAPI *get_dateTime)(IHTMLPhraseElement2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLPhraseElement2Vtbl;
  interface IHTMLPhraseElement2 {
    CONST_VTBL struct IHTMLPhraseElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLPhraseElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLPhraseElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLPhraseElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLPhraseElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLPhraseElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLPhraseElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLPhraseElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLPhraseElement2_put_cite(This,v) (This)->lpVtbl->put_cite(This,v)
#define IHTMLPhraseElement2_get_cite(This,p) (This)->lpVtbl->get_cite(This,p)
#define IHTMLPhraseElement2_put_dateTime(This,v) (This)->lpVtbl->put_dateTime(This,v)
#define IHTMLPhraseElement2_get_dateTime(This,p) (This)->lpVtbl->get_dateTime(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLPhraseElement2_put_cite_Proxy(IHTMLPhraseElement2 *This,BSTR v);
  void __RPC_STUB IHTMLPhraseElement2_put_cite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPhraseElement2_get_cite_Proxy(IHTMLPhraseElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLPhraseElement2_get_cite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPhraseElement2_put_dateTime_Proxy(IHTMLPhraseElement2 *This,BSTR v);
  void __RPC_STUB IHTMLPhraseElement2_put_dateTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPhraseElement2_get_dateTime_Proxy(IHTMLPhraseElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLPhraseElement2_get_dateTime_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLSpanElement_INTERFACE_DEFINED__
#define __IHTMLSpanElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSpanElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLSpanElement : public IDispatch {
  };
#else
  typedef struct IHTMLSpanElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLSpanElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLSpanElement *This);
      ULONG (WINAPI *Release)(IHTMLSpanElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLSpanElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLSpanElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLSpanElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLSpanElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } IHTMLSpanElementVtbl;
  interface IHTMLSpanElement {
    CONST_VTBL struct IHTMLSpanElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLSpanElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLSpanElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLSpanElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLSpanElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLSpanElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLSpanElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLSpanElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __DispHTMLPhraseElement_DISPINTERFACE_DEFINED__
#define __DispHTMLPhraseElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLPhraseElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLPhraseElement : public IDispatch {
  };
#else
  typedef struct DispHTMLPhraseElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLPhraseElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLPhraseElement *This);
      ULONG (WINAPI *Release)(DispHTMLPhraseElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLPhraseElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLPhraseElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLPhraseElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLPhraseElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLPhraseElementVtbl;
  interface DispHTMLPhraseElement {
    CONST_VTBL struct DispHTMLPhraseElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLPhraseElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLPhraseElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLPhraseElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLPhraseElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLPhraseElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLPhraseElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLPhraseElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLPhraseElement;
#ifdef __cplusplus
  class HTMLPhraseElement;
#endif

#ifndef __DispHTMLSpanElement_DISPINTERFACE_DEFINED__
#define __DispHTMLSpanElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLSpanElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLSpanElement : public IDispatch {
  };
#else
  typedef struct DispHTMLSpanElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLSpanElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLSpanElement *This);
      ULONG (WINAPI *Release)(DispHTMLSpanElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLSpanElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLSpanElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLSpanElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLSpanElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLSpanElementVtbl;
  interface DispHTMLSpanElement {
    CONST_VTBL struct DispHTMLSpanElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLSpanElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLSpanElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLSpanElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLSpanElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLSpanElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLSpanElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLSpanElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLSpanElement;
#ifdef __cplusplus
  class HTMLSpanElement;
#endif

#ifndef __HTMLTableEvents2_DISPINTERFACE_DEFINED__
#define __HTMLTableEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLTableEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLTableEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLTableEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLTableEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLTableEvents2 *This);
      ULONG (WINAPI *Release)(HTMLTableEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLTableEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLTableEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLTableEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLTableEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLTableEvents2Vtbl;
  interface HTMLTableEvents2 {
    CONST_VTBL struct HTMLTableEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLTableEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLTableEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLTableEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLTableEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLTableEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLTableEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLTableEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLTableEvents_DISPINTERFACE_DEFINED__
#define __HTMLTableEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLTableEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLTableEvents : public IDispatch {
  };
#else
  typedef struct HTMLTableEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLTableEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLTableEvents *This);
      ULONG (WINAPI *Release)(HTMLTableEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLTableEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLTableEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLTableEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLTableEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLTableEventsVtbl;
  interface HTMLTableEvents {
    CONST_VTBL struct HTMLTableEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLTableEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLTableEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLTableEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLTableEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLTableEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLTableEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLTableEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLTableSection_INTERFACE_DEFINED__
#define __IHTMLTableSection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableSection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTableSection : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_rows(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI insertRow(long index,IDispatch **row) = 0;
    virtual HRESULT WINAPI deleteRow(long index = -1) = 0;
  };
#else
  typedef struct IHTMLTableSectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTableSection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTableSection *This);
      ULONG (WINAPI *Release)(IHTMLTableSection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTableSection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTableSection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTableSection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTableSection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_align)(IHTMLTableSection *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLTableSection *This,BSTR *p);
      HRESULT (WINAPI *put_vAlign)(IHTMLTableSection *This,BSTR v);
      HRESULT (WINAPI *get_vAlign)(IHTMLTableSection *This,BSTR *p);
      HRESULT (WINAPI *put_bgColor)(IHTMLTableSection *This,VARIANT v);
      HRESULT (WINAPI *get_bgColor)(IHTMLTableSection *This,VARIANT *p);
      HRESULT (WINAPI *get_rows)(IHTMLTableSection *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *insertRow)(IHTMLTableSection *This,long index,IDispatch **row);
      HRESULT (WINAPI *deleteRow)(IHTMLTableSection *This,long index);
    END_INTERFACE
  } IHTMLTableSectionVtbl;
  interface IHTMLTableSection {
    CONST_VTBL struct IHTMLTableSectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTableSection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTableSection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTableSection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTableSection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTableSection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTableSection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTableSection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTableSection_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLTableSection_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#define IHTMLTableSection_put_vAlign(This,v) (This)->lpVtbl->put_vAlign(This,v)
#define IHTMLTableSection_get_vAlign(This,p) (This)->lpVtbl->get_vAlign(This,p)
#define IHTMLTableSection_put_bgColor(This,v) (This)->lpVtbl->put_bgColor(This,v)
#define IHTMLTableSection_get_bgColor(This,p) (This)->lpVtbl->get_bgColor(This,p)
#define IHTMLTableSection_get_rows(This,p) (This)->lpVtbl->get_rows(This,p)
#define IHTMLTableSection_insertRow(This,index,row) (This)->lpVtbl->insertRow(This,index,row)
#define IHTMLTableSection_deleteRow(This,index) (This)->lpVtbl->deleteRow(This,index)
#endif
#endif

  HRESULT WINAPI IHTMLTableSection_put_align_Proxy(IHTMLTableSection *This,BSTR v);
  void __RPC_STUB IHTMLTableSection_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_get_align_Proxy(IHTMLTableSection *This,BSTR *p);
  void __RPC_STUB IHTMLTableSection_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_put_vAlign_Proxy(IHTMLTableSection *This,BSTR v);
  void __RPC_STUB IHTMLTableSection_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_get_vAlign_Proxy(IHTMLTableSection *This,BSTR *p);
  void __RPC_STUB IHTMLTableSection_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_put_bgColor_Proxy(IHTMLTableSection *This,VARIANT v);
  void __RPC_STUB IHTMLTableSection_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_get_bgColor_Proxy(IHTMLTableSection *This,VARIANT *p);
  void __RPC_STUB IHTMLTableSection_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_get_rows_Proxy(IHTMLTableSection *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTableSection_get_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_insertRow_Proxy(IHTMLTableSection *This,long index,IDispatch **row);
  void __RPC_STUB IHTMLTableSection_insertRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection_deleteRow_Proxy(IHTMLTableSection *This,long index);
  void __RPC_STUB IHTMLTableSection_deleteRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTable_INTERFACE_DEFINED__
#define __IHTMLTable_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTable;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTable : public IDispatch {
  public:
    virtual HRESULT WINAPI put_cols(long v) = 0;
    virtual HRESULT WINAPI get_cols(long *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_frame(BSTR v) = 0;
    virtual HRESULT WINAPI get_frame(BSTR *p) = 0;
    virtual HRESULT WINAPI put_rules(BSTR v) = 0;
    virtual HRESULT WINAPI get_rules(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cellSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_cellSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_cellPadding(VARIANT v) = 0;
    virtual HRESULT WINAPI get_cellPadding(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorLight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorLight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorDark(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorDark(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI refresh(void) = 0;
    virtual HRESULT WINAPI get_rows(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dataPageSize(long v) = 0;
    virtual HRESULT WINAPI get_dataPageSize(long *p) = 0;
    virtual HRESULT WINAPI nextPage(void) = 0;
    virtual HRESULT WINAPI previousPage(void) = 0;
    virtual HRESULT WINAPI get_tHead(IHTMLTableSection **p) = 0;
    virtual HRESULT WINAPI get_tFoot(IHTMLTableSection **p) = 0;
    virtual HRESULT WINAPI get_tBodies(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI get_caption(IHTMLTableCaption **p) = 0;
    virtual HRESULT WINAPI createTHead(IDispatch **head) = 0;
    virtual HRESULT WINAPI deleteTHead(void) = 0;
    virtual HRESULT WINAPI createTFoot(IDispatch **foot) = 0;
    virtual HRESULT WINAPI deleteTFoot(void) = 0;
    virtual HRESULT WINAPI createCaption(IHTMLTableCaption **caption) = 0;
    virtual HRESULT WINAPI deleteCaption(void) = 0;
    virtual HRESULT WINAPI insertRow(long index,IDispatch **row) = 0;
    virtual HRESULT WINAPI deleteRow(long index = -1) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLTableVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTable *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTable *This);
      ULONG (WINAPI *Release)(IHTMLTable *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTable *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTable *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTable *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTable *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_cols)(IHTMLTable *This,long v);
      HRESULT (WINAPI *get_cols)(IHTMLTable *This,long *p);
      HRESULT (WINAPI *put_border)(IHTMLTable *This,VARIANT v);
      HRESULT (WINAPI *get_border)(IHTMLTable *This,VARIANT *p);
      HRESULT (WINAPI *put_frame)(IHTMLTable *This,BSTR v);
      HRESULT (WINAPI *get_frame)(IHTMLTable *This,BSTR *p);
      HRESULT (WINAPI *put_rules)(IHTMLTable *This,BSTR v);
      HRESULT (WINAPI *get_rules)(IHTMLTable *This,BSTR *p);
      HRESULT (WINAPI *put_cellSpacing)(IHTMLTable *This,VARIANT v);
      HRESULT (WINAPI *get_cellSpacing)(IHTMLTable *This,VARIANT *p);
      HRESULT (WINAPI *put_cellPadding)(IHTMLTable *This,VARIANT v);
      HRESULT (WINAPI *get_cellPadding)(IHTMLTable *This,VARIANT *p);
      HRESULT (WINAPI *put_background)(IHTMLTable *This,BSTR v);
      HRESULT (WINAPI *get_background)(IHTMLTable *This,BSTR *p);
      HRESULT (WINAPI *put_bgColor)(IHTMLTable *This,VARIANT v);
      HRESULT (WINAPI *get_bgColor)(IHTMLTable *This,VARIANT *p);
      HRESULT (WINAPI *put_borderColor)(IHTMLTable *This,VARIANT v);
      HRESULT (WINAPI *get_borderColor)(IHTMLTable *This,VARIANT *p);
      HRESULT (WINAPI *put_borderColorLight)(IHTMLTable *This,VARIANT v);
      HRESULT (WINAPI *get_borderColorLight)(IHTMLTable *This,VARIANT *p);
      HRESULT (WINAPI *put_borderColorDark)(IHTMLTable *This,VARIANT v);
      HRESULT (WINAPI *get_borderColorDark)(IHTMLTable *This,VARIANT *p);
      HRESULT (WINAPI *put_align)(IHTMLTable *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLTable *This,BSTR *p);
      HRESULT (WINAPI *refresh)(IHTMLTable *This);
      HRESULT (WINAPI *get_rows)(IHTMLTable *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *put_width)(IHTMLTable *This,VARIANT v);
      HRESULT (WINAPI *get_width)(IHTMLTable *This,VARIANT *p);
      HRESULT (WINAPI *put_height)(IHTMLTable *This,VARIANT v);
      HRESULT (WINAPI *get_height)(IHTMLTable *This,VARIANT *p);
      HRESULT (WINAPI *put_dataPageSize)(IHTMLTable *This,long v);
      HRESULT (WINAPI *get_dataPageSize)(IHTMLTable *This,long *p);
      HRESULT (WINAPI *nextPage)(IHTMLTable *This);
      HRESULT (WINAPI *previousPage)(IHTMLTable *This);
      HRESULT (WINAPI *get_tHead)(IHTMLTable *This,IHTMLTableSection **p);
      HRESULT (WINAPI *get_tFoot)(IHTMLTable *This,IHTMLTableSection **p);
      HRESULT (WINAPI *get_tBodies)(IHTMLTable *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *get_caption)(IHTMLTable *This,IHTMLTableCaption **p);
      HRESULT (WINAPI *createTHead)(IHTMLTable *This,IDispatch **head);
      HRESULT (WINAPI *deleteTHead)(IHTMLTable *This);
      HRESULT (WINAPI *createTFoot)(IHTMLTable *This,IDispatch **foot);
      HRESULT (WINAPI *deleteTFoot)(IHTMLTable *This);
      HRESULT (WINAPI *createCaption)(IHTMLTable *This,IHTMLTableCaption **caption);
      HRESULT (WINAPI *deleteCaption)(IHTMLTable *This);
      HRESULT (WINAPI *insertRow)(IHTMLTable *This,long index,IDispatch **row);
      HRESULT (WINAPI *deleteRow)(IHTMLTable *This,long index);
      HRESULT (WINAPI *get_readyState)(IHTMLTable *This,BSTR *p);
      HRESULT (WINAPI *put_onreadystatechange)(IHTMLTable *This,VARIANT v);
      HRESULT (WINAPI *get_onreadystatechange)(IHTMLTable *This,VARIANT *p);
    END_INTERFACE
  } IHTMLTableVtbl;
  interface IHTMLTable {
    CONST_VTBL struct IHTMLTableVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTable_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTable_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTable_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTable_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTable_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTable_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTable_put_cols(This,v) (This)->lpVtbl->put_cols(This,v)
#define IHTMLTable_get_cols(This,p) (This)->lpVtbl->get_cols(This,p)
#define IHTMLTable_put_border(This,v) (This)->lpVtbl->put_border(This,v)
#define IHTMLTable_get_border(This,p) (This)->lpVtbl->get_border(This,p)
#define IHTMLTable_put_frame(This,v) (This)->lpVtbl->put_frame(This,v)
#define IHTMLTable_get_frame(This,p) (This)->lpVtbl->get_frame(This,p)
#define IHTMLTable_put_rules(This,v) (This)->lpVtbl->put_rules(This,v)
#define IHTMLTable_get_rules(This,p) (This)->lpVtbl->get_rules(This,p)
#define IHTMLTable_put_cellSpacing(This,v) (This)->lpVtbl->put_cellSpacing(This,v)
#define IHTMLTable_get_cellSpacing(This,p) (This)->lpVtbl->get_cellSpacing(This,p)
#define IHTMLTable_put_cellPadding(This,v) (This)->lpVtbl->put_cellPadding(This,v)
#define IHTMLTable_get_cellPadding(This,p) (This)->lpVtbl->get_cellPadding(This,p)
#define IHTMLTable_put_background(This,v) (This)->lpVtbl->put_background(This,v)
#define IHTMLTable_get_background(This,p) (This)->lpVtbl->get_background(This,p)
#define IHTMLTable_put_bgColor(This,v) (This)->lpVtbl->put_bgColor(This,v)
#define IHTMLTable_get_bgColor(This,p) (This)->lpVtbl->get_bgColor(This,p)
#define IHTMLTable_put_borderColor(This,v) (This)->lpVtbl->put_borderColor(This,v)
#define IHTMLTable_get_borderColor(This,p) (This)->lpVtbl->get_borderColor(This,p)
#define IHTMLTable_put_borderColorLight(This,v) (This)->lpVtbl->put_borderColorLight(This,v)
#define IHTMLTable_get_borderColorLight(This,p) (This)->lpVtbl->get_borderColorLight(This,p)
#define IHTMLTable_put_borderColorDark(This,v) (This)->lpVtbl->put_borderColorDark(This,v)
#define IHTMLTable_get_borderColorDark(This,p) (This)->lpVtbl->get_borderColorDark(This,p)
#define IHTMLTable_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLTable_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#define IHTMLTable_refresh(This) (This)->lpVtbl->refresh(This)
#define IHTMLTable_get_rows(This,p) (This)->lpVtbl->get_rows(This,p)
#define IHTMLTable_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLTable_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLTable_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLTable_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLTable_put_dataPageSize(This,v) (This)->lpVtbl->put_dataPageSize(This,v)
#define IHTMLTable_get_dataPageSize(This,p) (This)->lpVtbl->get_dataPageSize(This,p)
#define IHTMLTable_nextPage(This) (This)->lpVtbl->nextPage(This)
#define IHTMLTable_previousPage(This) (This)->lpVtbl->previousPage(This)
#define IHTMLTable_get_tHead(This,p) (This)->lpVtbl->get_tHead(This,p)
#define IHTMLTable_get_tFoot(This,p) (This)->lpVtbl->get_tFoot(This,p)
#define IHTMLTable_get_tBodies(This,p) (This)->lpVtbl->get_tBodies(This,p)
#define IHTMLTable_get_caption(This,p) (This)->lpVtbl->get_caption(This,p)
#define IHTMLTable_createTHead(This,head) (This)->lpVtbl->createTHead(This,head)
#define IHTMLTable_deleteTHead(This) (This)->lpVtbl->deleteTHead(This)
#define IHTMLTable_createTFoot(This,foot) (This)->lpVtbl->createTFoot(This,foot)
#define IHTMLTable_deleteTFoot(This) (This)->lpVtbl->deleteTFoot(This)
#define IHTMLTable_createCaption(This,caption) (This)->lpVtbl->createCaption(This,caption)
#define IHTMLTable_deleteCaption(This) (This)->lpVtbl->deleteCaption(This)
#define IHTMLTable_insertRow(This,index,row) (This)->lpVtbl->insertRow(This,index,row)
#define IHTMLTable_deleteRow(This,index) (This)->lpVtbl->deleteRow(This,index)
#define IHTMLTable_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IHTMLTable_put_onreadystatechange(This,v) (This)->lpVtbl->put_onreadystatechange(This,v)
#define IHTMLTable_get_onreadystatechange(This,p) (This)->lpVtbl->get_onreadystatechange(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLTable_put_cols_Proxy(IHTMLTable *This,long v);
  void __RPC_STUB IHTMLTable_put_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_cols_Proxy(IHTMLTable *This,long *p);
  void __RPC_STUB IHTMLTable_get_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_border_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_border_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_frame_Proxy(IHTMLTable *This,BSTR v);
  void __RPC_STUB IHTMLTable_put_frame_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_frame_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_frame_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_rules_Proxy(IHTMLTable *This,BSTR v);
  void __RPC_STUB IHTMLTable_put_rules_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_rules_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_rules_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_cellSpacing_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_cellSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_cellSpacing_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_cellSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_cellPadding_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_cellPadding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_cellPadding_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_cellPadding_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_background_Proxy(IHTMLTable *This,BSTR v);
  void __RPC_STUB IHTMLTable_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_background_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_bgColor_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_bgColor_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_borderColor_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_borderColor_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_borderColorLight_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_borderColorLight_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_borderColorDark_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_borderColorDark_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_align_Proxy(IHTMLTable *This,BSTR v);
  void __RPC_STUB IHTMLTable_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_align_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_refresh_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_refresh_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_rows_Proxy(IHTMLTable *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTable_get_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_width_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_width_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_height_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_height_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_dataPageSize_Proxy(IHTMLTable *This,long v);
  void __RPC_STUB IHTMLTable_put_dataPageSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_dataPageSize_Proxy(IHTMLTable *This,long *p);
  void __RPC_STUB IHTMLTable_get_dataPageSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_nextPage_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_nextPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_previousPage_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_previousPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_tHead_Proxy(IHTMLTable *This,IHTMLTableSection **p);
  void __RPC_STUB IHTMLTable_get_tHead_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_tFoot_Proxy(IHTMLTable *This,IHTMLTableSection **p);
  void __RPC_STUB IHTMLTable_get_tFoot_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_tBodies_Proxy(IHTMLTable *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTable_get_tBodies_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_caption_Proxy(IHTMLTable *This,IHTMLTableCaption **p);
  void __RPC_STUB IHTMLTable_get_caption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_createTHead_Proxy(IHTMLTable *This,IDispatch **head);
  void __RPC_STUB IHTMLTable_createTHead_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_deleteTHead_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_deleteTHead_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_createTFoot_Proxy(IHTMLTable *This,IDispatch **foot);
  void __RPC_STUB IHTMLTable_createTFoot_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_deleteTFoot_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_deleteTFoot_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_createCaption_Proxy(IHTMLTable *This,IHTMLTableCaption **caption);
  void __RPC_STUB IHTMLTable_createCaption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_deleteCaption_Proxy(IHTMLTable *This);
  void __RPC_STUB IHTMLTable_deleteCaption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_insertRow_Proxy(IHTMLTable *This,long index,IDispatch **row);
  void __RPC_STUB IHTMLTable_insertRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_deleteRow_Proxy(IHTMLTable *This,long index);
  void __RPC_STUB IHTMLTable_deleteRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_readyState_Proxy(IHTMLTable *This,BSTR *p);
  void __RPC_STUB IHTMLTable_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_put_onreadystatechange_Proxy(IHTMLTable *This,VARIANT v);
  void __RPC_STUB IHTMLTable_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable_get_onreadystatechange_Proxy(IHTMLTable *This,VARIANT *p);
  void __RPC_STUB IHTMLTable_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTable2_INTERFACE_DEFINED__
#define __IHTMLTable2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTable2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTable2 : public IDispatch {
  public:
    virtual HRESULT WINAPI firstPage(void) = 0;
    virtual HRESULT WINAPI lastPage(void) = 0;
    virtual HRESULT WINAPI get_cells(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI moveRow(long indexFrom,long indexTo,IDispatch **row) = 0;
  };
#else
  typedef struct IHTMLTable2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTable2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTable2 *This);
      ULONG (WINAPI *Release)(IHTMLTable2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTable2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTable2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTable2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTable2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *firstPage)(IHTMLTable2 *This);
      HRESULT (WINAPI *lastPage)(IHTMLTable2 *This);
      HRESULT (WINAPI *get_cells)(IHTMLTable2 *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *moveRow)(IHTMLTable2 *This,long indexFrom,long indexTo,IDispatch **row);
    END_INTERFACE
  } IHTMLTable2Vtbl;
  interface IHTMLTable2 {
    CONST_VTBL struct IHTMLTable2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTable2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTable2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTable2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTable2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTable2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTable2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTable2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTable2_firstPage(This) (This)->lpVtbl->firstPage(This)
#define IHTMLTable2_lastPage(This) (This)->lpVtbl->lastPage(This)
#define IHTMLTable2_get_cells(This,p) (This)->lpVtbl->get_cells(This,p)
#define IHTMLTable2_moveRow(This,indexFrom,indexTo,row) (This)->lpVtbl->moveRow(This,indexFrom,indexTo,row)
#endif
#endif

  HRESULT WINAPI IHTMLTable2_firstPage_Proxy(IHTMLTable2 *This);
  void __RPC_STUB IHTMLTable2_firstPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable2_lastPage_Proxy(IHTMLTable2 *This);
  void __RPC_STUB IHTMLTable2_lastPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable2_get_cells_Proxy(IHTMLTable2 *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTable2_get_cells_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable2_moveRow_Proxy(IHTMLTable2 *This,long indexFrom,long indexTo,IDispatch **row);
  void __RPC_STUB IHTMLTable2_moveRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTable3_INTERFACE_DEFINED__
#define __IHTMLTable3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTable3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTable3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_summary(BSTR v) = 0;
    virtual HRESULT WINAPI get_summary(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLTable3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTable3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTable3 *This);
      ULONG (WINAPI *Release)(IHTMLTable3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTable3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTable3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTable3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTable3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_summary)(IHTMLTable3 *This,BSTR v);
      HRESULT (WINAPI *get_summary)(IHTMLTable3 *This,BSTR *p);
    END_INTERFACE
  } IHTMLTable3Vtbl;
  interface IHTMLTable3 {
    CONST_VTBL struct IHTMLTable3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTable3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTable3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTable3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTable3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTable3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTable3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTable3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTable3_put_summary(This,v) (This)->lpVtbl->put_summary(This,v)
#define IHTMLTable3_get_summary(This,p) (This)->lpVtbl->get_summary(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLTable3_put_summary_Proxy(IHTMLTable3 *This,BSTR v);
  void __RPC_STUB IHTMLTable3_put_summary_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTable3_get_summary_Proxy(IHTMLTable3 *This,BSTR *p);
  void __RPC_STUB IHTMLTable3_get_summary_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableCol_INTERFACE_DEFINED__
#define __IHTMLTableCol_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCol;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTableCol : public IDispatch {
  public:
    virtual HRESULT WINAPI put_span(long v) = 0;
    virtual HRESULT WINAPI get_span(long *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLTableColVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTableCol *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTableCol *This);
      ULONG (WINAPI *Release)(IHTMLTableCol *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTableCol *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTableCol *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTableCol *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTableCol *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_span)(IHTMLTableCol *This,long v);
      HRESULT (WINAPI *get_span)(IHTMLTableCol *This,long *p);
      HRESULT (WINAPI *put_width)(IHTMLTableCol *This,VARIANT v);
      HRESULT (WINAPI *get_width)(IHTMLTableCol *This,VARIANT *p);
      HRESULT (WINAPI *put_align)(IHTMLTableCol *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLTableCol *This,BSTR *p);
      HRESULT (WINAPI *put_vAlign)(IHTMLTableCol *This,BSTR v);
      HRESULT (WINAPI *get_vAlign)(IHTMLTableCol *This,BSTR *p);
    END_INTERFACE
  } IHTMLTableColVtbl;
  interface IHTMLTableCol {
    CONST_VTBL struct IHTMLTableColVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTableCol_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTableCol_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTableCol_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTableCol_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTableCol_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTableCol_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTableCol_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTableCol_put_span(This,v) (This)->lpVtbl->put_span(This,v)
#define IHTMLTableCol_get_span(This,p) (This)->lpVtbl->get_span(This,p)
#define IHTMLTableCol_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLTableCol_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLTableCol_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLTableCol_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#define IHTMLTableCol_put_vAlign(This,v) (This)->lpVtbl->put_vAlign(This,v)
#define IHTMLTableCol_get_vAlign(This,p) (This)->lpVtbl->get_vAlign(This,p)
#endif
#endif
  HRESULT WINAPI IHTMLTableCol_put_span_Proxy(IHTMLTableCol *This,long v);
  void __RPC_STUB IHTMLTableCol_put_span_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_get_span_Proxy(IHTMLTableCol *This,long *p);
  void __RPC_STUB IHTMLTableCol_get_span_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_put_width_Proxy(IHTMLTableCol *This,VARIANT v);
  void __RPC_STUB IHTMLTableCol_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_get_width_Proxy(IHTMLTableCol *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCol_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_put_align_Proxy(IHTMLTableCol *This,BSTR v);
  void __RPC_STUB IHTMLTableCol_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_get_align_Proxy(IHTMLTableCol *This,BSTR *p);
  void __RPC_STUB IHTMLTableCol_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_put_vAlign_Proxy(IHTMLTableCol *This,BSTR v);
  void __RPC_STUB IHTMLTableCol_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol_get_vAlign_Proxy(IHTMLTableCol *This,BSTR *p);
  void __RPC_STUB IHTMLTableCol_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableCol2_INTERFACE_DEFINED__
#define __IHTMLTableCol2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCol2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTableCol2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_ch(BSTR v) = 0;
    virtual HRESULT WINAPI get_ch(BSTR *p) = 0;
    virtual HRESULT WINAPI put_chOff(BSTR v) = 0;
    virtual HRESULT WINAPI get_chOff(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLTableCol2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTableCol2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTableCol2 *This);
      ULONG (WINAPI *Release)(IHTMLTableCol2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTableCol2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTableCol2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTableCol2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTableCol2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_ch)(IHTMLTableCol2 *This,BSTR v);
      HRESULT (WINAPI *get_ch)(IHTMLTableCol2 *This,BSTR *p);
      HRESULT (WINAPI *put_chOff)(IHTMLTableCol2 *This,BSTR v);
      HRESULT (WINAPI *get_chOff)(IHTMLTableCol2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLTableCol2Vtbl;
  interface IHTMLTableCol2 {
    CONST_VTBL struct IHTMLTableCol2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTableCol2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTableCol2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTableCol2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTableCol2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTableCol2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTableCol2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTableCol2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTableCol2_put_ch(This,v) (This)->lpVtbl->put_ch(This,v)
#define IHTMLTableCol2_get_ch(This,p) (This)->lpVtbl->get_ch(This,p)
#define IHTMLTableCol2_put_chOff(This,v) (This)->lpVtbl->put_chOff(This,v)
#define IHTMLTableCol2_get_chOff(This,p) (This)->lpVtbl->get_chOff(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLTableCol2_put_ch_Proxy(IHTMLTableCol2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCol2_put_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol2_get_ch_Proxy(IHTMLTableCol2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCol2_get_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol2_put_chOff_Proxy(IHTMLTableCol2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCol2_put_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCol2_get_chOff_Proxy(IHTMLTableCol2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCol2_get_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableSection2_INTERFACE_DEFINED__
#define __IHTMLTableSection2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableSection2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTableSection2 : public IDispatch {
  public:
    virtual HRESULT WINAPI moveRow(long indexFrom,long indexTo,IDispatch **row) = 0;
  };
#else
  typedef struct IHTMLTableSection2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTableSection2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTableSection2 *This);
      ULONG (WINAPI *Release)(IHTMLTableSection2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTableSection2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTableSection2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTableSection2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTableSection2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *moveRow)(IHTMLTableSection2 *This,long indexFrom,long indexTo,IDispatch **row);
    END_INTERFACE
  } IHTMLTableSection2Vtbl;
  interface IHTMLTableSection2 {
    CONST_VTBL struct IHTMLTableSection2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTableSection2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTableSection2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTableSection2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTableSection2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTableSection2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTableSection2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTableSection2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTableSection2_moveRow(This,indexFrom,indexTo,row) (This)->lpVtbl->moveRow(This,indexFrom,indexTo,row)
#endif
#endif

  HRESULT WINAPI IHTMLTableSection2_moveRow_Proxy(IHTMLTableSection2 *This,long indexFrom,long indexTo,IDispatch **row);
  void __RPC_STUB IHTMLTableSection2_moveRow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableSection3_INTERFACE_DEFINED__
#define __IHTMLTableSection3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableSection3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTableSection3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_ch(BSTR v) = 0;
    virtual HRESULT WINAPI get_ch(BSTR *p) = 0;
    virtual HRESULT WINAPI put_chOff(BSTR v) = 0;
    virtual HRESULT WINAPI get_chOff(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLTableSection3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTableSection3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTableSection3 *This);
      ULONG (WINAPI *Release)(IHTMLTableSection3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTableSection3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTableSection3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTableSection3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTableSection3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_ch)(IHTMLTableSection3 *This,BSTR v);
      HRESULT (WINAPI *get_ch)(IHTMLTableSection3 *This,BSTR *p);
      HRESULT (WINAPI *put_chOff)(IHTMLTableSection3 *This,BSTR v);
      HRESULT (WINAPI *get_chOff)(IHTMLTableSection3 *This,BSTR *p);
    END_INTERFACE
  } IHTMLTableSection3Vtbl;
  interface IHTMLTableSection3 {
    CONST_VTBL struct IHTMLTableSection3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTableSection3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTableSection3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTableSection3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTableSection3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTableSection3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTableSection3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTableSection3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTableSection3_put_ch(This,v) (This)->lpVtbl->put_ch(This,v)
#define IHTMLTableSection3_get_ch(This,p) (This)->lpVtbl->get_ch(This,p)
#define IHTMLTableSection3_put_chOff(This,v) (This)->lpVtbl->put_chOff(This,v)
#define IHTMLTableSection3_get_chOff(This,p) (This)->lpVtbl->get_chOff(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLTableSection3_put_ch_Proxy(IHTMLTableSection3 *This,BSTR v);
  void __RPC_STUB IHTMLTableSection3_put_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection3_get_ch_Proxy(IHTMLTableSection3 *This,BSTR *p);
  void __RPC_STUB IHTMLTableSection3_get_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection3_put_chOff_Proxy(IHTMLTableSection3 *This,BSTR v);
  void __RPC_STUB IHTMLTableSection3_put_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableSection3_get_chOff_Proxy(IHTMLTableSection3 *This,BSTR *p);
  void __RPC_STUB IHTMLTableSection3_get_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableRow_INTERFACE_DEFINED__
#define __IHTMLTableRow_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableRow;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTableRow : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorLight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorLight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorDark(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorDark(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_rowIndex(long *p) = 0;
    virtual HRESULT WINAPI get_sectionRowIndex(long *p) = 0;
    virtual HRESULT WINAPI get_cells(IHTMLElementCollection **p) = 0;
    virtual HRESULT WINAPI insertCell(long index,IDispatch **row) = 0;
    virtual HRESULT WINAPI deleteCell(long index = -1) = 0;
  };
#else
  typedef struct IHTMLTableRowVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTableRow *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTableRow *This);
      ULONG (WINAPI *Release)(IHTMLTableRow *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTableRow *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTableRow *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTableRow *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTableRow *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_align)(IHTMLTableRow *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLTableRow *This,BSTR *p);
      HRESULT (WINAPI *put_vAlign)(IHTMLTableRow *This,BSTR v);
      HRESULT (WINAPI *get_vAlign)(IHTMLTableRow *This,BSTR *p);
      HRESULT (WINAPI *put_bgColor)(IHTMLTableRow *This,VARIANT v);
      HRESULT (WINAPI *get_bgColor)(IHTMLTableRow *This,VARIANT *p);
      HRESULT (WINAPI *put_borderColor)(IHTMLTableRow *This,VARIANT v);
      HRESULT (WINAPI *get_borderColor)(IHTMLTableRow *This,VARIANT *p);
      HRESULT (WINAPI *put_borderColorLight)(IHTMLTableRow *This,VARIANT v);
      HRESULT (WINAPI *get_borderColorLight)(IHTMLTableRow *This,VARIANT *p);
      HRESULT (WINAPI *put_borderColorDark)(IHTMLTableRow *This,VARIANT v);
      HRESULT (WINAPI *get_borderColorDark)(IHTMLTableRow *This,VARIANT *p);
      HRESULT (WINAPI *get_rowIndex)(IHTMLTableRow *This,long *p);
      HRESULT (WINAPI *get_sectionRowIndex)(IHTMLTableRow *This,long *p);
      HRESULT (WINAPI *get_cells)(IHTMLTableRow *This,IHTMLElementCollection **p);
      HRESULT (WINAPI *insertCell)(IHTMLTableRow *This,long index,IDispatch **row);
      HRESULT (WINAPI *deleteCell)(IHTMLTableRow *This,long index);
    END_INTERFACE
  } IHTMLTableRowVtbl;
  interface IHTMLTableRow {
    CONST_VTBL struct IHTMLTableRowVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTableRow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTableRow_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTableRow_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTableRow_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTableRow_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTableRow_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTableRow_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTableRow_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLTableRow_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#define IHTMLTableRow_put_vAlign(This,v) (This)->lpVtbl->put_vAlign(This,v)
#define IHTMLTableRow_get_vAlign(This,p) (This)->lpVtbl->get_vAlign(This,p)
#define IHTMLTableRow_put_bgColor(This,v) (This)->lpVtbl->put_bgColor(This,v)
#define IHTMLTableRow_get_bgColor(This,p) (This)->lpVtbl->get_bgColor(This,p)
#define IHTMLTableRow_put_borderColor(This,v) (This)->lpVtbl->put_borderColor(This,v)
#define IHTMLTableRow_get_borderColor(This,p) (This)->lpVtbl->get_borderColor(This,p)
#define IHTMLTableRow_put_borderColorLight(This,v) (This)->lpVtbl->put_borderColorLight(This,v)
#define IHTMLTableRow_get_borderColorLight(This,p) (This)->lpVtbl->get_borderColorLight(This,p)
#define IHTMLTableRow_put_borderColorDark(This,v) (This)->lpVtbl->put_borderColorDark(This,v)
#define IHTMLTableRow_get_borderColorDark(This,p) (This)->lpVtbl->get_borderColorDark(This,p)
#define IHTMLTableRow_get_rowIndex(This,p) (This)->lpVtbl->get_rowIndex(This,p)
#define IHTMLTableRow_get_sectionRowIndex(This,p) (This)->lpVtbl->get_sectionRowIndex(This,p)
#define IHTMLTableRow_get_cells(This,p) (This)->lpVtbl->get_cells(This,p)
#define IHTMLTableRow_insertCell(This,index,row) (This)->lpVtbl->insertCell(This,index,row)
#define IHTMLTableRow_deleteCell(This,index) (This)->lpVtbl->deleteCell(This,index)
#endif
#endif

  HRESULT WINAPI IHTMLTableRow_put_align_Proxy(IHTMLTableRow *This,BSTR v);
  void __RPC_STUB IHTMLTableRow_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_align_Proxy(IHTMLTableRow *This,BSTR *p);
  void __RPC_STUB IHTMLTableRow_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_vAlign_Proxy(IHTMLTableRow *This,BSTR v);
  void __RPC_STUB IHTMLTableRow_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_vAlign_Proxy(IHTMLTableRow *This,BSTR *p);
  void __RPC_STUB IHTMLTableRow_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_bgColor_Proxy(IHTMLTableRow *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_bgColor_Proxy(IHTMLTableRow *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_borderColor_Proxy(IHTMLTableRow *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_borderColor_Proxy(IHTMLTableRow *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_borderColorLight_Proxy(IHTMLTableRow *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow_put_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_borderColorLight_Proxy(IHTMLTableRow *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow_get_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_put_borderColorDark_Proxy(IHTMLTableRow *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow_put_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_borderColorDark_Proxy(IHTMLTableRow *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow_get_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_rowIndex_Proxy(IHTMLTableRow *This,long *p);
  void __RPC_STUB IHTMLTableRow_get_rowIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_sectionRowIndex_Proxy(IHTMLTableRow *This,long *p);
  void __RPC_STUB IHTMLTableRow_get_sectionRowIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_get_cells_Proxy(IHTMLTableRow *This,IHTMLElementCollection **p);
  void __RPC_STUB IHTMLTableRow_get_cells_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_insertCell_Proxy(IHTMLTableRow *This,long index,IDispatch **row);
  void __RPC_STUB IHTMLTableRow_insertCell_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow_deleteCell_Proxy(IHTMLTableRow *This,long index);
  void __RPC_STUB IHTMLTableRow_deleteCell_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableRow2_INTERFACE_DEFINED__
#define __IHTMLTableRow2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableRow2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTableRow2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLTableRow2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTableRow2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTableRow2 *This);
      ULONG (WINAPI *Release)(IHTMLTableRow2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTableRow2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTableRow2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTableRow2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTableRow2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_height)(IHTMLTableRow2 *This,VARIANT v);
      HRESULT (WINAPI *get_height)(IHTMLTableRow2 *This,VARIANT *p);
    END_INTERFACE
  } IHTMLTableRow2Vtbl;
  interface IHTMLTableRow2 {
    CONST_VTBL struct IHTMLTableRow2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTableRow2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTableRow2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTableRow2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTableRow2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTableRow2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTableRow2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTableRow2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTableRow2_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLTableRow2_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLTableRow2_put_height_Proxy(IHTMLTableRow2 *This,VARIANT v);
  void __RPC_STUB IHTMLTableRow2_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow2_get_height_Proxy(IHTMLTableRow2 *This,VARIANT *p);
  void __RPC_STUB IHTMLTableRow2_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableRow3_INTERFACE_DEFINED__
#define __IHTMLTableRow3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableRow3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTableRow3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_ch(BSTR v) = 0;
    virtual HRESULT WINAPI get_ch(BSTR *p) = 0;
    virtual HRESULT WINAPI put_chOff(BSTR v) = 0;
    virtual HRESULT WINAPI get_chOff(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLTableRow3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTableRow3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTableRow3 *This);
      ULONG (WINAPI *Release)(IHTMLTableRow3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTableRow3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTableRow3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTableRow3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTableRow3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_ch)(IHTMLTableRow3 *This,BSTR v);
      HRESULT (WINAPI *get_ch)(IHTMLTableRow3 *This,BSTR *p);
      HRESULT (WINAPI *put_chOff)(IHTMLTableRow3 *This,BSTR v);
      HRESULT (WINAPI *get_chOff)(IHTMLTableRow3 *This,BSTR *p);
    END_INTERFACE
  } IHTMLTableRow3Vtbl;
  interface IHTMLTableRow3 {
    CONST_VTBL struct IHTMLTableRow3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTableRow3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTableRow3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTableRow3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTableRow3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTableRow3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTableRow3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTableRow3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTableRow3_put_ch(This,v) (This)->lpVtbl->put_ch(This,v)
#define IHTMLTableRow3_get_ch(This,p) (This)->lpVtbl->get_ch(This,p)
#define IHTMLTableRow3_put_chOff(This,v) (This)->lpVtbl->put_chOff(This,v)
#define IHTMLTableRow3_get_chOff(This,p) (This)->lpVtbl->get_chOff(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLTableRow3_put_ch_Proxy(IHTMLTableRow3 *This,BSTR v);
  void __RPC_STUB IHTMLTableRow3_put_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow3_get_ch_Proxy(IHTMLTableRow3 *This,BSTR *p);
  void __RPC_STUB IHTMLTableRow3_get_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow3_put_chOff_Proxy(IHTMLTableRow3 *This,BSTR v);
  void __RPC_STUB IHTMLTableRow3_put_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRow3_get_chOff_Proxy(IHTMLTableRow3 *This,BSTR *p);
  void __RPC_STUB IHTMLTableRow3_get_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableRowMetrics_INTERFACE_DEFINED__
#define __IHTMLTableRowMetrics_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableRowMetrics;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTableRowMetrics : public IDispatch {
  public:
    virtual HRESULT WINAPI get_clientHeight(long *p) = 0;
    virtual HRESULT WINAPI get_clientWidth(long *p) = 0;
    virtual HRESULT WINAPI get_clientTop(long *p) = 0;
    virtual HRESULT WINAPI get_clientLeft(long *p) = 0;
  };
#else
  typedef struct IHTMLTableRowMetricsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTableRowMetrics *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTableRowMetrics *This);
      ULONG (WINAPI *Release)(IHTMLTableRowMetrics *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTableRowMetrics *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTableRowMetrics *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTableRowMetrics *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTableRowMetrics *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_clientHeight)(IHTMLTableRowMetrics *This,long *p);
      HRESULT (WINAPI *get_clientWidth)(IHTMLTableRowMetrics *This,long *p);
      HRESULT (WINAPI *get_clientTop)(IHTMLTableRowMetrics *This,long *p);
      HRESULT (WINAPI *get_clientLeft)(IHTMLTableRowMetrics *This,long *p);
    END_INTERFACE
  } IHTMLTableRowMetricsVtbl;
  interface IHTMLTableRowMetrics {
    CONST_VTBL struct IHTMLTableRowMetricsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTableRowMetrics_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTableRowMetrics_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTableRowMetrics_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTableRowMetrics_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTableRowMetrics_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTableRowMetrics_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTableRowMetrics_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTableRowMetrics_get_clientHeight(This,p) (This)->lpVtbl->get_clientHeight(This,p)
#define IHTMLTableRowMetrics_get_clientWidth(This,p) (This)->lpVtbl->get_clientWidth(This,p)
#define IHTMLTableRowMetrics_get_clientTop(This,p) (This)->lpVtbl->get_clientTop(This,p)
#define IHTMLTableRowMetrics_get_clientLeft(This,p) (This)->lpVtbl->get_clientLeft(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLTableRowMetrics_get_clientHeight_Proxy(IHTMLTableRowMetrics *This,long *p);
  void __RPC_STUB IHTMLTableRowMetrics_get_clientHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRowMetrics_get_clientWidth_Proxy(IHTMLTableRowMetrics *This,long *p);
  void __RPC_STUB IHTMLTableRowMetrics_get_clientWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRowMetrics_get_clientTop_Proxy(IHTMLTableRowMetrics *This,long *p);
  void __RPC_STUB IHTMLTableRowMetrics_get_clientTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableRowMetrics_get_clientLeft_Proxy(IHTMLTableRowMetrics *This,long *p);
  void __RPC_STUB IHTMLTableRowMetrics_get_clientLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableCell_INTERFACE_DEFINED__
#define __IHTMLTableCell_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCell;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTableCell : public IDispatch {
  public:
    virtual HRESULT WINAPI put_rowSpan(long v) = 0;
    virtual HRESULT WINAPI get_rowSpan(long *p) = 0;
    virtual HRESULT WINAPI put_colSpan(long v) = 0;
    virtual HRESULT WINAPI get_colSpan(long *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vAlign(BSTR v) = 0;
    virtual HRESULT WINAPI get_vAlign(BSTR *p) = 0;
    virtual HRESULT WINAPI put_bgColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_bgColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_noWrap(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_noWrap(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_background(BSTR v) = 0;
    virtual HRESULT WINAPI get_background(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorLight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorLight(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColorDark(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColorDark(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_cellIndex(long *p) = 0;
  };
#else
  typedef struct IHTMLTableCellVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTableCell *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTableCell *This);
      ULONG (WINAPI *Release)(IHTMLTableCell *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTableCell *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTableCell *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTableCell *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTableCell *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_rowSpan)(IHTMLTableCell *This,long v);
      HRESULT (WINAPI *get_rowSpan)(IHTMLTableCell *This,long *p);
      HRESULT (WINAPI *put_colSpan)(IHTMLTableCell *This,long v);
      HRESULT (WINAPI *get_colSpan)(IHTMLTableCell *This,long *p);
      HRESULT (WINAPI *put_align)(IHTMLTableCell *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLTableCell *This,BSTR *p);
      HRESULT (WINAPI *put_vAlign)(IHTMLTableCell *This,BSTR v);
      HRESULT (WINAPI *get_vAlign)(IHTMLTableCell *This,BSTR *p);
      HRESULT (WINAPI *put_bgColor)(IHTMLTableCell *This,VARIANT v);
      HRESULT (WINAPI *get_bgColor)(IHTMLTableCell *This,VARIANT *p);
      HRESULT (WINAPI *put_noWrap)(IHTMLTableCell *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_noWrap)(IHTMLTableCell *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_background)(IHTMLTableCell *This,BSTR v);
      HRESULT (WINAPI *get_background)(IHTMLTableCell *This,BSTR *p);
      HRESULT (WINAPI *put_borderColor)(IHTMLTableCell *This,VARIANT v);
      HRESULT (WINAPI *get_borderColor)(IHTMLTableCell *This,VARIANT *p);
      HRESULT (WINAPI *put_borderColorLight)(IHTMLTableCell *This,VARIANT v);
      HRESULT (WINAPI *get_borderColorLight)(IHTMLTableCell *This,VARIANT *p);
      HRESULT (WINAPI *put_borderColorDark)(IHTMLTableCell *This,VARIANT v);
      HRESULT (WINAPI *get_borderColorDark)(IHTMLTableCell *This,VARIANT *p);
      HRESULT (WINAPI *put_width)(IHTMLTableCell *This,VARIANT v);
      HRESULT (WINAPI *get_width)(IHTMLTableCell *This,VARIANT *p);
      HRESULT (WINAPI *put_height)(IHTMLTableCell *This,VARIANT v);
      HRESULT (WINAPI *get_height)(IHTMLTableCell *This,VARIANT *p);
      HRESULT (WINAPI *get_cellIndex)(IHTMLTableCell *This,long *p);
    END_INTERFACE
  } IHTMLTableCellVtbl;
  interface IHTMLTableCell {
    CONST_VTBL struct IHTMLTableCellVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTableCell_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTableCell_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTableCell_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTableCell_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTableCell_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTableCell_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTableCell_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTableCell_put_rowSpan(This,v) (This)->lpVtbl->put_rowSpan(This,v)
#define IHTMLTableCell_get_rowSpan(This,p) (This)->lpVtbl->get_rowSpan(This,p)
#define IHTMLTableCell_put_colSpan(This,v) (This)->lpVtbl->put_colSpan(This,v)
#define IHTMLTableCell_get_colSpan(This,p) (This)->lpVtbl->get_colSpan(This,p)
#define IHTMLTableCell_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLTableCell_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#define IHTMLTableCell_put_vAlign(This,v) (This)->lpVtbl->put_vAlign(This,v)
#define IHTMLTableCell_get_vAlign(This,p) (This)->lpVtbl->get_vAlign(This,p)
#define IHTMLTableCell_put_bgColor(This,v) (This)->lpVtbl->put_bgColor(This,v)
#define IHTMLTableCell_get_bgColor(This,p) (This)->lpVtbl->get_bgColor(This,p)
#define IHTMLTableCell_put_noWrap(This,v) (This)->lpVtbl->put_noWrap(This,v)
#define IHTMLTableCell_get_noWrap(This,p) (This)->lpVtbl->get_noWrap(This,p)
#define IHTMLTableCell_put_background(This,v) (This)->lpVtbl->put_background(This,v)
#define IHTMLTableCell_get_background(This,p) (This)->lpVtbl->get_background(This,p)
#define IHTMLTableCell_put_borderColor(This,v) (This)->lpVtbl->put_borderColor(This,v)
#define IHTMLTableCell_get_borderColor(This,p) (This)->lpVtbl->get_borderColor(This,p)
#define IHTMLTableCell_put_borderColorLight(This,v) (This)->lpVtbl->put_borderColorLight(This,v)
#define IHTMLTableCell_get_borderColorLight(This,p) (This)->lpVtbl->get_borderColorLight(This,p)
#define IHTMLTableCell_put_borderColorDark(This,v) (This)->lpVtbl->put_borderColorDark(This,v)
#define IHTMLTableCell_get_borderColorDark(This,p) (This)->lpVtbl->get_borderColorDark(This,p)
#define IHTMLTableCell_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLTableCell_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLTableCell_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLTableCell_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLTableCell_get_cellIndex(This,p) (This)->lpVtbl->get_cellIndex(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLTableCell_put_rowSpan_Proxy(IHTMLTableCell *This,long v);
  void __RPC_STUB IHTMLTableCell_put_rowSpan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_rowSpan_Proxy(IHTMLTableCell *This,long *p);
  void __RPC_STUB IHTMLTableCell_get_rowSpan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_colSpan_Proxy(IHTMLTableCell *This,long v);
  void __RPC_STUB IHTMLTableCell_put_colSpan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_colSpan_Proxy(IHTMLTableCell *This,long *p);
  void __RPC_STUB IHTMLTableCell_get_colSpan_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_align_Proxy(IHTMLTableCell *This,BSTR v);
  void __RPC_STUB IHTMLTableCell_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_align_Proxy(IHTMLTableCell *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_vAlign_Proxy(IHTMLTableCell *This,BSTR v);
  void __RPC_STUB IHTMLTableCell_put_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_vAlign_Proxy(IHTMLTableCell *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell_get_vAlign_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_bgColor_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_bgColor_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_bgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_noWrap_Proxy(IHTMLTableCell *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLTableCell_put_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_noWrap_Proxy(IHTMLTableCell *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLTableCell_get_noWrap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_background_Proxy(IHTMLTableCell *This,BSTR v);
  void __RPC_STUB IHTMLTableCell_put_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_background_Proxy(IHTMLTableCell *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell_get_background_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_borderColor_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_borderColor_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_borderColorLight_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_borderColorLight_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_borderColorLight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_borderColorDark_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_borderColorDark_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_borderColorDark_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_width_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_width_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_put_height_Proxy(IHTMLTableCell *This,VARIANT v);
  void __RPC_STUB IHTMLTableCell_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_height_Proxy(IHTMLTableCell *This,VARIANT *p);
  void __RPC_STUB IHTMLTableCell_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell_get_cellIndex_Proxy(IHTMLTableCell *This,long *p);
  void __RPC_STUB IHTMLTableCell_get_cellIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLTableCell2_INTERFACE_DEFINED__
#define __IHTMLTableCell2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLTableCell2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLTableCell2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_abbr(BSTR v) = 0;
    virtual HRESULT WINAPI get_abbr(BSTR *p) = 0;
    virtual HRESULT WINAPI put_axis(BSTR v) = 0;
    virtual HRESULT WINAPI get_axis(BSTR *p) = 0;
    virtual HRESULT WINAPI put_ch(BSTR v) = 0;
    virtual HRESULT WINAPI get_ch(BSTR *p) = 0;
    virtual HRESULT WINAPI put_chOff(BSTR v) = 0;
    virtual HRESULT WINAPI get_chOff(BSTR *p) = 0;
    virtual HRESULT WINAPI put_headers(BSTR v) = 0;
    virtual HRESULT WINAPI get_headers(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scope(BSTR v) = 0;
    virtual HRESULT WINAPI get_scope(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLTableCell2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLTableCell2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLTableCell2 *This);
      ULONG (WINAPI *Release)(IHTMLTableCell2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLTableCell2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLTableCell2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLTableCell2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLTableCell2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_abbr)(IHTMLTableCell2 *This,BSTR v);
      HRESULT (WINAPI *get_abbr)(IHTMLTableCell2 *This,BSTR *p);
      HRESULT (WINAPI *put_axis)(IHTMLTableCell2 *This,BSTR v);
      HRESULT (WINAPI *get_axis)(IHTMLTableCell2 *This,BSTR *p);
      HRESULT (WINAPI *put_ch)(IHTMLTableCell2 *This,BSTR v);
      HRESULT (WINAPI *get_ch)(IHTMLTableCell2 *This,BSTR *p);
      HRESULT (WINAPI *put_chOff)(IHTMLTableCell2 *This,BSTR v);
      HRESULT (WINAPI *get_chOff)(IHTMLTableCell2 *This,BSTR *p);
      HRESULT (WINAPI *put_headers)(IHTMLTableCell2 *This,BSTR v);
      HRESULT (WINAPI *get_headers)(IHTMLTableCell2 *This,BSTR *p);
      HRESULT (WINAPI *put_scope)(IHTMLTableCell2 *This,BSTR v);
      HRESULT (WINAPI *get_scope)(IHTMLTableCell2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLTableCell2Vtbl;
  interface IHTMLTableCell2 {
    CONST_VTBL struct IHTMLTableCell2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLTableCell2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLTableCell2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLTableCell2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLTableCell2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLTableCell2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLTableCell2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLTableCell2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLTableCell2_put_abbr(This,v) (This)->lpVtbl->put_abbr(This,v)
#define IHTMLTableCell2_get_abbr(This,p) (This)->lpVtbl->get_abbr(This,p)
#define IHTMLTableCell2_put_axis(This,v) (This)->lpVtbl->put_axis(This,v)
#define IHTMLTableCell2_get_axis(This,p) (This)->lpVtbl->get_axis(This,p)
#define IHTMLTableCell2_put_ch(This,v) (This)->lpVtbl->put_ch(This,v)
#define IHTMLTableCell2_get_ch(This,p) (This)->lpVtbl->get_ch(This,p)
#define IHTMLTableCell2_put_chOff(This,v) (This)->lpVtbl->put_chOff(This,v)
#define IHTMLTableCell2_get_chOff(This,p) (This)->lpVtbl->get_chOff(This,p)
#define IHTMLTableCell2_put_headers(This,v) (This)->lpVtbl->put_headers(This,v)
#define IHTMLTableCell2_get_headers(This,p) (This)->lpVtbl->get_headers(This,p)
#define IHTMLTableCell2_put_scope(This,v) (This)->lpVtbl->put_scope(This,v)
#define IHTMLTableCell2_get_scope(This,p) (This)->lpVtbl->get_scope(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLTableCell2_put_abbr_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_abbr_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_abbr_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_abbr_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_axis_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_axis_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_axis_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_axis_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_ch_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_ch_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_ch_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_chOff_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_chOff_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_chOff_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_headers_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_headers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_headers_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_headers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_put_scope_Proxy(IHTMLTableCell2 *This,BSTR v);
  void __RPC_STUB IHTMLTableCell2_put_scope_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLTableCell2_get_scope_Proxy(IHTMLTableCell2 *This,BSTR *p);
  void __RPC_STUB IHTMLTableCell2_get_scope_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLTable_DISPINTERFACE_DEFINED__
#define __DispHTMLTable_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTable;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLTable : public IDispatch {
  };
#else
  typedef struct DispHTMLTableVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLTable *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLTable *This);
      ULONG (WINAPI *Release)(DispHTMLTable *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLTable *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLTable *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLTable *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLTable *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLTableVtbl;
  interface DispHTMLTable {
    CONST_VTBL struct DispHTMLTableVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLTable_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLTable_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLTable_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLTable_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLTable_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLTable_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLTable;
#ifdef __cplusplus
  class HTMLTable;
#endif

#ifndef __DispHTMLTableCol_DISPINTERFACE_DEFINED__
#define __DispHTMLTableCol_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableCol;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLTableCol : public IDispatch {
  };
#else
  typedef struct DispHTMLTableColVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLTableCol *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLTableCol *This);
      ULONG (WINAPI *Release)(DispHTMLTableCol *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLTableCol *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLTableCol *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLTableCol *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLTableCol *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLTableColVtbl;
  interface DispHTMLTableCol {
    CONST_VTBL struct DispHTMLTableColVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLTableCol_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLTableCol_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLTableCol_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLTableCol_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLTableCol_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLTableCol_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLTableCol_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLTableCol;
#ifdef __cplusplus
  class HTMLTableCol;
#endif

#ifndef __DispHTMLTableSection_DISPINTERFACE_DEFINED__
#define __DispHTMLTableSection_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableSection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLTableSection : public IDispatch {
  };
#else
  typedef struct DispHTMLTableSectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLTableSection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLTableSection *This);
      ULONG (WINAPI *Release)(DispHTMLTableSection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLTableSection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLTableSection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLTableSection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLTableSection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLTableSectionVtbl;
  interface DispHTMLTableSection {
    CONST_VTBL struct DispHTMLTableSectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLTableSection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLTableSection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLTableSection_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLTableSection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLTableSection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLTableSection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLTableSection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLTableSection;
#ifdef __cplusplus
  class HTMLTableSection;
#endif

#ifndef __DispHTMLTableRow_DISPINTERFACE_DEFINED__
#define __DispHTMLTableRow_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableRow;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLTableRow : public IDispatch {
  };
#else
  typedef struct DispHTMLTableRowVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLTableRow *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLTableRow *This);
      ULONG (WINAPI *Release)(DispHTMLTableRow *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLTableRow *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLTableRow *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLTableRow *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLTableRow *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLTableRowVtbl;
  interface DispHTMLTableRow {
    CONST_VTBL struct DispHTMLTableRowVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLTableRow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLTableRow_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLTableRow_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLTableRow_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLTableRow_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLTableRow_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLTableRow_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLTableRow;
#ifdef __cplusplus
  class HTMLTableRow;
#endif

#ifndef __DispHTMLTableCell_DISPINTERFACE_DEFINED__
#define __DispHTMLTableCell_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLTableCell;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLTableCell : public IDispatch {
  };
#else
  typedef struct DispHTMLTableCellVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLTableCell *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLTableCell *This);
      ULONG (WINAPI *Release)(DispHTMLTableCell *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLTableCell *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLTableCell *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLTableCell *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLTableCell *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLTableCellVtbl;
  interface DispHTMLTableCell {
    CONST_VTBL struct DispHTMLTableCellVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLTableCell_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLTableCell_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLTableCell_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLTableCell_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLTableCell_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLTableCell_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLTableCell_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLTableCell;
#ifdef __cplusplus
  class HTMLTableCell;
#endif

#ifndef __HTMLScriptEvents2_DISPINTERFACE_DEFINED__
#define __HTMLScriptEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLScriptEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLScriptEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLScriptEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLScriptEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLScriptEvents2 *This);
      ULONG (WINAPI *Release)(HTMLScriptEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLScriptEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLScriptEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLScriptEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLScriptEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLScriptEvents2Vtbl;
  interface HTMLScriptEvents2 {
    CONST_VTBL struct HTMLScriptEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLScriptEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLScriptEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLScriptEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLScriptEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLScriptEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLScriptEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLScriptEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLScriptEvents_DISPINTERFACE_DEFINED__
#define __HTMLScriptEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLScriptEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLScriptEvents : public IDispatch {
  };
#else
  typedef struct HTMLScriptEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLScriptEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLScriptEvents *This);
      ULONG (WINAPI *Release)(HTMLScriptEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLScriptEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLScriptEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLScriptEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLScriptEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLScriptEventsVtbl;
  interface HTMLScriptEvents {
    CONST_VTBL struct HTMLScriptEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLScriptEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLScriptEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLScriptEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLScriptEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLScriptEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLScriptEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLScriptEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLScriptElement_INTERFACE_DEFINED__
#define __IHTMLScriptElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLScriptElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLScriptElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_htmlFor(BSTR v) = 0;
    virtual HRESULT WINAPI get_htmlFor(BSTR *p) = 0;
    virtual HRESULT WINAPI put_event(BSTR v) = 0;
    virtual HRESULT WINAPI get_event(BSTR *p) = 0;
    virtual HRESULT WINAPI put_text(BSTR v) = 0;
    virtual HRESULT WINAPI get_text(BSTR *p) = 0;
    virtual HRESULT WINAPI put_defer(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_defer(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLScriptElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLScriptElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLScriptElement *This);
      ULONG (WINAPI *Release)(IHTMLScriptElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLScriptElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLScriptElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLScriptElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLScriptElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_src)(IHTMLScriptElement *This,BSTR v);
      HRESULT (WINAPI *get_src)(IHTMLScriptElement *This,BSTR *p);
      HRESULT (WINAPI *put_htmlFor)(IHTMLScriptElement *This,BSTR v);
      HRESULT (WINAPI *get_htmlFor)(IHTMLScriptElement *This,BSTR *p);
      HRESULT (WINAPI *put_event)(IHTMLScriptElement *This,BSTR v);
      HRESULT (WINAPI *get_event)(IHTMLScriptElement *This,BSTR *p);
      HRESULT (WINAPI *put_text)(IHTMLScriptElement *This,BSTR v);
      HRESULT (WINAPI *get_text)(IHTMLScriptElement *This,BSTR *p);
      HRESULT (WINAPI *put_defer)(IHTMLScriptElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_defer)(IHTMLScriptElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_readyState)(IHTMLScriptElement *This,BSTR *p);
      HRESULT (WINAPI *put_onerror)(IHTMLScriptElement *This,VARIANT v);
      HRESULT (WINAPI *get_onerror)(IHTMLScriptElement *This,VARIANT *p);
      HRESULT (WINAPI *put_type)(IHTMLScriptElement *This,BSTR v);
      HRESULT (WINAPI *get_type)(IHTMLScriptElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLScriptElementVtbl;
  interface IHTMLScriptElement {
    CONST_VTBL struct IHTMLScriptElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLScriptElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLScriptElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLScriptElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLScriptElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLScriptElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLScriptElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLScriptElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLScriptElement_put_src(This,v) (This)->lpVtbl->put_src(This,v)
#define IHTMLScriptElement_get_src(This,p) (This)->lpVtbl->get_src(This,p)
#define IHTMLScriptElement_put_htmlFor(This,v) (This)->lpVtbl->put_htmlFor(This,v)
#define IHTMLScriptElement_get_htmlFor(This,p) (This)->lpVtbl->get_htmlFor(This,p)
#define IHTMLScriptElement_put_event(This,v) (This)->lpVtbl->put_event(This,v)
#define IHTMLScriptElement_get_event(This,p) (This)->lpVtbl->get_event(This,p)
#define IHTMLScriptElement_put_text(This,v) (This)->lpVtbl->put_text(This,v)
#define IHTMLScriptElement_get_text(This,p) (This)->lpVtbl->get_text(This,p)
#define IHTMLScriptElement_put_defer(This,v) (This)->lpVtbl->put_defer(This,v)
#define IHTMLScriptElement_get_defer(This,p) (This)->lpVtbl->get_defer(This,p)
#define IHTMLScriptElement_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IHTMLScriptElement_put_onerror(This,v) (This)->lpVtbl->put_onerror(This,v)
#define IHTMLScriptElement_get_onerror(This,p) (This)->lpVtbl->get_onerror(This,p)
#define IHTMLScriptElement_put_type(This,v) (This)->lpVtbl->put_type(This,v)
#define IHTMLScriptElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLScriptElement_put_src_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_src_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_htmlFor_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_htmlFor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_htmlFor_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_htmlFor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_event_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_event_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_event_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_event_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_text_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_text_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_text_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_defer_Proxy(IHTMLScriptElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLScriptElement_put_defer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_defer_Proxy(IHTMLScriptElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLScriptElement_get_defer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_readyState_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_onerror_Proxy(IHTMLScriptElement *This,VARIANT v);
  void __RPC_STUB IHTMLScriptElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_onerror_Proxy(IHTMLScriptElement *This,VARIANT *p);
  void __RPC_STUB IHTMLScriptElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_put_type_Proxy(IHTMLScriptElement *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement_get_type_Proxy(IHTMLScriptElement *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLScriptElement2_INTERFACE_DEFINED__
#define __IHTMLScriptElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLScriptElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLScriptElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_charset(BSTR v) = 0;
    virtual HRESULT WINAPI get_charset(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLScriptElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLScriptElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLScriptElement2 *This);
      ULONG (WINAPI *Release)(IHTMLScriptElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLScriptElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLScriptElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLScriptElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLScriptElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_charset)(IHTMLScriptElement2 *This,BSTR v);
      HRESULT (WINAPI *get_charset)(IHTMLScriptElement2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLScriptElement2Vtbl;
  interface IHTMLScriptElement2 {
    CONST_VTBL struct IHTMLScriptElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLScriptElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLScriptElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLScriptElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLScriptElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLScriptElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLScriptElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLScriptElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLScriptElement2_put_charset(This,v) (This)->lpVtbl->put_charset(This,v)
#define IHTMLScriptElement2_get_charset(This,p) (This)->lpVtbl->get_charset(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLScriptElement2_put_charset_Proxy(IHTMLScriptElement2 *This,BSTR v);
  void __RPC_STUB IHTMLScriptElement2_put_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLScriptElement2_get_charset_Proxy(IHTMLScriptElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLScriptElement2_get_charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLScriptElement_DISPINTERFACE_DEFINED__
#define __DispHTMLScriptElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLScriptElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLScriptElement : public IDispatch {
  };
#else
  typedef struct DispHTMLScriptElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLScriptElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLScriptElement *This);
      ULONG (WINAPI *Release)(DispHTMLScriptElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLScriptElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLScriptElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLScriptElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLScriptElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLScriptElementVtbl;
  interface DispHTMLScriptElement {
    CONST_VTBL struct DispHTMLScriptElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLScriptElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLScriptElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLScriptElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLScriptElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLScriptElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLScriptElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLScriptElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLScriptElement;
#ifdef __cplusplus
  class HTMLScriptElement;
#endif

#ifndef __IHTMLNoShowElement_INTERFACE_DEFINED__
#define __IHTMLNoShowElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLNoShowElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLNoShowElement : public IDispatch {
  };
#else
  typedef struct IHTMLNoShowElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLNoShowElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLNoShowElement *This);
      ULONG (WINAPI *Release)(IHTMLNoShowElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLNoShowElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLNoShowElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLNoShowElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLNoShowElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } IHTMLNoShowElementVtbl;
  interface IHTMLNoShowElement {
    CONST_VTBL struct IHTMLNoShowElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLNoShowElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLNoShowElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLNoShowElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLNoShowElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLNoShowElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLNoShowElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLNoShowElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __DispHTMLNoShowElement_DISPINTERFACE_DEFINED__
#define __DispHTMLNoShowElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLNoShowElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLNoShowElement : public IDispatch {
  };
#else
  typedef struct DispHTMLNoShowElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLNoShowElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLNoShowElement *This);
      ULONG (WINAPI *Release)(DispHTMLNoShowElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLNoShowElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLNoShowElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLNoShowElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLNoShowElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLNoShowElementVtbl;
  interface DispHTMLNoShowElement {
    CONST_VTBL struct DispHTMLNoShowElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLNoShowElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLNoShowElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLNoShowElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLNoShowElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLNoShowElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLNoShowElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLNoShowElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLNoShowElement;
#ifdef __cplusplus
  class HTMLNoShowElement;
#endif

#ifndef __HTMLObjectElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLObjectElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLObjectElementEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLObjectElementEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLObjectElementEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLObjectElementEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLObjectElementEvents2 *This);
      ULONG (WINAPI *Release)(HTMLObjectElementEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLObjectElementEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLObjectElementEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLObjectElementEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLObjectElementEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLObjectElementEvents2Vtbl;
  interface HTMLObjectElementEvents2 {
    CONST_VTBL struct HTMLObjectElementEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLObjectElementEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLObjectElementEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLObjectElementEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLObjectElementEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLObjectElementEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLObjectElementEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLObjectElementEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLObjectElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLObjectElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLObjectElementEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLObjectElementEvents : public IDispatch {
  };
#else
  typedef struct HTMLObjectElementEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLObjectElementEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLObjectElementEvents *This);
      ULONG (WINAPI *Release)(HTMLObjectElementEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLObjectElementEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLObjectElementEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLObjectElementEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLObjectElementEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLObjectElementEventsVtbl;
  interface HTMLObjectElementEvents {
    CONST_VTBL struct HTMLObjectElementEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLObjectElementEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLObjectElementEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLObjectElementEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLObjectElementEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLObjectElementEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLObjectElementEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLObjectElementEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLObjectElement_INTERFACE_DEFINED__
#define __IHTMLObjectElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLObjectElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLObjectElement : public IDispatch {
  public:
    virtual HRESULT WINAPI get_object(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_classid(BSTR *p) = 0;
    virtual HRESULT WINAPI get_data(BSTR *p) = 0;
    virtual HRESULT WINAPI putref_recordset(IDispatch *v) = 0;
    virtual HRESULT WINAPI get_recordset(IDispatch **p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_codeBase(BSTR v) = 0;
    virtual HRESULT WINAPI get_codeBase(BSTR *p) = 0;
    virtual HRESULT WINAPI put_codeType(BSTR v) = 0;
    virtual HRESULT WINAPI get_codeType(BSTR *p) = 0;
    virtual HRESULT WINAPI put_code(BSTR v) = 0;
    virtual HRESULT WINAPI get_code(BSTR *p) = 0;
    virtual HRESULT WINAPI get_BaseHref(BSTR *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_readyState(long *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_altHtml(BSTR v) = 0;
    virtual HRESULT WINAPI get_altHtml(BSTR *p) = 0;
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
  };
#else
  typedef struct IHTMLObjectElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLObjectElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLObjectElement *This);
      ULONG (WINAPI *Release)(IHTMLObjectElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLObjectElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLObjectElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLObjectElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLObjectElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_object)(IHTMLObjectElement *This,IDispatch **p);
      HRESULT (WINAPI *get_classid)(IHTMLObjectElement *This,BSTR *p);
      HRESULT (WINAPI *get_data)(IHTMLObjectElement *This,BSTR *p);
      HRESULT (WINAPI *putref_recordset)(IHTMLObjectElement *This,IDispatch *v);
      HRESULT (WINAPI *get_recordset)(IHTMLObjectElement *This,IDispatch **p);
      HRESULT (WINAPI *put_align)(IHTMLObjectElement *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLObjectElement *This,BSTR *p);
      HRESULT (WINAPI *put_name)(IHTMLObjectElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLObjectElement *This,BSTR *p);
      HRESULT (WINAPI *put_codeBase)(IHTMLObjectElement *This,BSTR v);
      HRESULT (WINAPI *get_codeBase)(IHTMLObjectElement *This,BSTR *p);
      HRESULT (WINAPI *put_codeType)(IHTMLObjectElement *This,BSTR v);
      HRESULT (WINAPI *get_codeType)(IHTMLObjectElement *This,BSTR *p);
      HRESULT (WINAPI *put_code)(IHTMLObjectElement *This,BSTR v);
      HRESULT (WINAPI *get_code)(IHTMLObjectElement *This,BSTR *p);
      HRESULT (WINAPI *get_BaseHref)(IHTMLObjectElement *This,BSTR *p);
      HRESULT (WINAPI *put_type)(IHTMLObjectElement *This,BSTR v);
      HRESULT (WINAPI *get_type)(IHTMLObjectElement *This,BSTR *p);
      HRESULT (WINAPI *get_form)(IHTMLObjectElement *This,IHTMLFormElement **p);
      HRESULT (WINAPI *put_width)(IHTMLObjectElement *This,VARIANT v);
      HRESULT (WINAPI *get_width)(IHTMLObjectElement *This,VARIANT *p);
      HRESULT (WINAPI *put_height)(IHTMLObjectElement *This,VARIANT v);
      HRESULT (WINAPI *get_height)(IHTMLObjectElement *This,VARIANT *p);
      HRESULT (WINAPI *get_readyState)(IHTMLObjectElement *This,long *p);
      HRESULT (WINAPI *put_onreadystatechange)(IHTMLObjectElement *This,VARIANT v);
      HRESULT (WINAPI *get_onreadystatechange)(IHTMLObjectElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onerror)(IHTMLObjectElement *This,VARIANT v);
      HRESULT (WINAPI *get_onerror)(IHTMLObjectElement *This,VARIANT *p);
      HRESULT (WINAPI *put_altHtml)(IHTMLObjectElement *This,BSTR v);
      HRESULT (WINAPI *get_altHtml)(IHTMLObjectElement *This,BSTR *p);
      HRESULT (WINAPI *put_vspace)(IHTMLObjectElement *This,long v);
      HRESULT (WINAPI *get_vspace)(IHTMLObjectElement *This,long *p);
      HRESULT (WINAPI *put_hspace)(IHTMLObjectElement *This,long v);
      HRESULT (WINAPI *get_hspace)(IHTMLObjectElement *This,long *p);
    END_INTERFACE
  } IHTMLObjectElementVtbl;
  interface IHTMLObjectElement {
    CONST_VTBL struct IHTMLObjectElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLObjectElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLObjectElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLObjectElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLObjectElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLObjectElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLObjectElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLObjectElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLObjectElement_get_object(This,p) (This)->lpVtbl->get_object(This,p)
#define IHTMLObjectElement_get_classid(This,p) (This)->lpVtbl->get_classid(This,p)
#define IHTMLObjectElement_get_data(This,p) (This)->lpVtbl->get_data(This,p)
#define IHTMLObjectElement_putref_recordset(This,v) (This)->lpVtbl->putref_recordset(This,v)
#define IHTMLObjectElement_get_recordset(This,p) (This)->lpVtbl->get_recordset(This,p)
#define IHTMLObjectElement_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLObjectElement_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#define IHTMLObjectElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLObjectElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLObjectElement_put_codeBase(This,v) (This)->lpVtbl->put_codeBase(This,v)
#define IHTMLObjectElement_get_codeBase(This,p) (This)->lpVtbl->get_codeBase(This,p)
#define IHTMLObjectElement_put_codeType(This,v) (This)->lpVtbl->put_codeType(This,v)
#define IHTMLObjectElement_get_codeType(This,p) (This)->lpVtbl->get_codeType(This,p)
#define IHTMLObjectElement_put_code(This,v) (This)->lpVtbl->put_code(This,v)
#define IHTMLObjectElement_get_code(This,p) (This)->lpVtbl->get_code(This,p)
#define IHTMLObjectElement_get_BaseHref(This,p) (This)->lpVtbl->get_BaseHref(This,p)
#define IHTMLObjectElement_put_type(This,v) (This)->lpVtbl->put_type(This,v)
#define IHTMLObjectElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLObjectElement_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#define IHTMLObjectElement_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLObjectElement_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#define IHTMLObjectElement_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLObjectElement_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLObjectElement_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IHTMLObjectElement_put_onreadystatechange(This,v) (This)->lpVtbl->put_onreadystatechange(This,v)
#define IHTMLObjectElement_get_onreadystatechange(This,p) (This)->lpVtbl->get_onreadystatechange(This,p)
#define IHTMLObjectElement_put_onerror(This,v) (This)->lpVtbl->put_onerror(This,v)
#define IHTMLObjectElement_get_onerror(This,p) (This)->lpVtbl->get_onerror(This,p)
#define IHTMLObjectElement_put_altHtml(This,v) (This)->lpVtbl->put_altHtml(This,v)
#define IHTMLObjectElement_get_altHtml(This,p) (This)->lpVtbl->get_altHtml(This,p)
#define IHTMLObjectElement_put_vspace(This,v) (This)->lpVtbl->put_vspace(This,v)
#define IHTMLObjectElement_get_vspace(This,p) (This)->lpVtbl->get_vspace(This,p)
#define IHTMLObjectElement_put_hspace(This,v) (This)->lpVtbl->put_hspace(This,v)
#define IHTMLObjectElement_get_hspace(This,p) (This)->lpVtbl->get_hspace(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLObjectElement_get_object_Proxy(IHTMLObjectElement *This,IDispatch **p);
  void __RPC_STUB IHTMLObjectElement_get_object_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_classid_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_classid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_data_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_putref_recordset_Proxy(IHTMLObjectElement *This,IDispatch *v);
  void __RPC_STUB IHTMLObjectElement_putref_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_recordset_Proxy(IHTMLObjectElement *This,IDispatch **p);
  void __RPC_STUB IHTMLObjectElement_get_recordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_align_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_align_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_name_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_name_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_codeBase_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_codeBase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_codeBase_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_codeBase_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_codeType_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_codeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_codeType_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_codeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_code_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_code_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_code_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_code_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_BaseHref_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_BaseHref_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_type_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_type_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_form_Proxy(IHTMLObjectElement *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLObjectElement_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_width_Proxy(IHTMLObjectElement *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_width_Proxy(IHTMLObjectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_height_Proxy(IHTMLObjectElement *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_height_Proxy(IHTMLObjectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_readyState_Proxy(IHTMLObjectElement *This,long *p);
  void __RPC_STUB IHTMLObjectElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_onreadystatechange_Proxy(IHTMLObjectElement *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_onreadystatechange_Proxy(IHTMLObjectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_onerror_Proxy(IHTMLObjectElement *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_onerror_Proxy(IHTMLObjectElement *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_altHtml_Proxy(IHTMLObjectElement *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement_put_altHtml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_altHtml_Proxy(IHTMLObjectElement *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement_get_altHtml_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_vspace_Proxy(IHTMLObjectElement *This,long v);
  void __RPC_STUB IHTMLObjectElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_vspace_Proxy(IHTMLObjectElement *This,long *p);
  void __RPC_STUB IHTMLObjectElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_put_hspace_Proxy(IHTMLObjectElement *This,long v);
  void __RPC_STUB IHTMLObjectElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement_get_hspace_Proxy(IHTMLObjectElement *This,long *p);
  void __RPC_STUB IHTMLObjectElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLObjectElement2_INTERFACE_DEFINED__
#define __IHTMLObjectElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLObjectElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLObjectElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI namedRecordset(BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset) = 0;
    virtual HRESULT WINAPI put_classid(BSTR v) = 0;
    virtual HRESULT WINAPI get_classid(BSTR *p) = 0;
    virtual HRESULT WINAPI put_data(BSTR v) = 0;
    virtual HRESULT WINAPI get_data(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLObjectElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLObjectElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLObjectElement2 *This);
      ULONG (WINAPI *Release)(IHTMLObjectElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLObjectElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLObjectElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLObjectElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLObjectElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *namedRecordset)(IHTMLObjectElement2 *This,BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset);
      HRESULT (WINAPI *put_classid)(IHTMLObjectElement2 *This,BSTR v);
      HRESULT (WINAPI *get_classid)(IHTMLObjectElement2 *This,BSTR *p);
      HRESULT (WINAPI *put_data)(IHTMLObjectElement2 *This,BSTR v);
      HRESULT (WINAPI *get_data)(IHTMLObjectElement2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLObjectElement2Vtbl;
  interface IHTMLObjectElement2 {
    CONST_VTBL struct IHTMLObjectElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLObjectElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLObjectElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLObjectElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLObjectElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLObjectElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLObjectElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLObjectElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLObjectElement2_namedRecordset(This,dataMember,hierarchy,ppRecordset) (This)->lpVtbl->namedRecordset(This,dataMember,hierarchy,ppRecordset)
#define IHTMLObjectElement2_put_classid(This,v) (This)->lpVtbl->put_classid(This,v)
#define IHTMLObjectElement2_get_classid(This,p) (This)->lpVtbl->get_classid(This,p)
#define IHTMLObjectElement2_put_data(This,v) (This)->lpVtbl->put_data(This,v)
#define IHTMLObjectElement2_get_data(This,p) (This)->lpVtbl->get_data(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLObjectElement2_namedRecordset_Proxy(IHTMLObjectElement2 *This,BSTR dataMember,VARIANT *hierarchy,IDispatch **ppRecordset);
  void __RPC_STUB IHTMLObjectElement2_namedRecordset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement2_put_classid_Proxy(IHTMLObjectElement2 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement2_put_classid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement2_get_classid_Proxy(IHTMLObjectElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement2_get_classid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement2_put_data_Proxy(IHTMLObjectElement2 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement2_put_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement2_get_data_Proxy(IHTMLObjectElement2 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement2_get_data_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLObjectElement3_INTERFACE_DEFINED__
#define __IHTMLObjectElement3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLObjectElement3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLObjectElement3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_archive(BSTR v) = 0;
    virtual HRESULT WINAPI get_archive(BSTR *p) = 0;
    virtual HRESULT WINAPI put_alt(BSTR v) = 0;
    virtual HRESULT WINAPI get_alt(BSTR *p) = 0;
    virtual HRESULT WINAPI put_declare(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_declare(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_standby(BSTR v) = 0;
    virtual HRESULT WINAPI get_standby(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_useMap(BSTR v) = 0;
    virtual HRESULT WINAPI get_useMap(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLObjectElement3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLObjectElement3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLObjectElement3 *This);
      ULONG (WINAPI *Release)(IHTMLObjectElement3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLObjectElement3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLObjectElement3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLObjectElement3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLObjectElement3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_archive)(IHTMLObjectElement3 *This,BSTR v);
      HRESULT (WINAPI *get_archive)(IHTMLObjectElement3 *This,BSTR *p);
      HRESULT (WINAPI *put_alt)(IHTMLObjectElement3 *This,BSTR v);
      HRESULT (WINAPI *get_alt)(IHTMLObjectElement3 *This,BSTR *p);
      HRESULT (WINAPI *put_declare)(IHTMLObjectElement3 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_declare)(IHTMLObjectElement3 *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_standby)(IHTMLObjectElement3 *This,BSTR v);
      HRESULT (WINAPI *get_standby)(IHTMLObjectElement3 *This,BSTR *p);
      HRESULT (WINAPI *put_border)(IHTMLObjectElement3 *This,VARIANT v);
      HRESULT (WINAPI *get_border)(IHTMLObjectElement3 *This,VARIANT *p);
      HRESULT (WINAPI *put_useMap)(IHTMLObjectElement3 *This,BSTR v);
      HRESULT (WINAPI *get_useMap)(IHTMLObjectElement3 *This,BSTR *p);
    END_INTERFACE
  } IHTMLObjectElement3Vtbl;
  interface IHTMLObjectElement3 {
    CONST_VTBL struct IHTMLObjectElement3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLObjectElement3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLObjectElement3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLObjectElement3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLObjectElement3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLObjectElement3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLObjectElement3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLObjectElement3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLObjectElement3_put_archive(This,v) (This)->lpVtbl->put_archive(This,v)
#define IHTMLObjectElement3_get_archive(This,p) (This)->lpVtbl->get_archive(This,p)
#define IHTMLObjectElement3_put_alt(This,v) (This)->lpVtbl->put_alt(This,v)
#define IHTMLObjectElement3_get_alt(This,p) (This)->lpVtbl->get_alt(This,p)
#define IHTMLObjectElement3_put_declare(This,v) (This)->lpVtbl->put_declare(This,v)
#define IHTMLObjectElement3_get_declare(This,p) (This)->lpVtbl->get_declare(This,p)
#define IHTMLObjectElement3_put_standby(This,v) (This)->lpVtbl->put_standby(This,v)
#define IHTMLObjectElement3_get_standby(This,p) (This)->lpVtbl->get_standby(This,p)
#define IHTMLObjectElement3_put_border(This,v) (This)->lpVtbl->put_border(This,v)
#define IHTMLObjectElement3_get_border(This,p) (This)->lpVtbl->get_border(This,p)
#define IHTMLObjectElement3_put_useMap(This,v) (This)->lpVtbl->put_useMap(This,v)
#define IHTMLObjectElement3_get_useMap(This,p) (This)->lpVtbl->get_useMap(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLObjectElement3_put_archive_Proxy(IHTMLObjectElement3 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement3_put_archive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_archive_Proxy(IHTMLObjectElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement3_get_archive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_alt_Proxy(IHTMLObjectElement3 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement3_put_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_alt_Proxy(IHTMLObjectElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement3_get_alt_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_declare_Proxy(IHTMLObjectElement3 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLObjectElement3_put_declare_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_declare_Proxy(IHTMLObjectElement3 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLObjectElement3_get_declare_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_standby_Proxy(IHTMLObjectElement3 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement3_put_standby_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_standby_Proxy(IHTMLObjectElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement3_get_standby_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_border_Proxy(IHTMLObjectElement3 *This,VARIANT v);
  void __RPC_STUB IHTMLObjectElement3_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_border_Proxy(IHTMLObjectElement3 *This,VARIANT *p);
  void __RPC_STUB IHTMLObjectElement3_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_put_useMap_Proxy(IHTMLObjectElement3 *This,BSTR v);
  void __RPC_STUB IHTMLObjectElement3_put_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLObjectElement3_get_useMap_Proxy(IHTMLObjectElement3 *This,BSTR *p);
  void __RPC_STUB IHTMLObjectElement3_get_useMap_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLParamElement_INTERFACE_DEFINED__
#define __IHTMLParamElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLParamElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLParamElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_value(BSTR v) = 0;
    virtual HRESULT WINAPI get_value(BSTR *p) = 0;
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI put_valueType(BSTR v) = 0;
    virtual HRESULT WINAPI get_valueType(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLParamElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLParamElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLParamElement *This);
      ULONG (WINAPI *Release)(IHTMLParamElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLParamElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLParamElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLParamElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLParamElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_name)(IHTMLParamElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLParamElement *This,BSTR *p);
      HRESULT (WINAPI *put_value)(IHTMLParamElement *This,BSTR v);
      HRESULT (WINAPI *get_value)(IHTMLParamElement *This,BSTR *p);
      HRESULT (WINAPI *put_type)(IHTMLParamElement *This,BSTR v);
      HRESULT (WINAPI *get_type)(IHTMLParamElement *This,BSTR *p);
      HRESULT (WINAPI *put_valueType)(IHTMLParamElement *This,BSTR v);
      HRESULT (WINAPI *get_valueType)(IHTMLParamElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLParamElementVtbl;
  interface IHTMLParamElement {
    CONST_VTBL struct IHTMLParamElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLParamElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLParamElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLParamElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLParamElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLParamElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLParamElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLParamElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLParamElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLParamElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLParamElement_put_value(This,v) (This)->lpVtbl->put_value(This,v)
#define IHTMLParamElement_get_value(This,p) (This)->lpVtbl->get_value(This,p)
#define IHTMLParamElement_put_type(This,v) (This)->lpVtbl->put_type(This,v)
#define IHTMLParamElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLParamElement_put_valueType(This,v) (This)->lpVtbl->put_valueType(This,v)
#define IHTMLParamElement_get_valueType(This,p) (This)->lpVtbl->get_valueType(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLParamElement_put_name_Proxy(IHTMLParamElement *This,BSTR v);
  void __RPC_STUB IHTMLParamElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_get_name_Proxy(IHTMLParamElement *This,BSTR *p);
  void __RPC_STUB IHTMLParamElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_put_value_Proxy(IHTMLParamElement *This,BSTR v);
  void __RPC_STUB IHTMLParamElement_put_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_get_value_Proxy(IHTMLParamElement *This,BSTR *p);
  void __RPC_STUB IHTMLParamElement_get_value_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_put_type_Proxy(IHTMLParamElement *This,BSTR v);
  void __RPC_STUB IHTMLParamElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_get_type_Proxy(IHTMLParamElement *This,BSTR *p);
  void __RPC_STUB IHTMLParamElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_put_valueType_Proxy(IHTMLParamElement *This,BSTR v);
  void __RPC_STUB IHTMLParamElement_put_valueType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLParamElement_get_valueType_Proxy(IHTMLParamElement *This,BSTR *p);
  void __RPC_STUB IHTMLParamElement_get_valueType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLObjectElement_DISPINTERFACE_DEFINED__
#define __DispHTMLObjectElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLObjectElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLObjectElement : public IDispatch {
  };
#else
  typedef struct DispHTMLObjectElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLObjectElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLObjectElement *This);
      ULONG (WINAPI *Release)(DispHTMLObjectElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLObjectElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLObjectElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLObjectElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLObjectElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLObjectElementVtbl;
  interface DispHTMLObjectElement {
    CONST_VTBL struct DispHTMLObjectElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLObjectElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLObjectElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLObjectElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLObjectElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLObjectElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLObjectElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLObjectElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLObjectElement;
#ifdef __cplusplus
  class HTMLObjectElement;
#endif

#ifndef __DispHTMLParamElement_DISPINTERFACE_DEFINED__
#define __DispHTMLParamElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLParamElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLParamElement : public IDispatch {
  };
#else
  typedef struct DispHTMLParamElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLParamElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLParamElement *This);
      ULONG (WINAPI *Release)(DispHTMLParamElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLParamElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLParamElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLParamElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLParamElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLParamElementVtbl;
  interface DispHTMLParamElement {
    CONST_VTBL struct DispHTMLParamElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLParamElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLParamElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLParamElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLParamElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLParamElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLParamElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLParamElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLParamElement;
#ifdef __cplusplus
  class HTMLParamElement;
#endif

#ifndef __HTMLFrameSiteEvents2_DISPINTERFACE_DEFINED__
#define __HTMLFrameSiteEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLFrameSiteEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLFrameSiteEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLFrameSiteEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLFrameSiteEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLFrameSiteEvents2 *This);
      ULONG (WINAPI *Release)(HTMLFrameSiteEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLFrameSiteEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLFrameSiteEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLFrameSiteEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLFrameSiteEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLFrameSiteEvents2Vtbl;
  interface HTMLFrameSiteEvents2 {
    CONST_VTBL struct HTMLFrameSiteEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLFrameSiteEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLFrameSiteEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLFrameSiteEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLFrameSiteEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLFrameSiteEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLFrameSiteEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLFrameSiteEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLFrameSiteEvents_DISPINTERFACE_DEFINED__
#define __HTMLFrameSiteEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLFrameSiteEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLFrameSiteEvents : public IDispatch {
  };
#else
  typedef struct HTMLFrameSiteEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLFrameSiteEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLFrameSiteEvents *This);
      ULONG (WINAPI *Release)(HTMLFrameSiteEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLFrameSiteEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLFrameSiteEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLFrameSiteEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLFrameSiteEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLFrameSiteEventsVtbl;
  interface HTMLFrameSiteEvents {
    CONST_VTBL struct HTMLFrameSiteEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLFrameSiteEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLFrameSiteEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLFrameSiteEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLFrameSiteEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLFrameSiteEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLFrameSiteEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLFrameSiteEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLFrameBase2_INTERFACE_DEFINED__
#define __IHTMLFrameBase2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameBase2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFrameBase2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_contentWindow(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_allowTransparency(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_allowTransparency(VARIANT_BOOL *p) = 0;
  };
#else
  typedef struct IHTMLFrameBase2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFrameBase2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFrameBase2 *This);
      ULONG (WINAPI *Release)(IHTMLFrameBase2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFrameBase2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFrameBase2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFrameBase2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFrameBase2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_contentWindow)(IHTMLFrameBase2 *This,IHTMLWindow2 **p);
      HRESULT (WINAPI *put_onload)(IHTMLFrameBase2 *This,VARIANT v);
      HRESULT (WINAPI *get_onload)(IHTMLFrameBase2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onreadystatechange)(IHTMLFrameBase2 *This,VARIANT v);
      HRESULT (WINAPI *get_onreadystatechange)(IHTMLFrameBase2 *This,VARIANT *p);
      HRESULT (WINAPI *get_readyState)(IHTMLFrameBase2 *This,BSTR *p);
      HRESULT (WINAPI *put_allowTransparency)(IHTMLFrameBase2 *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_allowTransparency)(IHTMLFrameBase2 *This,VARIANT_BOOL *p);
    END_INTERFACE
  } IHTMLFrameBase2Vtbl;
  interface IHTMLFrameBase2 {
    CONST_VTBL struct IHTMLFrameBase2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFrameBase2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFrameBase2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFrameBase2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFrameBase2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFrameBase2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFrameBase2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFrameBase2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFrameBase2_get_contentWindow(This,p) (This)->lpVtbl->get_contentWindow(This,p)
#define IHTMLFrameBase2_put_onload(This,v) (This)->lpVtbl->put_onload(This,v)
#define IHTMLFrameBase2_get_onload(This,p) (This)->lpVtbl->get_onload(This,p)
#define IHTMLFrameBase2_put_onreadystatechange(This,v) (This)->lpVtbl->put_onreadystatechange(This,v)
#define IHTMLFrameBase2_get_onreadystatechange(This,p) (This)->lpVtbl->get_onreadystatechange(This,p)
#define IHTMLFrameBase2_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IHTMLFrameBase2_put_allowTransparency(This,v) (This)->lpVtbl->put_allowTransparency(This,v)
#define IHTMLFrameBase2_get_allowTransparency(This,p) (This)->lpVtbl->get_allowTransparency(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLFrameBase2_get_contentWindow_Proxy(IHTMLFrameBase2 *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLFrameBase2_get_contentWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_put_onload_Proxy(IHTMLFrameBase2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase2_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_get_onload_Proxy(IHTMLFrameBase2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase2_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_put_onreadystatechange_Proxy(IHTMLFrameBase2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameBase2_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_get_onreadystatechange_Proxy(IHTMLFrameBase2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameBase2_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_get_readyState_Proxy(IHTMLFrameBase2 *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase2_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_put_allowTransparency_Proxy(IHTMLFrameBase2 *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLFrameBase2_put_allowTransparency_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase2_get_allowTransparency_Proxy(IHTMLFrameBase2 *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLFrameBase2_get_allowTransparency_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFrameBase3_INTERFACE_DEFINED__
#define __IHTMLFrameBase3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameBase3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFrameBase3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_longDesc(BSTR v) = 0;
    virtual HRESULT WINAPI get_longDesc(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLFrameBase3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFrameBase3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFrameBase3 *This);
      ULONG (WINAPI *Release)(IHTMLFrameBase3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFrameBase3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFrameBase3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFrameBase3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFrameBase3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_longDesc)(IHTMLFrameBase3 *This,BSTR v);
      HRESULT (WINAPI *get_longDesc)(IHTMLFrameBase3 *This,BSTR *p);
    END_INTERFACE
  } IHTMLFrameBase3Vtbl;
  interface IHTMLFrameBase3 {
    CONST_VTBL struct IHTMLFrameBase3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFrameBase3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFrameBase3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFrameBase3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFrameBase3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFrameBase3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFrameBase3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFrameBase3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFrameBase3_put_longDesc(This,v) (This)->lpVtbl->put_longDesc(This,v)
#define IHTMLFrameBase3_get_longDesc(This,p) (This)->lpVtbl->get_longDesc(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLFrameBase3_put_longDesc_Proxy(IHTMLFrameBase3 *This,BSTR v);
  void __RPC_STUB IHTMLFrameBase3_put_longDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameBase3_get_longDesc_Proxy(IHTMLFrameBase3 *This,BSTR *p);
  void __RPC_STUB IHTMLFrameBase3_get_longDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFrameBase_DISPINTERFACE_DEFINED__
#define __DispHTMLFrameBase_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFrameBase;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLFrameBase : public IDispatch {
  };
#else
  typedef struct DispHTMLFrameBaseVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLFrameBase *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLFrameBase *This);
      ULONG (WINAPI *Release)(DispHTMLFrameBase *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLFrameBase *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLFrameBase *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLFrameBase *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLFrameBase *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLFrameBaseVtbl;
  interface DispHTMLFrameBase {
    CONST_VTBL struct DispHTMLFrameBaseVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLFrameBase_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLFrameBase_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLFrameBase_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLFrameBase_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLFrameBase_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLFrameBase_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLFrameBase_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLFrameBase;
#ifdef __cplusplus
  class HTMLFrameBase;
#endif

#ifndef __IHTMLFrameElement_INTERFACE_DEFINED__
#define __IHTMLFrameElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFrameElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLFrameElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFrameElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFrameElement *This);
      ULONG (WINAPI *Release)(IHTMLFrameElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFrameElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFrameElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFrameElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFrameElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_borderColor)(IHTMLFrameElement *This,VARIANT v);
      HRESULT (WINAPI *get_borderColor)(IHTMLFrameElement *This,VARIANT *p);
    END_INTERFACE
  } IHTMLFrameElementVtbl;
  interface IHTMLFrameElement {
    CONST_VTBL struct IHTMLFrameElementVtbl *lpVtbl;
  };

#ifdef COBJMACROS
#define IHTMLFrameElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFrameElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFrameElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFrameElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFrameElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFrameElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFrameElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFrameElement_put_borderColor(This,v) (This)->lpVtbl->put_borderColor(This,v)
#define IHTMLFrameElement_get_borderColor(This,p) (This)->lpVtbl->get_borderColor(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLFrameElement_put_borderColor_Proxy(IHTMLFrameElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameElement_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameElement_get_borderColor_Proxy(IHTMLFrameElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameElement_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFrameElement2_INTERFACE_DEFINED__
#define __IHTMLFrameElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFrameElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLFrameElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFrameElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFrameElement2 *This);
      ULONG (WINAPI *Release)(IHTMLFrameElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFrameElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFrameElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFrameElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFrameElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_height)(IHTMLFrameElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_height)(IHTMLFrameElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_width)(IHTMLFrameElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_width)(IHTMLFrameElement2 *This,VARIANT *p);
    END_INTERFACE
  } IHTMLFrameElement2Vtbl;
  interface IHTMLFrameElement2 {
    CONST_VTBL struct IHTMLFrameElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFrameElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFrameElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFrameElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFrameElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFrameElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFrameElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFrameElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFrameElement2_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLFrameElement2_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLFrameElement2_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLFrameElement2_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLFrameElement2_put_height_Proxy(IHTMLFrameElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameElement2_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameElement2_get_height_Proxy(IHTMLFrameElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameElement2_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameElement2_put_width_Proxy(IHTMLFrameElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameElement2_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameElement2_get_width_Proxy(IHTMLFrameElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameElement2_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFrameElement_DISPINTERFACE_DEFINED__
#define __DispHTMLFrameElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFrameElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLFrameElement : public IDispatch {
  };
#else
  typedef struct DispHTMLFrameElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLFrameElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLFrameElement *This);
      ULONG (WINAPI *Release)(DispHTMLFrameElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLFrameElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLFrameElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLFrameElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLFrameElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLFrameElementVtbl;
  interface DispHTMLFrameElement {
    CONST_VTBL struct DispHTMLFrameElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLFrameElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLFrameElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLFrameElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLFrameElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLFrameElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLFrameElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLFrameElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLFrameElement;
#ifdef __cplusplus
  class HTMLFrameElement;
#endif

#ifndef __IHTMLIFrameElement_INTERFACE_DEFINED__
#define __IHTMLIFrameElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIFrameElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLIFrameElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_vspace(long v) = 0;
    virtual HRESULT WINAPI get_vspace(long *p) = 0;
    virtual HRESULT WINAPI put_hspace(long v) = 0;
    virtual HRESULT WINAPI get_hspace(long *p) = 0;
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLIFrameElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLIFrameElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLIFrameElement *This);
      ULONG (WINAPI *Release)(IHTMLIFrameElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLIFrameElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLIFrameElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLIFrameElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLIFrameElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_vspace)(IHTMLIFrameElement *This,long v);
      HRESULT (WINAPI *get_vspace)(IHTMLIFrameElement *This,long *p);
      HRESULT (WINAPI *put_hspace)(IHTMLIFrameElement *This,long v);
      HRESULT (WINAPI *get_hspace)(IHTMLIFrameElement *This,long *p);
      HRESULT (WINAPI *put_align)(IHTMLIFrameElement *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLIFrameElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLIFrameElementVtbl;
  interface IHTMLIFrameElement {
    CONST_VTBL struct IHTMLIFrameElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLIFrameElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLIFrameElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLIFrameElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLIFrameElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLIFrameElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLIFrameElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLIFrameElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLIFrameElement_put_vspace(This,v) (This)->lpVtbl->put_vspace(This,v)
#define IHTMLIFrameElement_get_vspace(This,p) (This)->lpVtbl->get_vspace(This,p)
#define IHTMLIFrameElement_put_hspace(This,v) (This)->lpVtbl->put_hspace(This,v)
#define IHTMLIFrameElement_get_hspace(This,p) (This)->lpVtbl->get_hspace(This,p)
#define IHTMLIFrameElement_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLIFrameElement_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLIFrameElement_put_vspace_Proxy(IHTMLIFrameElement *This,long v);
  void __RPC_STUB IHTMLIFrameElement_put_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_get_vspace_Proxy(IHTMLIFrameElement *This,long *p);
  void __RPC_STUB IHTMLIFrameElement_get_vspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_put_hspace_Proxy(IHTMLIFrameElement *This,long v);
  void __RPC_STUB IHTMLIFrameElement_put_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_get_hspace_Proxy(IHTMLIFrameElement *This,long *p);
  void __RPC_STUB IHTMLIFrameElement_get_hspace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_put_align_Proxy(IHTMLIFrameElement *This,BSTR v);
  void __RPC_STUB IHTMLIFrameElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement_get_align_Proxy(IHTMLIFrameElement *This,BSTR *p);
  void __RPC_STUB IHTMLIFrameElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLIFrameElement2_INTERFACE_DEFINED__
#define __IHTMLIFrameElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIFrameElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLIFrameElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_height(VARIANT v) = 0;
    virtual HRESULT WINAPI get_height(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_width(VARIANT v) = 0;
    virtual HRESULT WINAPI get_width(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLIFrameElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLIFrameElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLIFrameElement2 *This);
      ULONG (WINAPI *Release)(IHTMLIFrameElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLIFrameElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLIFrameElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLIFrameElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLIFrameElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_height)(IHTMLIFrameElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_height)(IHTMLIFrameElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_width)(IHTMLIFrameElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_width)(IHTMLIFrameElement2 *This,VARIANT *p);
    END_INTERFACE
  } IHTMLIFrameElement2Vtbl;
  interface IHTMLIFrameElement2 {
    CONST_VTBL struct IHTMLIFrameElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLIFrameElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLIFrameElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLIFrameElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLIFrameElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLIFrameElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLIFrameElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLIFrameElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLIFrameElement2_put_height(This,v) (This)->lpVtbl->put_height(This,v)
#define IHTMLIFrameElement2_get_height(This,p) (This)->lpVtbl->get_height(This,p)
#define IHTMLIFrameElement2_put_width(This,v) (This)->lpVtbl->put_width(This,v)
#define IHTMLIFrameElement2_get_width(This,p) (This)->lpVtbl->get_width(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLIFrameElement2_put_height_Proxy(IHTMLIFrameElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLIFrameElement2_put_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement2_get_height_Proxy(IHTMLIFrameElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLIFrameElement2_get_height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement2_put_width_Proxy(IHTMLIFrameElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLIFrameElement2_put_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIFrameElement2_get_width_Proxy(IHTMLIFrameElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLIFrameElement2_get_width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLIFrame_DISPINTERFACE_DEFINED__
#define __DispHTMLIFrame_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLIFrame;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLIFrame : public IDispatch {
  };
#else
  typedef struct DispHTMLIFrameVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLIFrame *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLIFrame *This);
      ULONG (WINAPI *Release)(DispHTMLIFrame *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLIFrame *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLIFrame *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLIFrame *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLIFrame *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLIFrameVtbl;
  interface DispHTMLIFrame {
    CONST_VTBL struct DispHTMLIFrameVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLIFrame_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLIFrame_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLIFrame_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLIFrame_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLIFrame_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLIFrame_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLIFrame_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLIFrame;
#ifdef __cplusplus
  class HTMLIFrame;
#endif

#ifndef __IHTMLDivPosition_INTERFACE_DEFINED__
#define __IHTMLDivPosition_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDivPosition;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDivPosition : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLDivPositionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDivPosition *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDivPosition *This);
      ULONG (WINAPI *Release)(IHTMLDivPosition *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDivPosition *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDivPosition *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDivPosition *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDivPosition *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_align)(IHTMLDivPosition *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLDivPosition *This,BSTR *p);
    END_INTERFACE
  } IHTMLDivPositionVtbl;
  interface IHTMLDivPosition {
    CONST_VTBL struct IHTMLDivPositionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDivPosition_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDivPosition_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDivPosition_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDivPosition_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDivPosition_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDivPosition_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDivPosition_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDivPosition_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLDivPosition_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLDivPosition_put_align_Proxy(IHTMLDivPosition *This,BSTR v);
  void __RPC_STUB IHTMLDivPosition_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDivPosition_get_align_Proxy(IHTMLDivPosition *This,BSTR *p);
  void __RPC_STUB IHTMLDivPosition_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFieldSetElement_INTERFACE_DEFINED__
#define __IHTMLFieldSetElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFieldSetElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFieldSetElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLFieldSetElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFieldSetElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFieldSetElement *This);
      ULONG (WINAPI *Release)(IHTMLFieldSetElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFieldSetElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFieldSetElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFieldSetElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFieldSetElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_align)(IHTMLFieldSetElement *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLFieldSetElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLFieldSetElementVtbl;
  interface IHTMLFieldSetElement {
    CONST_VTBL struct IHTMLFieldSetElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFieldSetElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFieldSetElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFieldSetElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFieldSetElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFieldSetElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFieldSetElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFieldSetElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFieldSetElement_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLFieldSetElement_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLFieldSetElement_put_align_Proxy(IHTMLFieldSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFieldSetElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFieldSetElement_get_align_Proxy(IHTMLFieldSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFieldSetElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFieldSetElement2_INTERFACE_DEFINED__
#define __IHTMLFieldSetElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFieldSetElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFieldSetElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
#else
  typedef struct IHTMLFieldSetElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFieldSetElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFieldSetElement2 *This);
      ULONG (WINAPI *Release)(IHTMLFieldSetElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFieldSetElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFieldSetElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFieldSetElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFieldSetElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_form)(IHTMLFieldSetElement2 *This,IHTMLFormElement **p);
    END_INTERFACE
  } IHTMLFieldSetElement2Vtbl;
  interface IHTMLFieldSetElement2 {
    CONST_VTBL struct IHTMLFieldSetElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFieldSetElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFieldSetElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFieldSetElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFieldSetElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFieldSetElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFieldSetElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFieldSetElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFieldSetElement2_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLFieldSetElement2_get_form_Proxy(IHTMLFieldSetElement2 *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLFieldSetElement2_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLegendElement_INTERFACE_DEFINED__
#define __IHTMLLegendElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLegendElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLLegendElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLLegendElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLLegendElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLLegendElement *This);
      ULONG (WINAPI *Release)(IHTMLLegendElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLLegendElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLLegendElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLLegendElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLLegendElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_align)(IHTMLLegendElement *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLLegendElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLLegendElementVtbl;
  interface IHTMLLegendElement {
    CONST_VTBL struct IHTMLLegendElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLLegendElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLLegendElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLLegendElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLLegendElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLLegendElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLLegendElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLLegendElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLLegendElement_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLLegendElement_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLLegendElement_put_align_Proxy(IHTMLLegendElement *This,BSTR v);
  void __RPC_STUB IHTMLLegendElement_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLLegendElement_get_align_Proxy(IHTMLLegendElement *This,BSTR *p);
  void __RPC_STUB IHTMLLegendElement_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLLegendElement2_INTERFACE_DEFINED__
#define __IHTMLLegendElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLLegendElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLLegendElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI get_form(IHTMLFormElement **p) = 0;
  };
#else
  typedef struct IHTMLLegendElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLLegendElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLLegendElement2 *This);
      ULONG (WINAPI *Release)(IHTMLLegendElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLLegendElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLLegendElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLLegendElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLLegendElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_form)(IHTMLLegendElement2 *This,IHTMLFormElement **p);
    END_INTERFACE
  } IHTMLLegendElement2Vtbl;
  interface IHTMLLegendElement2 {
    CONST_VTBL struct IHTMLLegendElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLLegendElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLLegendElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLLegendElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLLegendElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLLegendElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLLegendElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLLegendElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLLegendElement2_get_form(This,p) (This)->lpVtbl->get_form(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLLegendElement2_get_form_Proxy(IHTMLLegendElement2 *This,IHTMLFormElement **p);
  void __RPC_STUB IHTMLLegendElement2_get_form_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLDivPosition_DISPINTERFACE_DEFINED__
#define __DispHTMLDivPosition_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLDivPosition;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLDivPosition : public IDispatch {
  };
#else
  typedef struct DispHTMLDivPositionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLDivPosition *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLDivPosition *This);
      ULONG (WINAPI *Release)(DispHTMLDivPosition *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLDivPosition *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLDivPosition *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLDivPosition *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLDivPosition *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLDivPositionVtbl;
  interface DispHTMLDivPosition {
    CONST_VTBL struct DispHTMLDivPositionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLDivPosition_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLDivPosition_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLDivPosition_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLDivPosition_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLDivPosition_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLDivPosition_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLDivPosition_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLDivPosition;
#ifdef __cplusplus
  class HTMLDivPosition;
#endif

#ifndef __DispHTMLFieldSetElement_DISPINTERFACE_DEFINED__
#define __DispHTMLFieldSetElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFieldSetElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLFieldSetElement : public IDispatch {
  };
#else
  typedef struct DispHTMLFieldSetElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLFieldSetElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLFieldSetElement *This);
      ULONG (WINAPI *Release)(DispHTMLFieldSetElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLFieldSetElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLFieldSetElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLFieldSetElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLFieldSetElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLFieldSetElementVtbl;
  interface DispHTMLFieldSetElement {
    CONST_VTBL struct DispHTMLFieldSetElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLFieldSetElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLFieldSetElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLFieldSetElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLFieldSetElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLFieldSetElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLFieldSetElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLFieldSetElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLFieldSetElement;
#ifdef __cplusplus
  class HTMLFieldSetElement;
#endif

#ifndef __DispHTMLLegendElement_DISPINTERFACE_DEFINED__
#define __DispHTMLLegendElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLLegendElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLLegendElement : public IDispatch {
  };
#else
  typedef struct DispHTMLLegendElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLLegendElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLLegendElement *This);
      ULONG (WINAPI *Release)(DispHTMLLegendElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLLegendElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLLegendElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLLegendElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLLegendElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLLegendElementVtbl;
  interface DispHTMLLegendElement {
    CONST_VTBL struct DispHTMLLegendElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLLegendElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLLegendElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLLegendElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLLegendElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLLegendElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLLegendElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLLegendElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLLegendElement;
#ifdef __cplusplus
  class HTMLLegendElement;
#endif

#ifndef __IHTMLSpanFlow_INTERFACE_DEFINED__
#define __IHTMLSpanFlow_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLSpanFlow;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLSpanFlow : public IDispatch {
  public:
    virtual HRESULT WINAPI put_align(BSTR v) = 0;
    virtual HRESULT WINAPI get_align(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLSpanFlowVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLSpanFlow *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLSpanFlow *This);
      ULONG (WINAPI *Release)(IHTMLSpanFlow *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLSpanFlow *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLSpanFlow *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLSpanFlow *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLSpanFlow *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_align)(IHTMLSpanFlow *This,BSTR v);
      HRESULT (WINAPI *get_align)(IHTMLSpanFlow *This,BSTR *p);
    END_INTERFACE
  } IHTMLSpanFlowVtbl;
  interface IHTMLSpanFlow {
    CONST_VTBL struct IHTMLSpanFlowVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLSpanFlow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLSpanFlow_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLSpanFlow_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLSpanFlow_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLSpanFlow_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLSpanFlow_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLSpanFlow_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLSpanFlow_put_align(This,v) (This)->lpVtbl->put_align(This,v)
#define IHTMLSpanFlow_get_align(This,p) (This)->lpVtbl->get_align(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLSpanFlow_put_align_Proxy(IHTMLSpanFlow *This,BSTR v);
  void __RPC_STUB IHTMLSpanFlow_put_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLSpanFlow_get_align_Proxy(IHTMLSpanFlow *This,BSTR *p);
  void __RPC_STUB IHTMLSpanFlow_get_align_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLSpanFlow_DISPINTERFACE_DEFINED__
#define __DispHTMLSpanFlow_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLSpanFlow;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLSpanFlow : public IDispatch {
  };
#else
  typedef struct DispHTMLSpanFlowVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLSpanFlow *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLSpanFlow *This);
      ULONG (WINAPI *Release)(DispHTMLSpanFlow *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLSpanFlow *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLSpanFlow *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLSpanFlow *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLSpanFlow *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLSpanFlowVtbl;
  interface DispHTMLSpanFlow {
    CONST_VTBL struct DispHTMLSpanFlowVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLSpanFlow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLSpanFlow_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLSpanFlow_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLSpanFlow_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLSpanFlow_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLSpanFlow_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLSpanFlow_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLSpanFlow;
#ifdef __cplusplus
  class HTMLSpanFlow;
#endif

#ifndef __IHTMLFrameSetElement_INTERFACE_DEFINED__
#define __IHTMLFrameSetElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameSetElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFrameSetElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_rows(BSTR v) = 0;
    virtual HRESULT WINAPI get_rows(BSTR *p) = 0;
    virtual HRESULT WINAPI put_cols(BSTR v) = 0;
    virtual HRESULT WINAPI get_cols(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(VARIANT v) = 0;
    virtual HRESULT WINAPI get_border(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_borderColor(VARIANT v) = 0;
    virtual HRESULT WINAPI get_borderColor(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_frameBorder(BSTR v) = 0;
    virtual HRESULT WINAPI get_frameBorder(BSTR *p) = 0;
    virtual HRESULT WINAPI put_frameSpacing(VARIANT v) = 0;
    virtual HRESULT WINAPI get_frameSpacing(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_name(BSTR v) = 0;
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onunload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onbeforeunload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeunload(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLFrameSetElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFrameSetElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFrameSetElement *This);
      ULONG (WINAPI *Release)(IHTMLFrameSetElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFrameSetElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFrameSetElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFrameSetElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFrameSetElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_rows)(IHTMLFrameSetElement *This,BSTR v);
      HRESULT (WINAPI *get_rows)(IHTMLFrameSetElement *This,BSTR *p);
      HRESULT (WINAPI *put_cols)(IHTMLFrameSetElement *This,BSTR v);
      HRESULT (WINAPI *get_cols)(IHTMLFrameSetElement *This,BSTR *p);
      HRESULT (WINAPI *put_border)(IHTMLFrameSetElement *This,VARIANT v);
      HRESULT (WINAPI *get_border)(IHTMLFrameSetElement *This,VARIANT *p);
      HRESULT (WINAPI *put_borderColor)(IHTMLFrameSetElement *This,VARIANT v);
      HRESULT (WINAPI *get_borderColor)(IHTMLFrameSetElement *This,VARIANT *p);
      HRESULT (WINAPI *put_frameBorder)(IHTMLFrameSetElement *This,BSTR v);
      HRESULT (WINAPI *get_frameBorder)(IHTMLFrameSetElement *This,BSTR *p);
      HRESULT (WINAPI *put_frameSpacing)(IHTMLFrameSetElement *This,VARIANT v);
      HRESULT (WINAPI *get_frameSpacing)(IHTMLFrameSetElement *This,VARIANT *p);
      HRESULT (WINAPI *put_name)(IHTMLFrameSetElement *This,BSTR v);
      HRESULT (WINAPI *get_name)(IHTMLFrameSetElement *This,BSTR *p);
      HRESULT (WINAPI *put_onload)(IHTMLFrameSetElement *This,VARIANT v);
      HRESULT (WINAPI *get_onload)(IHTMLFrameSetElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onunload)(IHTMLFrameSetElement *This,VARIANT v);
      HRESULT (WINAPI *get_onunload)(IHTMLFrameSetElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onbeforeunload)(IHTMLFrameSetElement *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforeunload)(IHTMLFrameSetElement *This,VARIANT *p);
    END_INTERFACE
  } IHTMLFrameSetElementVtbl;
  interface IHTMLFrameSetElement {
    CONST_VTBL struct IHTMLFrameSetElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFrameSetElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFrameSetElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFrameSetElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFrameSetElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFrameSetElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFrameSetElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFrameSetElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFrameSetElement_put_rows(This,v) (This)->lpVtbl->put_rows(This,v)
#define IHTMLFrameSetElement_get_rows(This,p) (This)->lpVtbl->get_rows(This,p)
#define IHTMLFrameSetElement_put_cols(This,v) (This)->lpVtbl->put_cols(This,v)
#define IHTMLFrameSetElement_get_cols(This,p) (This)->lpVtbl->get_cols(This,p)
#define IHTMLFrameSetElement_put_border(This,v) (This)->lpVtbl->put_border(This,v)
#define IHTMLFrameSetElement_get_border(This,p) (This)->lpVtbl->get_border(This,p)
#define IHTMLFrameSetElement_put_borderColor(This,v) (This)->lpVtbl->put_borderColor(This,v)
#define IHTMLFrameSetElement_get_borderColor(This,p) (This)->lpVtbl->get_borderColor(This,p)
#define IHTMLFrameSetElement_put_frameBorder(This,v) (This)->lpVtbl->put_frameBorder(This,v)
#define IHTMLFrameSetElement_get_frameBorder(This,p) (This)->lpVtbl->get_frameBorder(This,p)
#define IHTMLFrameSetElement_put_frameSpacing(This,v) (This)->lpVtbl->put_frameSpacing(This,v)
#define IHTMLFrameSetElement_get_frameSpacing(This,p) (This)->lpVtbl->get_frameSpacing(This,p)
#define IHTMLFrameSetElement_put_name(This,v) (This)->lpVtbl->put_name(This,v)
#define IHTMLFrameSetElement_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLFrameSetElement_put_onload(This,v) (This)->lpVtbl->put_onload(This,v)
#define IHTMLFrameSetElement_get_onload(This,p) (This)->lpVtbl->get_onload(This,p)
#define IHTMLFrameSetElement_put_onunload(This,v) (This)->lpVtbl->put_onunload(This,v)
#define IHTMLFrameSetElement_get_onunload(This,p) (This)->lpVtbl->get_onunload(This,p)
#define IHTMLFrameSetElement_put_onbeforeunload(This,v) (This)->lpVtbl->put_onbeforeunload(This,v)
#define IHTMLFrameSetElement_get_onbeforeunload(This,p) (This)->lpVtbl->get_onbeforeunload(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLFrameSetElement_put_rows_Proxy(IHTMLFrameSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFrameSetElement_put_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_rows_Proxy(IHTMLFrameSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFrameSetElement_get_rows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_cols_Proxy(IHTMLFrameSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFrameSetElement_put_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_cols_Proxy(IHTMLFrameSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFrameSetElement_get_cols_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_border_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_border_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_borderColor_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_borderColor_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_borderColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_frameBorder_Proxy(IHTMLFrameSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFrameSetElement_put_frameBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_frameBorder_Proxy(IHTMLFrameSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFrameSetElement_get_frameBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_frameSpacing_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_frameSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_frameSpacing_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_frameSpacing_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_name_Proxy(IHTMLFrameSetElement *This,BSTR v);
  void __RPC_STUB IHTMLFrameSetElement_put_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_name_Proxy(IHTMLFrameSetElement *This,BSTR *p);
  void __RPC_STUB IHTMLFrameSetElement_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_onload_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_onload_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_onunload_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_onunload_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_onunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_put_onbeforeunload_Proxy(IHTMLFrameSetElement *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement_put_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement_get_onbeforeunload_Proxy(IHTMLFrameSetElement *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement_get_onbeforeunload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFrameSetElement2_INTERFACE_DEFINED__
#define __IHTMLFrameSetElement2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFrameSetElement2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFrameSetElement2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_onbeforeprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onbeforeprint(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onafterprint(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onafterprint(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLFrameSetElement2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFrameSetElement2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFrameSetElement2 *This);
      ULONG (WINAPI *Release)(IHTMLFrameSetElement2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFrameSetElement2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFrameSetElement2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFrameSetElement2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFrameSetElement2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_onbeforeprint)(IHTMLFrameSetElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onbeforeprint)(IHTMLFrameSetElement2 *This,VARIANT *p);
      HRESULT (WINAPI *put_onafterprint)(IHTMLFrameSetElement2 *This,VARIANT v);
      HRESULT (WINAPI *get_onafterprint)(IHTMLFrameSetElement2 *This,VARIANT *p);
    END_INTERFACE
  } IHTMLFrameSetElement2Vtbl;
  interface IHTMLFrameSetElement2 {
    CONST_VTBL struct IHTMLFrameSetElement2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFrameSetElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFrameSetElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFrameSetElement2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFrameSetElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFrameSetElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFrameSetElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFrameSetElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFrameSetElement2_put_onbeforeprint(This,v) (This)->lpVtbl->put_onbeforeprint(This,v)
#define IHTMLFrameSetElement2_get_onbeforeprint(This,p) (This)->lpVtbl->get_onbeforeprint(This,p)
#define IHTMLFrameSetElement2_put_onafterprint(This,v) (This)->lpVtbl->put_onafterprint(This,v)
#define IHTMLFrameSetElement2_get_onafterprint(This,p) (This)->lpVtbl->get_onafterprint(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLFrameSetElement2_put_onbeforeprint_Proxy(IHTMLFrameSetElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement2_put_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement2_get_onbeforeprint_Proxy(IHTMLFrameSetElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement2_get_onbeforeprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement2_put_onafterprint_Proxy(IHTMLFrameSetElement2 *This,VARIANT v);
  void __RPC_STUB IHTMLFrameSetElement2_put_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFrameSetElement2_get_onafterprint_Proxy(IHTMLFrameSetElement2 *This,VARIANT *p);
  void __RPC_STUB IHTMLFrameSetElement2_get_onafterprint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLFrameSetSite_DISPINTERFACE_DEFINED__
#define __DispHTMLFrameSetSite_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLFrameSetSite;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLFrameSetSite : public IDispatch {
  };
#else
  typedef struct DispHTMLFrameSetSiteVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLFrameSetSite *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLFrameSetSite *This);
      ULONG (WINAPI *Release)(DispHTMLFrameSetSite *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLFrameSetSite *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLFrameSetSite *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLFrameSetSite *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLFrameSetSite *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLFrameSetSiteVtbl;
  interface DispHTMLFrameSetSite {
    CONST_VTBL struct DispHTMLFrameSetSiteVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLFrameSetSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLFrameSetSite_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLFrameSetSite_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLFrameSetSite_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLFrameSetSite_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLFrameSetSite_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLFrameSetSite_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLFrameSetSite;
#ifdef __cplusplus
  class HTMLFrameSetSite;
#endif

#ifndef __IHTMLBGsound_INTERFACE_DEFINED__
#define __IHTMLBGsound_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLBGsound;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLBGsound : public IDispatch {
  public:
    virtual HRESULT WINAPI put_src(BSTR v) = 0;
    virtual HRESULT WINAPI get_src(BSTR *p) = 0;
    virtual HRESULT WINAPI put_loop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_loop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_volume(VARIANT v) = 0;
    virtual HRESULT WINAPI get_volume(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_balance(VARIANT v) = 0;
    virtual HRESULT WINAPI get_balance(VARIANT *p) = 0;
  };
#else
  typedef struct IHTMLBGsoundVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLBGsound *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLBGsound *This);
      ULONG (WINAPI *Release)(IHTMLBGsound *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLBGsound *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLBGsound *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLBGsound *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLBGsound *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_src)(IHTMLBGsound *This,BSTR v);
      HRESULT (WINAPI *get_src)(IHTMLBGsound *This,BSTR *p);
      HRESULT (WINAPI *put_loop)(IHTMLBGsound *This,VARIANT v);
      HRESULT (WINAPI *get_loop)(IHTMLBGsound *This,VARIANT *p);
      HRESULT (WINAPI *put_volume)(IHTMLBGsound *This,VARIANT v);
      HRESULT (WINAPI *get_volume)(IHTMLBGsound *This,VARIANT *p);
      HRESULT (WINAPI *put_balance)(IHTMLBGsound *This,VARIANT v);
      HRESULT (WINAPI *get_balance)(IHTMLBGsound *This,VARIANT *p);
    END_INTERFACE
  } IHTMLBGsoundVtbl;
  interface IHTMLBGsound {
    CONST_VTBL struct IHTMLBGsoundVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLBGsound_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLBGsound_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLBGsound_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLBGsound_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLBGsound_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLBGsound_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLBGsound_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLBGsound_put_src(This,v) (This)->lpVtbl->put_src(This,v)
#define IHTMLBGsound_get_src(This,p) (This)->lpVtbl->get_src(This,p)
#define IHTMLBGsound_put_loop(This,v) (This)->lpVtbl->put_loop(This,v)
#define IHTMLBGsound_get_loop(This,p) (This)->lpVtbl->get_loop(This,p)
#define IHTMLBGsound_put_volume(This,v) (This)->lpVtbl->put_volume(This,v)
#define IHTMLBGsound_get_volume(This,p) (This)->lpVtbl->get_volume(This,p)
#define IHTMLBGsound_put_balance(This,v) (This)->lpVtbl->put_balance(This,v)
#define IHTMLBGsound_get_balance(This,p) (This)->lpVtbl->get_balance(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLBGsound_put_src_Proxy(IHTMLBGsound *This,BSTR v);
  void __RPC_STUB IHTMLBGsound_put_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_get_src_Proxy(IHTMLBGsound *This,BSTR *p);
  void __RPC_STUB IHTMLBGsound_get_src_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_put_loop_Proxy(IHTMLBGsound *This,VARIANT v);
  void __RPC_STUB IHTMLBGsound_put_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_get_loop_Proxy(IHTMLBGsound *This,VARIANT *p);
  void __RPC_STUB IHTMLBGsound_get_loop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_put_volume_Proxy(IHTMLBGsound *This,VARIANT v);
  void __RPC_STUB IHTMLBGsound_put_volume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_get_volume_Proxy(IHTMLBGsound *This,VARIANT *p);
  void __RPC_STUB IHTMLBGsound_get_volume_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_put_balance_Proxy(IHTMLBGsound *This,VARIANT v);
  void __RPC_STUB IHTMLBGsound_put_balance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLBGsound_get_balance_Proxy(IHTMLBGsound *This,VARIANT *p);
  void __RPC_STUB IHTMLBGsound_get_balance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLBGsound_DISPINTERFACE_DEFINED__
#define __DispHTMLBGsound_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLBGsound;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLBGsound : public IDispatch {
  };
#else
  typedef struct DispHTMLBGsoundVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLBGsound *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLBGsound *This);
      ULONG (WINAPI *Release)(DispHTMLBGsound *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLBGsound *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLBGsound *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLBGsound *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLBGsound *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLBGsoundVtbl;
  interface DispHTMLBGsound {
    CONST_VTBL struct DispHTMLBGsoundVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLBGsound_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLBGsound_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLBGsound_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLBGsound_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLBGsound_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLBGsound_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLBGsound_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLBGsound;
#ifdef __cplusplus
  class HTMLBGsound;
#endif

#ifndef __IHTMLFontNamesCollection_INTERFACE_DEFINED__
#define __IHTMLFontNamesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFontNamesCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFontNamesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(long index,BSTR *pBstr) = 0;
  };
#else
  typedef struct IHTMLFontNamesCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFontNamesCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFontNamesCollection *This);
      ULONG (WINAPI *Release)(IHTMLFontNamesCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFontNamesCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFontNamesCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFontNamesCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFontNamesCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLFontNamesCollection *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLFontNamesCollection *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLFontNamesCollection *This,long index,BSTR *pBstr);
    END_INTERFACE
  } IHTMLFontNamesCollectionVtbl;
  interface IHTMLFontNamesCollection {
    CONST_VTBL struct IHTMLFontNamesCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFontNamesCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFontNamesCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFontNamesCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFontNamesCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFontNamesCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFontNamesCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFontNamesCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFontNamesCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLFontNamesCollection_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLFontNamesCollection_item(This,index,pBstr) (This)->lpVtbl->item(This,index,pBstr)
#endif
#endif

  HRESULT WINAPI IHTMLFontNamesCollection_get_length_Proxy(IHTMLFontNamesCollection *This,long *p);
  void __RPC_STUB IHTMLFontNamesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontNamesCollection_get__newEnum_Proxy(IHTMLFontNamesCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLFontNamesCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontNamesCollection_item_Proxy(IHTMLFontNamesCollection *This,long index,BSTR *pBstr);
  void __RPC_STUB IHTMLFontNamesCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLFontSizesCollection_INTERFACE_DEFINED__
#define __IHTMLFontSizesCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLFontSizesCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLFontSizesCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI get_forFont(BSTR *p) = 0;
    virtual HRESULT WINAPI item(long index,long *plSize) = 0;
  };
#else
  typedef struct IHTMLFontSizesCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLFontSizesCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLFontSizesCollection *This);
      ULONG (WINAPI *Release)(IHTMLFontSizesCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLFontSizesCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLFontSizesCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLFontSizesCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLFontSizesCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLFontSizesCollection *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLFontSizesCollection *This,IUnknown **p);
      HRESULT (WINAPI *get_forFont)(IHTMLFontSizesCollection *This,BSTR *p);
      HRESULT (WINAPI *item)(IHTMLFontSizesCollection *This,long index,long *plSize);
    END_INTERFACE
  } IHTMLFontSizesCollectionVtbl;
  interface IHTMLFontSizesCollection {
    CONST_VTBL struct IHTMLFontSizesCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLFontSizesCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLFontSizesCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLFontSizesCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLFontSizesCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLFontSizesCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLFontSizesCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLFontSizesCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLFontSizesCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLFontSizesCollection_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLFontSizesCollection_get_forFont(This,p) (This)->lpVtbl->get_forFont(This,p)
#define IHTMLFontSizesCollection_item(This,index,plSize) (This)->lpVtbl->item(This,index,plSize)
#endif
#endif

  HRESULT WINAPI IHTMLFontSizesCollection_get_length_Proxy(IHTMLFontSizesCollection *This,long *p);
  void __RPC_STUB IHTMLFontSizesCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontSizesCollection_get__newEnum_Proxy(IHTMLFontSizesCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLFontSizesCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontSizesCollection_get_forFont_Proxy(IHTMLFontSizesCollection *This,BSTR *p);
  void __RPC_STUB IHTMLFontSizesCollection_get_forFont_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLFontSizesCollection_item_Proxy(IHTMLFontSizesCollection *This,long index,long *plSize);
  void __RPC_STUB IHTMLFontSizesCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLOptionsHolder_INTERFACE_DEFINED__
#define __IHTMLOptionsHolder_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLOptionsHolder;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLOptionsHolder : public IDispatch {
  public:
    virtual HRESULT WINAPI get_document(IHTMLDocument2 **p) = 0;
    virtual HRESULT WINAPI get_fonts(IHTMLFontNamesCollection **p) = 0;
    virtual HRESULT WINAPI put_execArg(VARIANT v) = 0;
    virtual HRESULT WINAPI get_execArg(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_errorLine(long v) = 0;
    virtual HRESULT WINAPI get_errorLine(long *p) = 0;
    virtual HRESULT WINAPI put_errorCharacter(long v) = 0;
    virtual HRESULT WINAPI get_errorCharacter(long *p) = 0;
    virtual HRESULT WINAPI put_errorCode(long v) = 0;
    virtual HRESULT WINAPI get_errorCode(long *p) = 0;
    virtual HRESULT WINAPI put_errorMessage(BSTR v) = 0;
    virtual HRESULT WINAPI get_errorMessage(BSTR *p) = 0;
    virtual HRESULT WINAPI put_errorDebug(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_errorDebug(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_unsecuredWindowOfDocument(IHTMLWindow2 **p) = 0;
    virtual HRESULT WINAPI put_findText(BSTR v) = 0;
    virtual HRESULT WINAPI get_findText(BSTR *p) = 0;
    virtual HRESULT WINAPI put_anythingAfterFrameset(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_anythingAfterFrameset(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI sizes(BSTR fontName,IHTMLFontSizesCollection **pSizesCollection) = 0;
    virtual HRESULT WINAPI openfiledlg(VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName) = 0;
    virtual HRESULT WINAPI savefiledlg(VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName) = 0;
    virtual HRESULT WINAPI choosecolordlg(VARIANT initColor,long *rgbColor) = 0;
    virtual HRESULT WINAPI showSecurityInfo(void) = 0;
    virtual HRESULT WINAPI isApartmentModel(IHTMLObjectElement *object,VARIANT_BOOL *fApartment) = 0;
    virtual HRESULT WINAPI getCharset(BSTR fontName,long *charset) = 0;
    virtual HRESULT WINAPI get_secureConnectionInfo(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLOptionsHolderVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLOptionsHolder *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLOptionsHolder *This);
      ULONG (WINAPI *Release)(IHTMLOptionsHolder *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLOptionsHolder *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLOptionsHolder *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLOptionsHolder *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLOptionsHolder *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_document)(IHTMLOptionsHolder *This,IHTMLDocument2 **p);
      HRESULT (WINAPI *get_fonts)(IHTMLOptionsHolder *This,IHTMLFontNamesCollection **p);
      HRESULT (WINAPI *put_execArg)(IHTMLOptionsHolder *This,VARIANT v);
      HRESULT (WINAPI *get_execArg)(IHTMLOptionsHolder *This,VARIANT *p);
      HRESULT (WINAPI *put_errorLine)(IHTMLOptionsHolder *This,long v);
      HRESULT (WINAPI *get_errorLine)(IHTMLOptionsHolder *This,long *p);
      HRESULT (WINAPI *put_errorCharacter)(IHTMLOptionsHolder *This,long v);
      HRESULT (WINAPI *get_errorCharacter)(IHTMLOptionsHolder *This,long *p);
      HRESULT (WINAPI *put_errorCode)(IHTMLOptionsHolder *This,long v);
      HRESULT (WINAPI *get_errorCode)(IHTMLOptionsHolder *This,long *p);
      HRESULT (WINAPI *put_errorMessage)(IHTMLOptionsHolder *This,BSTR v);
      HRESULT (WINAPI *get_errorMessage)(IHTMLOptionsHolder *This,BSTR *p);
      HRESULT (WINAPI *put_errorDebug)(IHTMLOptionsHolder *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_errorDebug)(IHTMLOptionsHolder *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_unsecuredWindowOfDocument)(IHTMLOptionsHolder *This,IHTMLWindow2 **p);
      HRESULT (WINAPI *put_findText)(IHTMLOptionsHolder *This,BSTR v);
      HRESULT (WINAPI *get_findText)(IHTMLOptionsHolder *This,BSTR *p);
      HRESULT (WINAPI *put_anythingAfterFrameset)(IHTMLOptionsHolder *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_anythingAfterFrameset)(IHTMLOptionsHolder *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *sizes)(IHTMLOptionsHolder *This,BSTR fontName,IHTMLFontSizesCollection **pSizesCollection);
      HRESULT (WINAPI *openfiledlg)(IHTMLOptionsHolder *This,VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName);
      HRESULT (WINAPI *savefiledlg)(IHTMLOptionsHolder *This,VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName);
      HRESULT (WINAPI *choosecolordlg)(IHTMLOptionsHolder *This,VARIANT initColor,long *rgbColor);
      HRESULT (WINAPI *showSecurityInfo)(IHTMLOptionsHolder *This);
      HRESULT (WINAPI *isApartmentModel)(IHTMLOptionsHolder *This,IHTMLObjectElement *object,VARIANT_BOOL *fApartment);
      HRESULT (WINAPI *getCharset)(IHTMLOptionsHolder *This,BSTR fontName,long *charset);
      HRESULT (WINAPI *get_secureConnectionInfo)(IHTMLOptionsHolder *This,BSTR *p);
    END_INTERFACE
  } IHTMLOptionsHolderVtbl;
  interface IHTMLOptionsHolder {
    CONST_VTBL struct IHTMLOptionsHolderVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLOptionsHolder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLOptionsHolder_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLOptionsHolder_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLOptionsHolder_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLOptionsHolder_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLOptionsHolder_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLOptionsHolder_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLOptionsHolder_get_document(This,p) (This)->lpVtbl->get_document(This,p)
#define IHTMLOptionsHolder_get_fonts(This,p) (This)->lpVtbl->get_fonts(This,p)
#define IHTMLOptionsHolder_put_execArg(This,v) (This)->lpVtbl->put_execArg(This,v)
#define IHTMLOptionsHolder_get_execArg(This,p) (This)->lpVtbl->get_execArg(This,p)
#define IHTMLOptionsHolder_put_errorLine(This,v) (This)->lpVtbl->put_errorLine(This,v)
#define IHTMLOptionsHolder_get_errorLine(This,p) (This)->lpVtbl->get_errorLine(This,p)
#define IHTMLOptionsHolder_put_errorCharacter(This,v) (This)->lpVtbl->put_errorCharacter(This,v)
#define IHTMLOptionsHolder_get_errorCharacter(This,p) (This)->lpVtbl->get_errorCharacter(This,p)
#define IHTMLOptionsHolder_put_errorCode(This,v) (This)->lpVtbl->put_errorCode(This,v)
#define IHTMLOptionsHolder_get_errorCode(This,p) (This)->lpVtbl->get_errorCode(This,p)
#define IHTMLOptionsHolder_put_errorMessage(This,v) (This)->lpVtbl->put_errorMessage(This,v)
#define IHTMLOptionsHolder_get_errorMessage(This,p) (This)->lpVtbl->get_errorMessage(This,p)
#define IHTMLOptionsHolder_put_errorDebug(This,v) (This)->lpVtbl->put_errorDebug(This,v)
#define IHTMLOptionsHolder_get_errorDebug(This,p) (This)->lpVtbl->get_errorDebug(This,p)
#define IHTMLOptionsHolder_get_unsecuredWindowOfDocument(This,p) (This)->lpVtbl->get_unsecuredWindowOfDocument(This,p)
#define IHTMLOptionsHolder_put_findText(This,v) (This)->lpVtbl->put_findText(This,v)
#define IHTMLOptionsHolder_get_findText(This,p) (This)->lpVtbl->get_findText(This,p)
#define IHTMLOptionsHolder_put_anythingAfterFrameset(This,v) (This)->lpVtbl->put_anythingAfterFrameset(This,v)
#define IHTMLOptionsHolder_get_anythingAfterFrameset(This,p) (This)->lpVtbl->get_anythingAfterFrameset(This,p)
#define IHTMLOptionsHolder_sizes(This,fontName,pSizesCollection) (This)->lpVtbl->sizes(This,fontName,pSizesCollection)
#define IHTMLOptionsHolder_openfiledlg(This,initFile,initDir,filter,title,pathName) (This)->lpVtbl->openfiledlg(This,initFile,initDir,filter,title,pathName)
#define IHTMLOptionsHolder_savefiledlg(This,initFile,initDir,filter,title,pathName) (This)->lpVtbl->savefiledlg(This,initFile,initDir,filter,title,pathName)
#define IHTMLOptionsHolder_choosecolordlg(This,initColor,rgbColor) (This)->lpVtbl->choosecolordlg(This,initColor,rgbColor)
#define IHTMLOptionsHolder_showSecurityInfo(This) (This)->lpVtbl->showSecurityInfo(This)
#define IHTMLOptionsHolder_isApartmentModel(This,object,fApartment) (This)->lpVtbl->isApartmentModel(This,object,fApartment)
#define IHTMLOptionsHolder_getCharset(This,fontName,charset) (This)->lpVtbl->getCharset(This,fontName,charset)
#define IHTMLOptionsHolder_get_secureConnectionInfo(This,p) (This)->lpVtbl->get_secureConnectionInfo(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLOptionsHolder_get_document_Proxy(IHTMLOptionsHolder *This,IHTMLDocument2 **p);
  void __RPC_STUB IHTMLOptionsHolder_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_fonts_Proxy(IHTMLOptionsHolder *This,IHTMLFontNamesCollection **p);
  void __RPC_STUB IHTMLOptionsHolder_get_fonts_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_execArg_Proxy(IHTMLOptionsHolder *This,VARIANT v);
  void __RPC_STUB IHTMLOptionsHolder_put_execArg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_execArg_Proxy(IHTMLOptionsHolder *This,VARIANT *p);
  void __RPC_STUB IHTMLOptionsHolder_get_execArg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorLine_Proxy(IHTMLOptionsHolder *This,long v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorLine_Proxy(IHTMLOptionsHolder *This,long *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorCharacter_Proxy(IHTMLOptionsHolder *This,long v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorCharacter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorCharacter_Proxy(IHTMLOptionsHolder *This,long *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorCharacter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorCode_Proxy(IHTMLOptionsHolder *This,long v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorCode_Proxy(IHTMLOptionsHolder *This,long *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorCode_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorMessage_Proxy(IHTMLOptionsHolder *This,BSTR v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorMessage_Proxy(IHTMLOptionsHolder *This,BSTR *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_errorDebug_Proxy(IHTMLOptionsHolder *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionsHolder_put_errorDebug_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_errorDebug_Proxy(IHTMLOptionsHolder *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionsHolder_get_errorDebug_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_unsecuredWindowOfDocument_Proxy(IHTMLOptionsHolder *This,IHTMLWindow2 **p);
  void __RPC_STUB IHTMLOptionsHolder_get_unsecuredWindowOfDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_findText_Proxy(IHTMLOptionsHolder *This,BSTR v);
  void __RPC_STUB IHTMLOptionsHolder_put_findText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_findText_Proxy(IHTMLOptionsHolder *This,BSTR *p);
  void __RPC_STUB IHTMLOptionsHolder_get_findText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_put_anythingAfterFrameset_Proxy(IHTMLOptionsHolder *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLOptionsHolder_put_anythingAfterFrameset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_anythingAfterFrameset_Proxy(IHTMLOptionsHolder *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLOptionsHolder_get_anythingAfterFrameset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_sizes_Proxy(IHTMLOptionsHolder *This,BSTR fontName,IHTMLFontSizesCollection **pSizesCollection);
  void __RPC_STUB IHTMLOptionsHolder_sizes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_openfiledlg_Proxy(IHTMLOptionsHolder *This,VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName);
  void __RPC_STUB IHTMLOptionsHolder_openfiledlg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_savefiledlg_Proxy(IHTMLOptionsHolder *This,VARIANT initFile,VARIANT initDir,VARIANT filter,VARIANT title,BSTR *pathName);
  void __RPC_STUB IHTMLOptionsHolder_savefiledlg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_choosecolordlg_Proxy(IHTMLOptionsHolder *This,VARIANT initColor,long *rgbColor);
  void __RPC_STUB IHTMLOptionsHolder_choosecolordlg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_showSecurityInfo_Proxy(IHTMLOptionsHolder *This);
  void __RPC_STUB IHTMLOptionsHolder_showSecurityInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_isApartmentModel_Proxy(IHTMLOptionsHolder *This,IHTMLObjectElement *object,VARIANT_BOOL *fApartment);
  void __RPC_STUB IHTMLOptionsHolder_isApartmentModel_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_getCharset_Proxy(IHTMLOptionsHolder *This,BSTR fontName,long *charset);
  void __RPC_STUB IHTMLOptionsHolder_getCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLOptionsHolder_get_secureConnectionInfo_Proxy(IHTMLOptionsHolder *This,BSTR *p);
  void __RPC_STUB IHTMLOptionsHolder_get_secureConnectionInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __HTMLStyleElementEvents2_DISPINTERFACE_DEFINED__
#define __HTMLStyleElementEvents2_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLStyleElementEvents2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLStyleElementEvents2 : public IDispatch {
  };
#else
  typedef struct HTMLStyleElementEvents2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLStyleElementEvents2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLStyleElementEvents2 *This);
      ULONG (WINAPI *Release)(HTMLStyleElementEvents2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLStyleElementEvents2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLStyleElementEvents2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLStyleElementEvents2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLStyleElementEvents2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLStyleElementEvents2Vtbl;
  interface HTMLStyleElementEvents2 {
    CONST_VTBL struct HTMLStyleElementEvents2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLStyleElementEvents2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLStyleElementEvents2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLStyleElementEvents2_Release(This) (This)->lpVtbl->Release(This)
#define HTMLStyleElementEvents2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLStyleElementEvents2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLStyleElementEvents2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLStyleElementEvents2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __HTMLStyleElementEvents_DISPINTERFACE_DEFINED__
#define __HTMLStyleElementEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLStyleElementEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLStyleElementEvents : public IDispatch {
  };
#else
  typedef struct HTMLStyleElementEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLStyleElementEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLStyleElementEvents *This);
      ULONG (WINAPI *Release)(HTMLStyleElementEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLStyleElementEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLStyleElementEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLStyleElementEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLStyleElementEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLStyleElementEventsVtbl;
  interface HTMLStyleElementEvents {
    CONST_VTBL struct HTMLStyleElementEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLStyleElementEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLStyleElementEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLStyleElementEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLStyleElementEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLStyleElementEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLStyleElementEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLStyleElementEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLStyleElement_INTERFACE_DEFINED__
#define __IHTMLStyleElement_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLStyleElement : public IDispatch {
  public:
    virtual HRESULT WINAPI put_type(BSTR v) = 0;
    virtual HRESULT WINAPI get_type(BSTR *p) = 0;
    virtual HRESULT WINAPI get_readyState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onload(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onload(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onerror(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onerror(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_styleSheet(IHTMLStyleSheet **p) = 0;
    virtual HRESULT WINAPI put_disabled(VARIANT_BOOL v) = 0;
    virtual HRESULT WINAPI get_disabled(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI put_media(BSTR v) = 0;
    virtual HRESULT WINAPI get_media(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLStyleElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyleElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyleElement *This);
      ULONG (WINAPI *Release)(IHTMLStyleElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyleElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyleElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyleElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyleElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_type)(IHTMLStyleElement *This,BSTR v);
      HRESULT (WINAPI *get_type)(IHTMLStyleElement *This,BSTR *p);
      HRESULT (WINAPI *get_readyState)(IHTMLStyleElement *This,BSTR *p);
      HRESULT (WINAPI *put_onreadystatechange)(IHTMLStyleElement *This,VARIANT v);
      HRESULT (WINAPI *get_onreadystatechange)(IHTMLStyleElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onload)(IHTMLStyleElement *This,VARIANT v);
      HRESULT (WINAPI *get_onload)(IHTMLStyleElement *This,VARIANT *p);
      HRESULT (WINAPI *put_onerror)(IHTMLStyleElement *This,VARIANT v);
      HRESULT (WINAPI *get_onerror)(IHTMLStyleElement *This,VARIANT *p);
      HRESULT (WINAPI *get_styleSheet)(IHTMLStyleElement *This,IHTMLStyleSheet **p);
      HRESULT (WINAPI *put_disabled)(IHTMLStyleElement *This,VARIANT_BOOL v);
      HRESULT (WINAPI *get_disabled)(IHTMLStyleElement *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *put_media)(IHTMLStyleElement *This,BSTR v);
      HRESULT (WINAPI *get_media)(IHTMLStyleElement *This,BSTR *p);
    END_INTERFACE
  } IHTMLStyleElementVtbl;
  interface IHTMLStyleElement {
    CONST_VTBL struct IHTMLStyleElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyleElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyleElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyleElement_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyleElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyleElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyleElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyleElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyleElement_put_type(This,v) (This)->lpVtbl->put_type(This,v)
#define IHTMLStyleElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
#define IHTMLStyleElement_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IHTMLStyleElement_put_onreadystatechange(This,v) (This)->lpVtbl->put_onreadystatechange(This,v)
#define IHTMLStyleElement_get_onreadystatechange(This,p) (This)->lpVtbl->get_onreadystatechange(This,p)
#define IHTMLStyleElement_put_onload(This,v) (This)->lpVtbl->put_onload(This,v)
#define IHTMLStyleElement_get_onload(This,p) (This)->lpVtbl->get_onload(This,p)
#define IHTMLStyleElement_put_onerror(This,v) (This)->lpVtbl->put_onerror(This,v)
#define IHTMLStyleElement_get_onerror(This,p) (This)->lpVtbl->get_onerror(This,p)
#define IHTMLStyleElement_get_styleSheet(This,p) (This)->lpVtbl->get_styleSheet(This,p)
#define IHTMLStyleElement_put_disabled(This,v) (This)->lpVtbl->put_disabled(This,v)
#define IHTMLStyleElement_get_disabled(This,p) (This)->lpVtbl->get_disabled(This,p)
#define IHTMLStyleElement_put_media(This,v) (This)->lpVtbl->put_media(This,v)
#define IHTMLStyleElement_get_media(This,p) (This)->lpVtbl->get_media(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLStyleElement_put_type_Proxy(IHTMLStyleElement *This,BSTR v);
  void __RPC_STUB IHTMLStyleElement_put_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_type_Proxy(IHTMLStyleElement *This,BSTR *p);
  void __RPC_STUB IHTMLStyleElement_get_type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_readyState_Proxy(IHTMLStyleElement *This,BSTR *p);
  void __RPC_STUB IHTMLStyleElement_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_onreadystatechange_Proxy(IHTMLStyleElement *This,VARIANT v);
  void __RPC_STUB IHTMLStyleElement_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_onreadystatechange_Proxy(IHTMLStyleElement *This,VARIANT *p);
  void __RPC_STUB IHTMLStyleElement_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_onload_Proxy(IHTMLStyleElement *This,VARIANT v);
  void __RPC_STUB IHTMLStyleElement_put_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_onload_Proxy(IHTMLStyleElement *This,VARIANT *p);
  void __RPC_STUB IHTMLStyleElement_get_onload_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_onerror_Proxy(IHTMLStyleElement *This,VARIANT v);
  void __RPC_STUB IHTMLStyleElement_put_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_onerror_Proxy(IHTMLStyleElement *This,VARIANT *p);
  void __RPC_STUB IHTMLStyleElement_get_onerror_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_styleSheet_Proxy(IHTMLStyleElement *This,IHTMLStyleSheet **p);
  void __RPC_STUB IHTMLStyleElement_get_styleSheet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_disabled_Proxy(IHTMLStyleElement *This,VARIANT_BOOL v);
  void __RPC_STUB IHTMLStyleElement_put_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_disabled_Proxy(IHTMLStyleElement *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLStyleElement_get_disabled_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_put_media_Proxy(IHTMLStyleElement *This,BSTR v);
  void __RPC_STUB IHTMLStyleElement_put_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleElement_get_media_Proxy(IHTMLStyleElement *This,BSTR *p);
  void __RPC_STUB IHTMLStyleElement_get_media_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLStyleElement_DISPINTERFACE_DEFINED__
#define __DispHTMLStyleElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLStyleElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLStyleElement : public IDispatch {
  };
#else
  typedef struct DispHTMLStyleElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLStyleElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLStyleElement *This);
      ULONG (WINAPI *Release)(DispHTMLStyleElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLStyleElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLStyleElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLStyleElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLStyleElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLStyleElementVtbl;
  interface DispHTMLStyleElement {
    CONST_VTBL struct DispHTMLStyleElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLStyleElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLStyleElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLStyleElement_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLStyleElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLStyleElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLStyleElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLStyleElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif
  EXTERN_C const CLSID CLSID_HTMLStyleElement;
#ifdef __cplusplus
  class HTMLStyleElement;
#endif

#ifndef __IHTMLStyleFontFace_INTERFACE_DEFINED__
#define __IHTMLStyleFontFace_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLStyleFontFace;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLStyleFontFace : public IDispatch {
  public:
    virtual HRESULT WINAPI put_fontsrc(BSTR v) = 0;
    virtual HRESULT WINAPI get_fontsrc(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLStyleFontFaceVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLStyleFontFace *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLStyleFontFace *This);
      ULONG (WINAPI *Release)(IHTMLStyleFontFace *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLStyleFontFace *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLStyleFontFace *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLStyleFontFace *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLStyleFontFace *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_fontsrc)(IHTMLStyleFontFace *This,BSTR v);
      HRESULT (WINAPI *get_fontsrc)(IHTMLStyleFontFace *This,BSTR *p);
    END_INTERFACE
  } IHTMLStyleFontFaceVtbl;
  interface IHTMLStyleFontFace {
    CONST_VTBL struct IHTMLStyleFontFaceVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLStyleFontFace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLStyleFontFace_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLStyleFontFace_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLStyleFontFace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLStyleFontFace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLStyleFontFace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLStyleFontFace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLStyleFontFace_put_fontsrc(This,v) (This)->lpVtbl->put_fontsrc(This,v)
#define IHTMLStyleFontFace_get_fontsrc(This,p) (This)->lpVtbl->get_fontsrc(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLStyleFontFace_put_fontsrc_Proxy(IHTMLStyleFontFace *This,BSTR v);
  void __RPC_STUB IHTMLStyleFontFace_put_fontsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLStyleFontFace_get_fontsrc_Proxy(IHTMLStyleFontFace *This,BSTR *p);
  void __RPC_STUB IHTMLStyleFontFace_get_fontsrc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_HTMLStyleFontFace;
#ifdef __cplusplus
  class HTMLStyleFontFace;
#endif

#ifndef __ICSSFilterSite_INTERFACE_DEFINED__
#define __ICSSFilterSite_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ICSSFilterSite;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ICSSFilterSite : public IUnknown {
  public:
    virtual HRESULT WINAPI GetElement(IHTMLElement **Element) = 0;
    virtual HRESULT WINAPI FireOnFilterChangeEvent(void) = 0;
  };
#else
  typedef struct ICSSFilterSiteVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ICSSFilterSite *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ICSSFilterSite *This);
      ULONG (WINAPI *Release)(ICSSFilterSite *This);
      HRESULT (WINAPI *GetElement)(ICSSFilterSite *This,IHTMLElement **Element);
      HRESULT (WINAPI *FireOnFilterChangeEvent)(ICSSFilterSite *This);
    END_INTERFACE
  } ICSSFilterSiteVtbl;
  interface ICSSFilterSite {
    CONST_VTBL struct ICSSFilterSiteVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ICSSFilterSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ICSSFilterSite_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ICSSFilterSite_Release(This) (This)->lpVtbl->Release(This)
#define ICSSFilterSite_GetElement(This,Element) (This)->lpVtbl->GetElement(This,Element)
#define ICSSFilterSite_FireOnFilterChangeEvent(This) (This)->lpVtbl->FireOnFilterChangeEvent(This)
#endif
#endif

  HRESULT WINAPI ICSSFilterSite_GetElement_Proxy(ICSSFilterSite *This,IHTMLElement **Element);
  void __RPC_STUB ICSSFilterSite_GetElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ICSSFilterSite_FireOnFilterChangeEvent_Proxy(ICSSFilterSite *This);
  void __RPC_STUB ICSSFilterSite_FireOnFilterChangeEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupPointer_INTERFACE_DEFINED__
#define __IMarkupPointer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupPointer;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMarkupPointer : public IUnknown {
  public:
    virtual HRESULT WINAPI OwningDoc(IHTMLDocument2 **ppDoc) = 0;
    virtual HRESULT WINAPI Gravity(POINTER_GRAVITY *pGravity) = 0;
    virtual HRESULT WINAPI SetGravity(POINTER_GRAVITY Gravity) = 0;
    virtual HRESULT WINAPI Cling(WINBOOL *pfCling) = 0;
    virtual HRESULT WINAPI SetCling(WINBOOL fCLing) = 0;
    virtual HRESULT WINAPI Unposition(void) = 0;
    virtual HRESULT WINAPI IsPositioned(WINBOOL *pfPositioned) = 0;
    virtual HRESULT WINAPI GetContainer(IMarkupContainer **ppContainer) = 0;
    virtual HRESULT WINAPI MoveAdjacentToElement(IHTMLElement *pElement,ELEMENT_ADJACENCY eAdj) = 0;
    virtual HRESULT WINAPI MoveToPointer(IMarkupPointer *pPointer) = 0;
    virtual HRESULT WINAPI MoveToContainer(IMarkupContainer *pContainer,WINBOOL fAtStart) = 0;
    virtual HRESULT WINAPI Left(WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText) = 0;
    virtual HRESULT WINAPI Right(WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText) = 0;
    virtual HRESULT WINAPI CurrentScope(IHTMLElement **ppElemCurrent) = 0;
    virtual HRESULT WINAPI IsLeftOf(IMarkupPointer *pPointerThat,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI IsLeftOfOrEqualTo(IMarkupPointer *pPointerThat,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI IsRightOf(IMarkupPointer *pPointerThat,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI IsRightOfOrEqualTo(IMarkupPointer *pPointerThat,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI IsEqualTo(IMarkupPointer *pPointerThat,WINBOOL *pfAreEqual) = 0;
    virtual HRESULT WINAPI MoveUnit(MOVEUNIT_ACTION muAction) = 0;
    virtual HRESULT WINAPI FindText(OLECHAR *pchFindText,DWORD dwFlags,IMarkupPointer *pIEndMatch,IMarkupPointer *pIEndSearch) = 0;
  };
#else
  typedef struct IMarkupPointerVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMarkupPointer *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMarkupPointer *This);
      ULONG (WINAPI *Release)(IMarkupPointer *This);
      HRESULT (WINAPI *OwningDoc)(IMarkupPointer *This,IHTMLDocument2 **ppDoc);
      HRESULT (WINAPI *Gravity)(IMarkupPointer *This,POINTER_GRAVITY *pGravity);
      HRESULT (WINAPI *SetGravity)(IMarkupPointer *This,POINTER_GRAVITY Gravity);
      HRESULT (WINAPI *Cling)(IMarkupPointer *This,WINBOOL *pfCling);
      HRESULT (WINAPI *SetCling)(IMarkupPointer *This,WINBOOL fCLing);
      HRESULT (WINAPI *Unposition)(IMarkupPointer *This);
      HRESULT (WINAPI *IsPositioned)(IMarkupPointer *This,WINBOOL *pfPositioned);
      HRESULT (WINAPI *GetContainer)(IMarkupPointer *This,IMarkupContainer **ppContainer);
      HRESULT (WINAPI *MoveAdjacentToElement)(IMarkupPointer *This,IHTMLElement *pElement,ELEMENT_ADJACENCY eAdj);
      HRESULT (WINAPI *MoveToPointer)(IMarkupPointer *This,IMarkupPointer *pPointer);
      HRESULT (WINAPI *MoveToContainer)(IMarkupPointer *This,IMarkupContainer *pContainer,WINBOOL fAtStart);
      HRESULT (WINAPI *Left)(IMarkupPointer *This,WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText);
      HRESULT (WINAPI *Right)(IMarkupPointer *This,WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText);
      HRESULT (WINAPI *CurrentScope)(IMarkupPointer *This,IHTMLElement **ppElemCurrent);
      HRESULT (WINAPI *IsLeftOf)(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
      HRESULT (WINAPI *IsLeftOfOrEqualTo)(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
      HRESULT (WINAPI *IsRightOf)(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
      HRESULT (WINAPI *IsRightOfOrEqualTo)(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
      HRESULT (WINAPI *IsEqualTo)(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfAreEqual);
      HRESULT (WINAPI *MoveUnit)(IMarkupPointer *This,MOVEUNIT_ACTION muAction);
      HRESULT (WINAPI *FindText)(IMarkupPointer *This,OLECHAR *pchFindText,DWORD dwFlags,IMarkupPointer *pIEndMatch,IMarkupPointer *pIEndSearch);
    END_INTERFACE
  } IMarkupPointerVtbl;
  interface IMarkupPointer {
    CONST_VTBL struct IMarkupPointerVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMarkupPointer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMarkupPointer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMarkupPointer_Release(This) (This)->lpVtbl->Release(This)
#define IMarkupPointer_OwningDoc(This,ppDoc) (This)->lpVtbl->OwningDoc(This,ppDoc)
#define IMarkupPointer_Gravity(This,pGravity) (This)->lpVtbl->Gravity(This,pGravity)
#define IMarkupPointer_SetGravity(This,Gravity) (This)->lpVtbl->SetGravity(This,Gravity)
#define IMarkupPointer_Cling(This,pfCling) (This)->lpVtbl->Cling(This,pfCling)
#define IMarkupPointer_SetCling(This,fCLing) (This)->lpVtbl->SetCling(This,fCLing)
#define IMarkupPointer_Unposition(This) (This)->lpVtbl->Unposition(This)
#define IMarkupPointer_IsPositioned(This,pfPositioned) (This)->lpVtbl->IsPositioned(This,pfPositioned)
#define IMarkupPointer_GetContainer(This,ppContainer) (This)->lpVtbl->GetContainer(This,ppContainer)
#define IMarkupPointer_MoveAdjacentToElement(This,pElement,eAdj) (This)->lpVtbl->MoveAdjacentToElement(This,pElement,eAdj)
#define IMarkupPointer_MoveToPointer(This,pPointer) (This)->lpVtbl->MoveToPointer(This,pPointer)
#define IMarkupPointer_MoveToContainer(This,pContainer,fAtStart) (This)->lpVtbl->MoveToContainer(This,pContainer,fAtStart)
#define IMarkupPointer_Left(This,fMove,pContext,ppElement,pcch,pchText) (This)->lpVtbl->Left(This,fMove,pContext,ppElement,pcch,pchText)
#define IMarkupPointer_Right(This,fMove,pContext,ppElement,pcch,pchText) (This)->lpVtbl->Right(This,fMove,pContext,ppElement,pcch,pchText)
#define IMarkupPointer_CurrentScope(This,ppElemCurrent) (This)->lpVtbl->CurrentScope(This,ppElemCurrent)
#define IMarkupPointer_IsLeftOf(This,pPointerThat,pfResult) (This)->lpVtbl->IsLeftOf(This,pPointerThat,pfResult)
#define IMarkupPointer_IsLeftOfOrEqualTo(This,pPointerThat,pfResult) (This)->lpVtbl->IsLeftOfOrEqualTo(This,pPointerThat,pfResult)
#define IMarkupPointer_IsRightOf(This,pPointerThat,pfResult) (This)->lpVtbl->IsRightOf(This,pPointerThat,pfResult)
#define IMarkupPointer_IsRightOfOrEqualTo(This,pPointerThat,pfResult) (This)->lpVtbl->IsRightOfOrEqualTo(This,pPointerThat,pfResult)
#define IMarkupPointer_IsEqualTo(This,pPointerThat,pfAreEqual) (This)->lpVtbl->IsEqualTo(This,pPointerThat,pfAreEqual)
#define IMarkupPointer_MoveUnit(This,muAction) (This)->lpVtbl->MoveUnit(This,muAction)
#define IMarkupPointer_FindText(This,pchFindText,dwFlags,pIEndMatch,pIEndSearch) (This)->lpVtbl->FindText(This,pchFindText,dwFlags,pIEndMatch,pIEndSearch)
#endif
#endif

  HRESULT WINAPI IMarkupPointer_OwningDoc_Proxy(IMarkupPointer *This,IHTMLDocument2 **ppDoc);
  void __RPC_STUB IMarkupPointer_OwningDoc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Gravity_Proxy(IMarkupPointer *This,POINTER_GRAVITY *pGravity);
  void __RPC_STUB IMarkupPointer_Gravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_SetGravity_Proxy(IMarkupPointer *This,POINTER_GRAVITY Gravity);
  void __RPC_STUB IMarkupPointer_SetGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Cling_Proxy(IMarkupPointer *This,WINBOOL *pfCling);
  void __RPC_STUB IMarkupPointer_Cling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_SetCling_Proxy(IMarkupPointer *This,WINBOOL fCLing);
  void __RPC_STUB IMarkupPointer_SetCling_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Unposition_Proxy(IMarkupPointer *This);
  void __RPC_STUB IMarkupPointer_Unposition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsPositioned_Proxy(IMarkupPointer *This,WINBOOL *pfPositioned);
  void __RPC_STUB IMarkupPointer_IsPositioned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_GetContainer_Proxy(IMarkupPointer *This,IMarkupContainer **ppContainer);
  void __RPC_STUB IMarkupPointer_GetContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_MoveAdjacentToElement_Proxy(IMarkupPointer *This,IHTMLElement *pElement,ELEMENT_ADJACENCY eAdj);
  void __RPC_STUB IMarkupPointer_MoveAdjacentToElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_MoveToPointer_Proxy(IMarkupPointer *This,IMarkupPointer *pPointer);
  void __RPC_STUB IMarkupPointer_MoveToPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_MoveToContainer_Proxy(IMarkupPointer *This,IMarkupContainer *pContainer,WINBOOL fAtStart);
  void __RPC_STUB IMarkupPointer_MoveToContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Left_Proxy(IMarkupPointer *This,WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText);
  void __RPC_STUB IMarkupPointer_Left_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_Right_Proxy(IMarkupPointer *This,WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText);
  void __RPC_STUB IMarkupPointer_Right_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_CurrentScope_Proxy(IMarkupPointer *This,IHTMLElement **ppElemCurrent);
  void __RPC_STUB IMarkupPointer_CurrentScope_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsLeftOf_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer_IsLeftOf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsLeftOfOrEqualTo_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer_IsLeftOfOrEqualTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsRightOf_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer_IsRightOf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsRightOfOrEqualTo_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer_IsRightOfOrEqualTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_IsEqualTo_Proxy(IMarkupPointer *This,IMarkupPointer *pPointerThat,WINBOOL *pfAreEqual);
  void __RPC_STUB IMarkupPointer_IsEqualTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_MoveUnit_Proxy(IMarkupPointer *This,MOVEUNIT_ACTION muAction);
  void __RPC_STUB IMarkupPointer_MoveUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer_FindText_Proxy(IMarkupPointer *This,OLECHAR *pchFindText,DWORD dwFlags,IMarkupPointer *pIEndMatch,IMarkupPointer *pIEndSearch);
  void __RPC_STUB IMarkupPointer_FindText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupContainer_INTERFACE_DEFINED__
#define __IMarkupContainer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupContainer;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMarkupContainer : public IUnknown {
  public:
    virtual HRESULT WINAPI OwningDoc(IHTMLDocument2 **ppDoc) = 0;
  };
#else
  typedef struct IMarkupContainerVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMarkupContainer *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMarkupContainer *This);
      ULONG (WINAPI *Release)(IMarkupContainer *This);
      HRESULT (WINAPI *OwningDoc)(IMarkupContainer *This,IHTMLDocument2 **ppDoc);
    END_INTERFACE
  } IMarkupContainerVtbl;
  interface IMarkupContainer {
    CONST_VTBL struct IMarkupContainerVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMarkupContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMarkupContainer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMarkupContainer_Release(This) (This)->lpVtbl->Release(This)
#define IMarkupContainer_OwningDoc(This,ppDoc) (This)->lpVtbl->OwningDoc(This,ppDoc)
#endif
#endif

  HRESULT WINAPI IMarkupContainer_OwningDoc_Proxy(IMarkupContainer *This,IHTMLDocument2 **ppDoc);
  void __RPC_STUB IMarkupContainer_OwningDoc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupContainer2_INTERFACE_DEFINED__
#define __IMarkupContainer2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupContainer2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMarkupContainer2 : public IMarkupContainer {
  public:
    virtual HRESULT WINAPI CreateChangeLog(IHTMLChangeSink *pChangeSink,IHTMLChangeLog **ppChangeLog,WINBOOL fForward,WINBOOL fBackward) = 0;
    virtual HRESULT WINAPI RegisterForDirtyRange(IHTMLChangeSink *pChangeSink,DWORD *pdwCookie) = 0;
    virtual HRESULT WINAPI UnRegisterForDirtyRange(DWORD dwCookie) = 0;
    virtual HRESULT WINAPI GetAndClearDirtyRange(DWORD dwCookie,IMarkupPointer *pIPointerBegin,IMarkupPointer *pIPointerEnd) = 0;
    virtual long WINAPI GetVersionNumber(void) = 0;
    virtual HRESULT WINAPI GetMasterElement(IHTMLElement **ppElementMaster) = 0;
  };
#else
  typedef struct IMarkupContainer2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMarkupContainer2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMarkupContainer2 *This);
      ULONG (WINAPI *Release)(IMarkupContainer2 *This);
      HRESULT (WINAPI *OwningDoc)(IMarkupContainer2 *This,IHTMLDocument2 **ppDoc);
      HRESULT (WINAPI *CreateChangeLog)(IMarkupContainer2 *This,IHTMLChangeSink *pChangeSink,IHTMLChangeLog **ppChangeLog,WINBOOL fForward,WINBOOL fBackward);
      HRESULT (WINAPI *RegisterForDirtyRange)(IMarkupContainer2 *This,IHTMLChangeSink *pChangeSink,DWORD *pdwCookie);
      HRESULT (WINAPI *UnRegisterForDirtyRange)(IMarkupContainer2 *This,DWORD dwCookie);
      HRESULT (WINAPI *GetAndClearDirtyRange)(IMarkupContainer2 *This,DWORD dwCookie,IMarkupPointer *pIPointerBegin,IMarkupPointer *pIPointerEnd);
      long (WINAPI *GetVersionNumber)(IMarkupContainer2 *This);
      HRESULT (WINAPI *GetMasterElement)(IMarkupContainer2 *This,IHTMLElement **ppElementMaster);
    END_INTERFACE
  } IMarkupContainer2Vtbl;
  interface IMarkupContainer2 {
    CONST_VTBL struct IMarkupContainer2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMarkupContainer2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMarkupContainer2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMarkupContainer2_Release(This) (This)->lpVtbl->Release(This)
#define IMarkupContainer2_OwningDoc(This,ppDoc) (This)->lpVtbl->OwningDoc(This,ppDoc)
#define IMarkupContainer2_CreateChangeLog(This,pChangeSink,ppChangeLog,fForward,fBackward) (This)->lpVtbl->CreateChangeLog(This,pChangeSink,ppChangeLog,fForward,fBackward)
#define IMarkupContainer2_RegisterForDirtyRange(This,pChangeSink,pdwCookie) (This)->lpVtbl->RegisterForDirtyRange(This,pChangeSink,pdwCookie)
#define IMarkupContainer2_UnRegisterForDirtyRange(This,dwCookie) (This)->lpVtbl->UnRegisterForDirtyRange(This,dwCookie)
#define IMarkupContainer2_GetAndClearDirtyRange(This,dwCookie,pIPointerBegin,pIPointerEnd) (This)->lpVtbl->GetAndClearDirtyRange(This,dwCookie,pIPointerBegin,pIPointerEnd)
#define IMarkupContainer2_GetVersionNumber(This) (This)->lpVtbl->GetVersionNumber(This)
#define IMarkupContainer2_GetMasterElement(This,ppElementMaster) (This)->lpVtbl->GetMasterElement(This,ppElementMaster)
#endif
#endif

  HRESULT WINAPI IMarkupContainer2_CreateChangeLog_Proxy(IMarkupContainer2 *This,IHTMLChangeSink *pChangeSink,IHTMLChangeLog **ppChangeLog,WINBOOL fForward,WINBOOL fBackward);
  void __RPC_STUB IMarkupContainer2_CreateChangeLog_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupContainer2_RegisterForDirtyRange_Proxy(IMarkupContainer2 *This,IHTMLChangeSink *pChangeSink,DWORD *pdwCookie);
  void __RPC_STUB IMarkupContainer2_RegisterForDirtyRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupContainer2_UnRegisterForDirtyRange_Proxy(IMarkupContainer2 *This,DWORD dwCookie);
  void __RPC_STUB IMarkupContainer2_UnRegisterForDirtyRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupContainer2_GetAndClearDirtyRange_Proxy(IMarkupContainer2 *This,DWORD dwCookie,IMarkupPointer *pIPointerBegin,IMarkupPointer *pIPointerEnd);
  void __RPC_STUB IMarkupContainer2_GetAndClearDirtyRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  long WINAPI IMarkupContainer2_GetVersionNumber_Proxy(IMarkupContainer2 *This);
  void __RPC_STUB IMarkupContainer2_GetVersionNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupContainer2_GetMasterElement_Proxy(IMarkupContainer2 *This,IHTMLElement **ppElementMaster);
  void __RPC_STUB IMarkupContainer2_GetMasterElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLChangeLog_INTERFACE_DEFINED__
#define __IHTMLChangeLog_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLChangeLog;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLChangeLog : public IUnknown {
  public:
    virtual HRESULT WINAPI GetNextChange(BYTE *pbBuffer,long nBufferSize,long *pnRecordLength) = 0;
  };
#else
  typedef struct IHTMLChangeLogVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLChangeLog *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLChangeLog *This);
      ULONG (WINAPI *Release)(IHTMLChangeLog *This);
      HRESULT (WINAPI *GetNextChange)(IHTMLChangeLog *This,BYTE *pbBuffer,long nBufferSize,long *pnRecordLength);
    END_INTERFACE
  } IHTMLChangeLogVtbl;
  interface IHTMLChangeLog {
    CONST_VTBL struct IHTMLChangeLogVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLChangeLog_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLChangeLog_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLChangeLog_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLChangeLog_GetNextChange(This,pbBuffer,nBufferSize,pnRecordLength) (This)->lpVtbl->GetNextChange(This,pbBuffer,nBufferSize,pnRecordLength)
#endif
#endif

  HRESULT WINAPI IHTMLChangeLog_GetNextChange_Proxy(IHTMLChangeLog *This,BYTE *pbBuffer,long nBufferSize,long *pnRecordLength);
  void __RPC_STUB IHTMLChangeLog_GetNextChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLChangeSink_INTERFACE_DEFINED__
#define __IHTMLChangeSink_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLChangeSink;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLChangeSink : public IUnknown {
  public:
    virtual HRESULT WINAPI Notify(void) = 0;
  };
#else
  typedef struct IHTMLChangeSinkVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLChangeSink *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLChangeSink *This);
      ULONG (WINAPI *Release)(IHTMLChangeSink *This);
      HRESULT (WINAPI *Notify)(IHTMLChangeSink *This);
    END_INTERFACE
  } IHTMLChangeSinkVtbl;
  interface IHTMLChangeSink {
    CONST_VTBL struct IHTMLChangeSinkVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLChangeSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLChangeSink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLChangeSink_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLChangeSink_Notify(This) (This)->lpVtbl->Notify(This)
#endif
#endif

  HRESULT WINAPI IHTMLChangeSink_Notify_Proxy(IHTMLChangeSink *This);
  void __RPC_STUB IHTMLChangeSink_Notify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IActiveIMMApp_INTERFACE_DEFINED__
#define __IActiveIMMApp_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IActiveIMMApp;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IActiveIMMApp : public IUnknown {
  public:
    virtual HRESULT WINAPI AssociateContext(HWND hWnd,HIMC hIME,HIMC *phPrev) = 0;
    virtual HRESULT WINAPI ConfigureIMEA(HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDA *pData) = 0;
    virtual HRESULT WINAPI ConfigureIMEW(HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDW *pData) = 0;
    virtual HRESULT WINAPI CreateContext(HIMC *phIMC) = 0;
    virtual HRESULT WINAPI DestroyContext(HIMC hIME) = 0;
    virtual HRESULT WINAPI EnumRegisterWordA(HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister,LPVOID pData,IEnumRegisterWordA **pEnum) = 0;
    virtual HRESULT WINAPI EnumRegisterWordW(HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister,LPVOID pData,IEnumRegisterWordW **pEnum) = 0;
    virtual HRESULT WINAPI EscapeA(HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult) = 0;
    virtual HRESULT WINAPI EscapeW(HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult) = 0;
    virtual HRESULT WINAPI GetCandidateListA(HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetCandidateListW(HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetCandidateListCountA(HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen) = 0;
    virtual HRESULT WINAPI GetCandidateListCountW(HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen) = 0;
    virtual HRESULT WINAPI GetCandidateWindow(HIMC hIMC,DWORD dwIndex,CANDIDATEFORM *pCandidate) = 0;
    virtual HRESULT WINAPI GetCompositionFontA(HIMC hIMC,LOGFONTA *plf) = 0;
    virtual HRESULT WINAPI GetCompositionFontW(HIMC hIMC,LOGFONTW *plf) = 0;
    virtual HRESULT WINAPI GetCompositionStringA(HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf) = 0;
    virtual HRESULT WINAPI GetCompositionStringW(HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf) = 0;
    virtual HRESULT WINAPI GetCompositionWindow(HIMC hIMC,COMPOSITIONFORM *pCompForm) = 0;
    virtual HRESULT WINAPI GetContext(HWND hWnd,HIMC *phIMC) = 0;
    virtual HRESULT WINAPI GetConversionListA(HKL hKL,HIMC hIMC,LPSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetConversionListW(HKL hKL,HIMC hIMC,LPWSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetConversionStatus(HIMC hIMC,DWORD *pfdwConversion,DWORD *pfdwSentence) = 0;
    virtual HRESULT WINAPI GetDefaultIMEWnd(HWND hWnd,HWND *phDefWnd) = 0;
    virtual HRESULT WINAPI GetDescriptionA(HKL hKL,UINT uBufLen,LPSTR szDescription,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetDescriptionW(HKL hKL,UINT uBufLen,LPWSTR szDescription,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetGuideLineA(HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPSTR pBuf,DWORD *pdwResult) = 0;
    virtual HRESULT WINAPI GetGuideLineW(HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPWSTR pBuf,DWORD *pdwResult) = 0;
    virtual HRESULT WINAPI GetIMEFileNameA(HKL hKL,UINT uBufLen,LPSTR szFileName,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetIMEFileNameW(HKL hKL,UINT uBufLen,LPWSTR szFileName,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetOpenStatus(HIMC hIMC) = 0;
    virtual HRESULT WINAPI GetProperty(HKL hKL,DWORD fdwIndex,DWORD *pdwProperty) = 0;
    virtual HRESULT WINAPI GetRegisterWordStyleA(HKL hKL,UINT nItem,STYLEBUFA *pStyleBuf,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetRegisterWordStyleW(HKL hKL,UINT nItem,STYLEBUFW *pStyleBuf,UINT *puCopied) = 0;
    virtual HRESULT WINAPI GetStatusWindowPos(HIMC hIMC,POINT *pptPos) = 0;
    virtual HRESULT WINAPI GetVirtualKey(HWND hWnd,UINT *puVirtualKey) = 0;
    virtual HRESULT WINAPI InstallIMEA(LPSTR szIMEFileName,LPSTR szLayoutText,HKL *phKL) = 0;
    virtual HRESULT WINAPI InstallIMEW(LPWSTR szIMEFileName,LPWSTR szLayoutText,HKL *phKL) = 0;
    virtual HRESULT WINAPI IsIME(HKL hKL) = 0;
    virtual HRESULT WINAPI IsUIMessageA(HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam) = 0;
    virtual HRESULT WINAPI IsUIMessageW(HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam) = 0;
    virtual HRESULT WINAPI NotifyIME(HIMC hIMC,DWORD dwAction,DWORD dwIndex,DWORD dwValue) = 0;
    virtual HRESULT WINAPI RegisterWordA(HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister) = 0;
    virtual HRESULT WINAPI RegisterWordW(HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister) = 0;
    virtual HRESULT WINAPI ReleaseContext(HWND hWnd,HIMC hIMC) = 0;
    virtual HRESULT WINAPI SetCandidateWindow(HIMC hIMC,CANDIDATEFORM *pCandidate) = 0;
    virtual HRESULT WINAPI SetCompositionFontA(HIMC hIMC,LOGFONTA *plf) = 0;
    virtual HRESULT WINAPI SetCompositionFontW(HIMC hIMC,LOGFONTW *plf) = 0;
    virtual HRESULT WINAPI SetCompositionStringA(HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen) = 0;
    virtual HRESULT WINAPI SetCompositionStringW(HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen) = 0;
    virtual HRESULT WINAPI SetCompositionWindow(HIMC hIMC,COMPOSITIONFORM *pCompForm) = 0;
    virtual HRESULT WINAPI SetConversionStatus(HIMC hIMC,DWORD fdwConversion,DWORD fdwSentence) = 0;
    virtual HRESULT WINAPI SetOpenStatus(HIMC hIMC,WINBOOL fOpen) = 0;
    virtual HRESULT WINAPI SetStatusWindowPos(HIMC hIMC,POINT *pptPos) = 0;
    virtual HRESULT WINAPI SimulateHotKey(HWND hWnd,DWORD dwHotKeyID) = 0;
    virtual HRESULT WINAPI UnregisterWordA(HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szUnregister) = 0;
    virtual HRESULT WINAPI UnregisterWordW(HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szUnregister) = 0;
    virtual HRESULT WINAPI Activate(WINBOOL fRestoreLayout) = 0;
    virtual HRESULT WINAPI Deactivate(void) = 0;
    virtual HRESULT WINAPI OnDefWindowProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult) = 0;
    virtual HRESULT WINAPI FilterClientWindows(ATOM *aaClassList,UINT uSize) = 0;
    virtual HRESULT WINAPI GetCodePageA(HKL hKL,UINT *uCodePage) = 0;
    virtual HRESULT WINAPI GetLangId(HKL hKL,LANGID *plid) = 0;
    virtual HRESULT WINAPI AssociateContextEx(HWND hWnd,HIMC hIMC,DWORD dwFlags) = 0;
    virtual HRESULT WINAPI DisableIME(DWORD idThread) = 0;
    virtual HRESULT WINAPI GetImeMenuItemsA(HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOA *pImeParentMenu,IMEMENUITEMINFOA *pImeMenu,DWORD dwSize,DWORD *pdwResult) = 0;
    virtual HRESULT WINAPI GetImeMenuItemsW(HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOW *pImeParentMenu,IMEMENUITEMINFOW *pImeMenu,DWORD dwSize,DWORD *pdwResult) = 0;
    virtual HRESULT WINAPI EnumInputContext(DWORD idThread,IEnumInputContext **ppEnum) = 0;
  };
#else
  typedef struct IActiveIMMAppVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IActiveIMMApp *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IActiveIMMApp *This);
      ULONG (WINAPI *Release)(IActiveIMMApp *This);
      HRESULT (WINAPI *AssociateContext)(IActiveIMMApp *This,HWND hWnd,HIMC hIME,HIMC *phPrev);
      HRESULT (WINAPI *ConfigureIMEA)(IActiveIMMApp *This,HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDA *pData);
      HRESULT (WINAPI *ConfigureIMEW)(IActiveIMMApp *This,HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDW *pData);
      HRESULT (WINAPI *CreateContext)(IActiveIMMApp *This,HIMC *phIMC);
      HRESULT (WINAPI *DestroyContext)(IActiveIMMApp *This,HIMC hIME);
      HRESULT (WINAPI *EnumRegisterWordA)(IActiveIMMApp *This,HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister,LPVOID pData,IEnumRegisterWordA **pEnum);
      HRESULT (WINAPI *EnumRegisterWordW)(IActiveIMMApp *This,HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister,LPVOID pData,IEnumRegisterWordW **pEnum);
      HRESULT (WINAPI *EscapeA)(IActiveIMMApp *This,HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult);
      HRESULT (WINAPI *EscapeW)(IActiveIMMApp *This,HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult);
      HRESULT (WINAPI *GetCandidateListA)(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied);
      HRESULT (WINAPI *GetCandidateListW)(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied);
      HRESULT (WINAPI *GetCandidateListCountA)(IActiveIMMApp *This,HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen);
      HRESULT (WINAPI *GetCandidateListCountW)(IActiveIMMApp *This,HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen);
      HRESULT (WINAPI *GetCandidateWindow)(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,CANDIDATEFORM *pCandidate);
      HRESULT (WINAPI *GetCompositionFontA)(IActiveIMMApp *This,HIMC hIMC,LOGFONTA *plf);
      HRESULT (WINAPI *GetCompositionFontW)(IActiveIMMApp *This,HIMC hIMC,LOGFONTW *plf);
      HRESULT (WINAPI *GetCompositionStringA)(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf);
      HRESULT (WINAPI *GetCompositionStringW)(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf);
      HRESULT (WINAPI *GetCompositionWindow)(IActiveIMMApp *This,HIMC hIMC,COMPOSITIONFORM *pCompForm);
      HRESULT (WINAPI *GetContext)(IActiveIMMApp *This,HWND hWnd,HIMC *phIMC);
      HRESULT (WINAPI *GetConversionListA)(IActiveIMMApp *This,HKL hKL,HIMC hIMC,LPSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied);
      HRESULT (WINAPI *GetConversionListW)(IActiveIMMApp *This,HKL hKL,HIMC hIMC,LPWSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied);
      HRESULT (WINAPI *GetConversionStatus)(IActiveIMMApp *This,HIMC hIMC,DWORD *pfdwConversion,DWORD *pfdwSentence);
      HRESULT (WINAPI *GetDefaultIMEWnd)(IActiveIMMApp *This,HWND hWnd,HWND *phDefWnd);
      HRESULT (WINAPI *GetDescriptionA)(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPSTR szDescription,UINT *puCopied);
      HRESULT (WINAPI *GetDescriptionW)(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPWSTR szDescription,UINT *puCopied);
      HRESULT (WINAPI *GetGuideLineA)(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPSTR pBuf,DWORD *pdwResult);
      HRESULT (WINAPI *GetGuideLineW)(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPWSTR pBuf,DWORD *pdwResult);
      HRESULT (WINAPI *GetIMEFileNameA)(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPSTR szFileName,UINT *puCopied);
      HRESULT (WINAPI *GetIMEFileNameW)(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPWSTR szFileName,UINT *puCopied);
      HRESULT (WINAPI *GetOpenStatus)(IActiveIMMApp *This,HIMC hIMC);
      HRESULT (WINAPI *GetProperty)(IActiveIMMApp *This,HKL hKL,DWORD fdwIndex,DWORD *pdwProperty);
      HRESULT (WINAPI *GetRegisterWordStyleA)(IActiveIMMApp *This,HKL hKL,UINT nItem,STYLEBUFA *pStyleBuf,UINT *puCopied);
      HRESULT (WINAPI *GetRegisterWordStyleW)(IActiveIMMApp *This,HKL hKL,UINT nItem,STYLEBUFW *pStyleBuf,UINT *puCopied);
      HRESULT (WINAPI *GetStatusWindowPos)(IActiveIMMApp *This,HIMC hIMC,POINT *pptPos);
      HRESULT (WINAPI *GetVirtualKey)(IActiveIMMApp *This,HWND hWnd,UINT *puVirtualKey);
      HRESULT (WINAPI *InstallIMEA)(IActiveIMMApp *This,LPSTR szIMEFileName,LPSTR szLayoutText,HKL *phKL);
      HRESULT (WINAPI *InstallIMEW)(IActiveIMMApp *This,LPWSTR szIMEFileName,LPWSTR szLayoutText,HKL *phKL);
      HRESULT (WINAPI *IsIME)(IActiveIMMApp *This,HKL hKL);
      HRESULT (WINAPI *IsUIMessageA)(IActiveIMMApp *This,HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam);
      HRESULT (WINAPI *IsUIMessageW)(IActiveIMMApp *This,HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam);
      HRESULT (WINAPI *NotifyIME)(IActiveIMMApp *This,HIMC hIMC,DWORD dwAction,DWORD dwIndex,DWORD dwValue);
      HRESULT (WINAPI *RegisterWordA)(IActiveIMMApp *This,HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister);
      HRESULT (WINAPI *RegisterWordW)(IActiveIMMApp *This,HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister);
      HRESULT (WINAPI *ReleaseContext)(IActiveIMMApp *This,HWND hWnd,HIMC hIMC);
      HRESULT (WINAPI *SetCandidateWindow)(IActiveIMMApp *This,HIMC hIMC,CANDIDATEFORM *pCandidate);
      HRESULT (WINAPI *SetCompositionFontA)(IActiveIMMApp *This,HIMC hIMC,LOGFONTA *plf);
      HRESULT (WINAPI *SetCompositionFontW)(IActiveIMMApp *This,HIMC hIMC,LOGFONTW *plf);
      HRESULT (WINAPI *SetCompositionStringA)(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen);
      HRESULT (WINAPI *SetCompositionStringW)(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen);
      HRESULT (WINAPI *SetCompositionWindow)(IActiveIMMApp *This,HIMC hIMC,COMPOSITIONFORM *pCompForm);
      HRESULT (WINAPI *SetConversionStatus)(IActiveIMMApp *This,HIMC hIMC,DWORD fdwConversion,DWORD fdwSentence);
      HRESULT (WINAPI *SetOpenStatus)(IActiveIMMApp *This,HIMC hIMC,WINBOOL fOpen);
      HRESULT (WINAPI *SetStatusWindowPos)(IActiveIMMApp *This,HIMC hIMC,POINT *pptPos);
      HRESULT (WINAPI *SimulateHotKey)(IActiveIMMApp *This,HWND hWnd,DWORD dwHotKeyID);
      HRESULT (WINAPI *UnregisterWordA)(IActiveIMMApp *This,HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szUnregister);
      HRESULT (WINAPI *UnregisterWordW)(IActiveIMMApp *This,HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szUnregister);
      HRESULT (WINAPI *Activate)(IActiveIMMApp *This,WINBOOL fRestoreLayout);
      HRESULT (WINAPI *Deactivate)(IActiveIMMApp *This);
      HRESULT (WINAPI *OnDefWindowProc)(IActiveIMMApp *This,HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult);
      HRESULT (WINAPI *FilterClientWindows)(IActiveIMMApp *This,ATOM *aaClassList,UINT uSize);
      HRESULT (WINAPI *GetCodePageA)(IActiveIMMApp *This,HKL hKL,UINT *uCodePage);
      HRESULT (WINAPI *GetLangId)(IActiveIMMApp *This,HKL hKL,LANGID *plid);
      HRESULT (WINAPI *AssociateContextEx)(IActiveIMMApp *This,HWND hWnd,HIMC hIMC,DWORD dwFlags);
      HRESULT (WINAPI *DisableIME)(IActiveIMMApp *This,DWORD idThread);
      HRESULT (WINAPI *GetImeMenuItemsA)(IActiveIMMApp *This,HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOA *pImeParentMenu,IMEMENUITEMINFOA *pImeMenu,DWORD dwSize,DWORD *pdwResult);
      HRESULT (WINAPI *GetImeMenuItemsW)(IActiveIMMApp *This,HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOW *pImeParentMenu,IMEMENUITEMINFOW *pImeMenu,DWORD dwSize,DWORD *pdwResult);
      HRESULT (WINAPI *EnumInputContext)(IActiveIMMApp *This,DWORD idThread,IEnumInputContext **ppEnum);
    END_INTERFACE
  } IActiveIMMAppVtbl;
  interface IActiveIMMApp {
    CONST_VTBL struct IActiveIMMAppVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IActiveIMMApp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IActiveIMMApp_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IActiveIMMApp_Release(This) (This)->lpVtbl->Release(This)
#define IActiveIMMApp_AssociateContext(This,hWnd,hIME,phPrev) (This)->lpVtbl->AssociateContext(This,hWnd,hIME,phPrev)
#define IActiveIMMApp_ConfigureIMEA(This,hKL,hWnd,dwMode,pData) (This)->lpVtbl->ConfigureIMEA(This,hKL,hWnd,dwMode,pData)
#define IActiveIMMApp_ConfigureIMEW(This,hKL,hWnd,dwMode,pData) (This)->lpVtbl->ConfigureIMEW(This,hKL,hWnd,dwMode,pData)
#define IActiveIMMApp_CreateContext(This,phIMC) (This)->lpVtbl->CreateContext(This,phIMC)
#define IActiveIMMApp_DestroyContext(This,hIME) (This)->lpVtbl->DestroyContext(This,hIME)
#define IActiveIMMApp_EnumRegisterWordA(This,hKL,szReading,dwStyle,szRegister,pData,pEnum) (This)->lpVtbl->EnumRegisterWordA(This,hKL,szReading,dwStyle,szRegister,pData,pEnum)
#define IActiveIMMApp_EnumRegisterWordW(This,hKL,szReading,dwStyle,szRegister,pData,pEnum) (This)->lpVtbl->EnumRegisterWordW(This,hKL,szReading,dwStyle,szRegister,pData,pEnum)
#define IActiveIMMApp_EscapeA(This,hKL,hIMC,uEscape,pData,plResult) (This)->lpVtbl->EscapeA(This,hKL,hIMC,uEscape,pData,plResult)
#define IActiveIMMApp_EscapeW(This,hKL,hIMC,uEscape,pData,plResult) (This)->lpVtbl->EscapeW(This,hKL,hIMC,uEscape,pData,plResult)
#define IActiveIMMApp_GetCandidateListA(This,hIMC,dwIndex,uBufLen,pCandList,puCopied) (This)->lpVtbl->GetCandidateListA(This,hIMC,dwIndex,uBufLen,pCandList,puCopied)
#define IActiveIMMApp_GetCandidateListW(This,hIMC,dwIndex,uBufLen,pCandList,puCopied) (This)->lpVtbl->GetCandidateListW(This,hIMC,dwIndex,uBufLen,pCandList,puCopied)
#define IActiveIMMApp_GetCandidateListCountA(This,hIMC,pdwListSize,pdwBufLen) (This)->lpVtbl->GetCandidateListCountA(This,hIMC,pdwListSize,pdwBufLen)
#define IActiveIMMApp_GetCandidateListCountW(This,hIMC,pdwListSize,pdwBufLen) (This)->lpVtbl->GetCandidateListCountW(This,hIMC,pdwListSize,pdwBufLen)
#define IActiveIMMApp_GetCandidateWindow(This,hIMC,dwIndex,pCandidate) (This)->lpVtbl->GetCandidateWindow(This,hIMC,dwIndex,pCandidate)
#define IActiveIMMApp_GetCompositionFontA(This,hIMC,plf) (This)->lpVtbl->GetCompositionFontA(This,hIMC,plf)
#define IActiveIMMApp_GetCompositionFontW(This,hIMC,plf) (This)->lpVtbl->GetCompositionFontW(This,hIMC,plf)
#define IActiveIMMApp_GetCompositionStringA(This,hIMC,dwIndex,dwBufLen,plCopied,pBuf) (This)->lpVtbl->GetCompositionStringA(This,hIMC,dwIndex,dwBufLen,plCopied,pBuf)
#define IActiveIMMApp_GetCompositionStringW(This,hIMC,dwIndex,dwBufLen,plCopied,pBuf) (This)->lpVtbl->GetCompositionStringW(This,hIMC,dwIndex,dwBufLen,plCopied,pBuf)
#define IActiveIMMApp_GetCompositionWindow(This,hIMC,pCompForm) (This)->lpVtbl->GetCompositionWindow(This,hIMC,pCompForm)
#define IActiveIMMApp_GetContext(This,hWnd,phIMC) (This)->lpVtbl->GetContext(This,hWnd,phIMC)
#define IActiveIMMApp_GetConversionListA(This,hKL,hIMC,pSrc,uBufLen,uFlag,pDst,puCopied) (This)->lpVtbl->GetConversionListA(This,hKL,hIMC,pSrc,uBufLen,uFlag,pDst,puCopied)
#define IActiveIMMApp_GetConversionListW(This,hKL,hIMC,pSrc,uBufLen,uFlag,pDst,puCopied) (This)->lpVtbl->GetConversionListW(This,hKL,hIMC,pSrc,uBufLen,uFlag,pDst,puCopied)
#define IActiveIMMApp_GetConversionStatus(This,hIMC,pfdwConversion,pfdwSentence) (This)->lpVtbl->GetConversionStatus(This,hIMC,pfdwConversion,pfdwSentence)
#define IActiveIMMApp_GetDefaultIMEWnd(This,hWnd,phDefWnd) (This)->lpVtbl->GetDefaultIMEWnd(This,hWnd,phDefWnd)
#define IActiveIMMApp_GetDescriptionA(This,hKL,uBufLen,szDescription,puCopied) (This)->lpVtbl->GetDescriptionA(This,hKL,uBufLen,szDescription,puCopied)
#define IActiveIMMApp_GetDescriptionW(This,hKL,uBufLen,szDescription,puCopied) (This)->lpVtbl->GetDescriptionW(This,hKL,uBufLen,szDescription,puCopied)
#define IActiveIMMApp_GetGuideLineA(This,hIMC,dwIndex,dwBufLen,pBuf,pdwResult) (This)->lpVtbl->GetGuideLineA(This,hIMC,dwIndex,dwBufLen,pBuf,pdwResult)
#define IActiveIMMApp_GetGuideLineW(This,hIMC,dwIndex,dwBufLen,pBuf,pdwResult) (This)->lpVtbl->GetGuideLineW(This,hIMC,dwIndex,dwBufLen,pBuf,pdwResult)
#define IActiveIMMApp_GetIMEFileNameA(This,hKL,uBufLen,szFileName,puCopied) (This)->lpVtbl->GetIMEFileNameA(This,hKL,uBufLen,szFileName,puCopied)
#define IActiveIMMApp_GetIMEFileNameW(This,hKL,uBufLen,szFileName,puCopied) (This)->lpVtbl->GetIMEFileNameW(This,hKL,uBufLen,szFileName,puCopied)
#define IActiveIMMApp_GetOpenStatus(This,hIMC) (This)->lpVtbl->GetOpenStatus(This,hIMC)
#define IActiveIMMApp_GetProperty(This,hKL,fdwIndex,pdwProperty) (This)->lpVtbl->GetProperty(This,hKL,fdwIndex,pdwProperty)
#define IActiveIMMApp_GetRegisterWordStyleA(This,hKL,nItem,pStyleBuf,puCopied) (This)->lpVtbl->GetRegisterWordStyleA(This,hKL,nItem,pStyleBuf,puCopied)
#define IActiveIMMApp_GetRegisterWordStyleW(This,hKL,nItem,pStyleBuf,puCopied) (This)->lpVtbl->GetRegisterWordStyleW(This,hKL,nItem,pStyleBuf,puCopied)
#define IActiveIMMApp_GetStatusWindowPos(This,hIMC,pptPos) (This)->lpVtbl->GetStatusWindowPos(This,hIMC,pptPos)
#define IActiveIMMApp_GetVirtualKey(This,hWnd,puVirtualKey) (This)->lpVtbl->GetVirtualKey(This,hWnd,puVirtualKey)
#define IActiveIMMApp_InstallIMEA(This,szIMEFileName,szLayoutText,phKL) (This)->lpVtbl->InstallIMEA(This,szIMEFileName,szLayoutText,phKL)
#define IActiveIMMApp_InstallIMEW(This,szIMEFileName,szLayoutText,phKL) (This)->lpVtbl->InstallIMEW(This,szIMEFileName,szLayoutText,phKL)
#define IActiveIMMApp_IsIME(This,hKL) (This)->lpVtbl->IsIME(This,hKL)
#define IActiveIMMApp_IsUIMessageA(This,hWndIME,msg,wParam,lParam) (This)->lpVtbl->IsUIMessageA(This,hWndIME,msg,wParam,lParam)
#define IActiveIMMApp_IsUIMessageW(This,hWndIME,msg,wParam,lParam) (This)->lpVtbl->IsUIMessageW(This,hWndIME,msg,wParam,lParam)
#define IActiveIMMApp_NotifyIME(This,hIMC,dwAction,dwIndex,dwValue) (This)->lpVtbl->NotifyIME(This,hIMC,dwAction,dwIndex,dwValue)
#define IActiveIMMApp_RegisterWordA(This,hKL,szReading,dwStyle,szRegister) (This)->lpVtbl->RegisterWordA(This,hKL,szReading,dwStyle,szRegister)
#define IActiveIMMApp_RegisterWordW(This,hKL,szReading,dwStyle,szRegister) (This)->lpVtbl->RegisterWordW(This,hKL,szReading,dwStyle,szRegister)
#define IActiveIMMApp_ReleaseContext(This,hWnd,hIMC) (This)->lpVtbl->ReleaseContext(This,hWnd,hIMC)
#define IActiveIMMApp_SetCandidateWindow(This,hIMC,pCandidate) (This)->lpVtbl->SetCandidateWindow(This,hIMC,pCandidate)
#define IActiveIMMApp_SetCompositionFontA(This,hIMC,plf) (This)->lpVtbl->SetCompositionFontA(This,hIMC,plf)
#define IActiveIMMApp_SetCompositionFontW(This,hIMC,plf) (This)->lpVtbl->SetCompositionFontW(This,hIMC,plf)
#define IActiveIMMApp_SetCompositionStringA(This,hIMC,dwIndex,pComp,dwCompLen,pRead,dwReadLen) (This)->lpVtbl->SetCompositionStringA(This,hIMC,dwIndex,pComp,dwCompLen,pRead,dwReadLen)
#define IActiveIMMApp_SetCompositionStringW(This,hIMC,dwIndex,pComp,dwCompLen,pRead,dwReadLen) (This)->lpVtbl->SetCompositionStringW(This,hIMC,dwIndex,pComp,dwCompLen,pRead,dwReadLen)
#define IActiveIMMApp_SetCompositionWindow(This,hIMC,pCompForm) (This)->lpVtbl->SetCompositionWindow(This,hIMC,pCompForm)
#define IActiveIMMApp_SetConversionStatus(This,hIMC,fdwConversion,fdwSentence) (This)->lpVtbl->SetConversionStatus(This,hIMC,fdwConversion,fdwSentence)
#define IActiveIMMApp_SetOpenStatus(This,hIMC,fOpen) (This)->lpVtbl->SetOpenStatus(This,hIMC,fOpen)
#define IActiveIMMApp_SetStatusWindowPos(This,hIMC,pptPos) (This)->lpVtbl->SetStatusWindowPos(This,hIMC,pptPos)
#define IActiveIMMApp_SimulateHotKey(This,hWnd,dwHotKeyID) (This)->lpVtbl->SimulateHotKey(This,hWnd,dwHotKeyID)
#define IActiveIMMApp_UnregisterWordA(This,hKL,szReading,dwStyle,szUnregister) (This)->lpVtbl->UnregisterWordA(This,hKL,szReading,dwStyle,szUnregister)
#define IActiveIMMApp_UnregisterWordW(This,hKL,szReading,dwStyle,szUnregister) (This)->lpVtbl->UnregisterWordW(This,hKL,szReading,dwStyle,szUnregister)
#define IActiveIMMApp_Activate(This,fRestoreLayout) (This)->lpVtbl->Activate(This,fRestoreLayout)
#define IActiveIMMApp_Deactivate(This) (This)->lpVtbl->Deactivate(This)
#define IActiveIMMApp_OnDefWindowProc(This,hWnd,Msg,wParam,lParam,plResult) (This)->lpVtbl->OnDefWindowProc(This,hWnd,Msg,wParam,lParam,plResult)
#define IActiveIMMApp_FilterClientWindows(This,aaClassList,uSize) (This)->lpVtbl->FilterClientWindows(This,aaClassList,uSize)
#define IActiveIMMApp_GetCodePageA(This,hKL,uCodePage) (This)->lpVtbl->GetCodePageA(This,hKL,uCodePage)
#define IActiveIMMApp_GetLangId(This,hKL,plid) (This)->lpVtbl->GetLangId(This,hKL,plid)
#define IActiveIMMApp_AssociateContextEx(This,hWnd,hIMC,dwFlags) (This)->lpVtbl->AssociateContextEx(This,hWnd,hIMC,dwFlags)
#define IActiveIMMApp_DisableIME(This,idThread) (This)->lpVtbl->DisableIME(This,idThread)
#define IActiveIMMApp_GetImeMenuItemsA(This,hIMC,dwFlags,dwType,pImeParentMenu,pImeMenu,dwSize,pdwResult) (This)->lpVtbl->GetImeMenuItemsA(This,hIMC,dwFlags,dwType,pImeParentMenu,pImeMenu,dwSize,pdwResult)
#define IActiveIMMApp_GetImeMenuItemsW(This,hIMC,dwFlags,dwType,pImeParentMenu,pImeMenu,dwSize,pdwResult) (This)->lpVtbl->GetImeMenuItemsW(This,hIMC,dwFlags,dwType,pImeParentMenu,pImeMenu,dwSize,pdwResult)
#define IActiveIMMApp_EnumInputContext(This,idThread,ppEnum) (This)->lpVtbl->EnumInputContext(This,idThread,ppEnum)
#endif
#endif

  HRESULT WINAPI IActiveIMMApp_AssociateContext_Proxy(IActiveIMMApp *This,HWND hWnd,HIMC hIME,HIMC *phPrev);
  void __RPC_STUB IActiveIMMApp_AssociateContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_ConfigureIMEA_Proxy(IActiveIMMApp *This,HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDA *pData);
  void __RPC_STUB IActiveIMMApp_ConfigureIMEA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_ConfigureIMEW_Proxy(IActiveIMMApp *This,HKL hKL,HWND hWnd,DWORD dwMode,REGISTERWORDW *pData);
  void __RPC_STUB IActiveIMMApp_ConfigureIMEW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_CreateContext_Proxy(IActiveIMMApp *This,HIMC *phIMC);
  void __RPC_STUB IActiveIMMApp_CreateContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_DestroyContext_Proxy(IActiveIMMApp *This,HIMC hIME);
  void __RPC_STUB IActiveIMMApp_DestroyContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EnumRegisterWordA_Proxy(IActiveIMMApp *This,HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister,LPVOID pData,IEnumRegisterWordA **pEnum);
  void __RPC_STUB IActiveIMMApp_EnumRegisterWordA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EnumRegisterWordW_Proxy(IActiveIMMApp *This,HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister,LPVOID pData,IEnumRegisterWordW **pEnum);
  void __RPC_STUB IActiveIMMApp_EnumRegisterWordW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EscapeA_Proxy(IActiveIMMApp *This,HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult);
  void __RPC_STUB IActiveIMMApp_EscapeA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EscapeW_Proxy(IActiveIMMApp *This,HKL hKL,HIMC hIMC,UINT uEscape,LPVOID pData,LRESULT *plResult);
  void __RPC_STUB IActiveIMMApp_EscapeW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateListA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetCandidateListA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateListW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,UINT uBufLen,CANDIDATELIST *pCandList,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetCandidateListW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateListCountA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen);
  void __RPC_STUB IActiveIMMApp_GetCandidateListCountA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateListCountW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD *pdwListSize,DWORD *pdwBufLen);
  void __RPC_STUB IActiveIMMApp_GetCandidateListCountW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCandidateWindow_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,CANDIDATEFORM *pCandidate);
  void __RPC_STUB IActiveIMMApp_GetCandidateWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionFontA_Proxy(IActiveIMMApp *This,HIMC hIMC,LOGFONTA *plf);
  void __RPC_STUB IActiveIMMApp_GetCompositionFontA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionFontW_Proxy(IActiveIMMApp *This,HIMC hIMC,LOGFONTW *plf);
  void __RPC_STUB IActiveIMMApp_GetCompositionFontW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionStringA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf);
  void __RPC_STUB IActiveIMMApp_GetCompositionStringA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionStringW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LONG *plCopied,LPVOID pBuf);
  void __RPC_STUB IActiveIMMApp_GetCompositionStringW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCompositionWindow_Proxy(IActiveIMMApp *This,HIMC hIMC,COMPOSITIONFORM *pCompForm);
  void __RPC_STUB IActiveIMMApp_GetCompositionWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetContext_Proxy(IActiveIMMApp *This,HWND hWnd,HIMC *phIMC);
  void __RPC_STUB IActiveIMMApp_GetContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetConversionListA_Proxy(IActiveIMMApp *This,HKL hKL,HIMC hIMC,LPSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetConversionListA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetConversionListW_Proxy(IActiveIMMApp *This,HKL hKL,HIMC hIMC,LPWSTR pSrc,UINT uBufLen,UINT uFlag,CANDIDATELIST *pDst,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetConversionListW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetConversionStatus_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD *pfdwConversion,DWORD *pfdwSentence);
  void __RPC_STUB IActiveIMMApp_GetConversionStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetDefaultIMEWnd_Proxy(IActiveIMMApp *This,HWND hWnd,HWND *phDefWnd);
  void __RPC_STUB IActiveIMMApp_GetDefaultIMEWnd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetDescriptionA_Proxy(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPSTR szDescription,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetDescriptionA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetDescriptionW_Proxy(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPWSTR szDescription,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetDescriptionW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetGuideLineA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPSTR pBuf,DWORD *pdwResult);
  void __RPC_STUB IActiveIMMApp_GetGuideLineA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetGuideLineW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,DWORD dwBufLen,LPWSTR pBuf,DWORD *pdwResult);
  void __RPC_STUB IActiveIMMApp_GetGuideLineW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetIMEFileNameA_Proxy(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPSTR szFileName,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetIMEFileNameA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetIMEFileNameW_Proxy(IActiveIMMApp *This,HKL hKL,UINT uBufLen,LPWSTR szFileName,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetIMEFileNameW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetOpenStatus_Proxy(IActiveIMMApp *This,HIMC hIMC);
  void __RPC_STUB IActiveIMMApp_GetOpenStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetProperty_Proxy(IActiveIMMApp *This,HKL hKL,DWORD fdwIndex,DWORD *pdwProperty);
  void __RPC_STUB IActiveIMMApp_GetProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetRegisterWordStyleA_Proxy(IActiveIMMApp *This,HKL hKL,UINT nItem,STYLEBUFA *pStyleBuf,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetRegisterWordStyleA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetRegisterWordStyleW_Proxy(IActiveIMMApp *This,HKL hKL,UINT nItem,STYLEBUFW *pStyleBuf,UINT *puCopied);
  void __RPC_STUB IActiveIMMApp_GetRegisterWordStyleW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetStatusWindowPos_Proxy(IActiveIMMApp *This,HIMC hIMC,POINT *pptPos);
  void __RPC_STUB IActiveIMMApp_GetStatusWindowPos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetVirtualKey_Proxy(IActiveIMMApp *This,HWND hWnd,UINT *puVirtualKey);
  void __RPC_STUB IActiveIMMApp_GetVirtualKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_InstallIMEA_Proxy(IActiveIMMApp *This,LPSTR szIMEFileName,LPSTR szLayoutText,HKL *phKL);
  void __RPC_STUB IActiveIMMApp_InstallIMEA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_InstallIMEW_Proxy(IActiveIMMApp *This,LPWSTR szIMEFileName,LPWSTR szLayoutText,HKL *phKL);
  void __RPC_STUB IActiveIMMApp_InstallIMEW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_IsIME_Proxy(IActiveIMMApp *This,HKL hKL);
  void __RPC_STUB IActiveIMMApp_IsIME_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_IsUIMessageA_Proxy(IActiveIMMApp *This,HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam);
  void __RPC_STUB IActiveIMMApp_IsUIMessageA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_IsUIMessageW_Proxy(IActiveIMMApp *This,HWND hWndIME,UINT msg,WPARAM wParam,LPARAM lParam);
  void __RPC_STUB IActiveIMMApp_IsUIMessageW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_NotifyIME_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwAction,DWORD dwIndex,DWORD dwValue);
  void __RPC_STUB IActiveIMMApp_NotifyIME_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_RegisterWordA_Proxy(IActiveIMMApp *This,HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szRegister);
  void __RPC_STUB IActiveIMMApp_RegisterWordA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_RegisterWordW_Proxy(IActiveIMMApp *This,HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szRegister);
  void __RPC_STUB IActiveIMMApp_RegisterWordW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_ReleaseContext_Proxy(IActiveIMMApp *This,HWND hWnd,HIMC hIMC);
  void __RPC_STUB IActiveIMMApp_ReleaseContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCandidateWindow_Proxy(IActiveIMMApp *This,HIMC hIMC,CANDIDATEFORM *pCandidate);
  void __RPC_STUB IActiveIMMApp_SetCandidateWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionFontA_Proxy(IActiveIMMApp *This,HIMC hIMC,LOGFONTA *plf);
  void __RPC_STUB IActiveIMMApp_SetCompositionFontA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionFontW_Proxy(IActiveIMMApp *This,HIMC hIMC,LOGFONTW *plf);
  void __RPC_STUB IActiveIMMApp_SetCompositionFontW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionStringA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen);
  void __RPC_STUB IActiveIMMApp_SetCompositionStringA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionStringW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwIndex,LPVOID pComp,DWORD dwCompLen,LPVOID pRead,DWORD dwReadLen);
  void __RPC_STUB IActiveIMMApp_SetCompositionStringW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetCompositionWindow_Proxy(IActiveIMMApp *This,HIMC hIMC,COMPOSITIONFORM *pCompForm);
  void __RPC_STUB IActiveIMMApp_SetCompositionWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetConversionStatus_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD fdwConversion,DWORD fdwSentence);
  void __RPC_STUB IActiveIMMApp_SetConversionStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetOpenStatus_Proxy(IActiveIMMApp *This,HIMC hIMC,WINBOOL fOpen);
  void __RPC_STUB IActiveIMMApp_SetOpenStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SetStatusWindowPos_Proxy(IActiveIMMApp *This,HIMC hIMC,POINT *pptPos);
  void __RPC_STUB IActiveIMMApp_SetStatusWindowPos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_SimulateHotKey_Proxy(IActiveIMMApp *This,HWND hWnd,DWORD dwHotKeyID);
  void __RPC_STUB IActiveIMMApp_SimulateHotKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_UnregisterWordA_Proxy(IActiveIMMApp *This,HKL hKL,LPSTR szReading,DWORD dwStyle,LPSTR szUnregister);
  void __RPC_STUB IActiveIMMApp_UnregisterWordA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_UnregisterWordW_Proxy(IActiveIMMApp *This,HKL hKL,LPWSTR szReading,DWORD dwStyle,LPWSTR szUnregister);
  void __RPC_STUB IActiveIMMApp_UnregisterWordW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_Activate_Proxy(IActiveIMMApp *This,WINBOOL fRestoreLayout);
  void __RPC_STUB IActiveIMMApp_Activate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_Deactivate_Proxy(IActiveIMMApp *This);
  void __RPC_STUB IActiveIMMApp_Deactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_OnDefWindowProc_Proxy(IActiveIMMApp *This,HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult);
  void __RPC_STUB IActiveIMMApp_OnDefWindowProc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_FilterClientWindows_Proxy(IActiveIMMApp *This,ATOM *aaClassList,UINT uSize);
  void __RPC_STUB IActiveIMMApp_FilterClientWindows_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetCodePageA_Proxy(IActiveIMMApp *This,HKL hKL,UINT *uCodePage);
  void __RPC_STUB IActiveIMMApp_GetCodePageA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetLangId_Proxy(IActiveIMMApp *This,HKL hKL,LANGID *plid);
  void __RPC_STUB IActiveIMMApp_GetLangId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_AssociateContextEx_Proxy(IActiveIMMApp *This,HWND hWnd,HIMC hIMC,DWORD dwFlags);
  void __RPC_STUB IActiveIMMApp_AssociateContextEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_DisableIME_Proxy(IActiveIMMApp *This,DWORD idThread);
  void __RPC_STUB IActiveIMMApp_DisableIME_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetImeMenuItemsA_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOA *pImeParentMenu,IMEMENUITEMINFOA *pImeMenu,DWORD dwSize,DWORD *pdwResult);
  void __RPC_STUB IActiveIMMApp_GetImeMenuItemsA_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_GetImeMenuItemsW_Proxy(IActiveIMMApp *This,HIMC hIMC,DWORD dwFlags,DWORD dwType,IMEMENUITEMINFOW *pImeParentMenu,IMEMENUITEMINFOW *pImeMenu,DWORD dwSize,DWORD *pdwResult);
  void __RPC_STUB IActiveIMMApp_GetImeMenuItemsW_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IActiveIMMApp_EnumInputContext_Proxy(IActiveIMMApp *This,DWORD idThread,IEnumInputContext **ppEnum);
  void __RPC_STUB IActiveIMMApp_EnumInputContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISegmentList_INTERFACE_DEFINED__
#define __ISegmentList_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISegmentList;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ISegmentList : public IUnknown {
  public:
    virtual HRESULT WINAPI CreateIterator(ISegmentListIterator **ppIIter) = 0;
    virtual HRESULT WINAPI GetType(SELECTION_TYPE *peType) = 0;
    virtual HRESULT WINAPI IsEmpty(WINBOOL *pfEmpty) = 0;
  };
#else
  typedef struct ISegmentListVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ISegmentList *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ISegmentList *This);
      ULONG (WINAPI *Release)(ISegmentList *This);
      HRESULT (WINAPI *CreateIterator)(ISegmentList *This,ISegmentListIterator **ppIIter);
      HRESULT (WINAPI *GetType)(ISegmentList *This,SELECTION_TYPE *peType);
      HRESULT (WINAPI *IsEmpty)(ISegmentList *This,WINBOOL *pfEmpty);
    END_INTERFACE
  } ISegmentListVtbl;
  interface ISegmentList {
    CONST_VTBL struct ISegmentListVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ISegmentList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISegmentList_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISegmentList_Release(This) (This)->lpVtbl->Release(This)
#define ISegmentList_CreateIterator(This,ppIIter) (This)->lpVtbl->CreateIterator(This,ppIIter)
#define ISegmentList_GetType(This,peType) (This)->lpVtbl->GetType(This,peType)
#define ISegmentList_IsEmpty(This,pfEmpty) (This)->lpVtbl->IsEmpty(This,pfEmpty)
#endif
#endif

  HRESULT WINAPI ISegmentList_CreateIterator_Proxy(ISegmentList *This,ISegmentListIterator **ppIIter);
  void __RPC_STUB ISegmentList_CreateIterator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentList_GetType_Proxy(ISegmentList *This,SELECTION_TYPE *peType);
  void __RPC_STUB ISegmentList_GetType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentList_IsEmpty_Proxy(ISegmentList *This,WINBOOL *pfEmpty);
  void __RPC_STUB ISegmentList_IsEmpty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISegmentListIterator_INTERFACE_DEFINED__
#define __ISegmentListIterator_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISegmentListIterator;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ISegmentListIterator : public IUnknown {
  public:
    virtual HRESULT WINAPI Current(ISegment **ppISegment) = 0;
    virtual HRESULT WINAPI First(void) = 0;
    virtual HRESULT WINAPI IsDone(void) = 0;
    virtual HRESULT WINAPI Advance(void) = 0;
  };
#else
  typedef struct ISegmentListIteratorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ISegmentListIterator *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ISegmentListIterator *This);
      ULONG (WINAPI *Release)(ISegmentListIterator *This);
      HRESULT (WINAPI *Current)(ISegmentListIterator *This,ISegment **ppISegment);
      HRESULT (WINAPI *First)(ISegmentListIterator *This);
      HRESULT (WINAPI *IsDone)(ISegmentListIterator *This);
      HRESULT (WINAPI *Advance)(ISegmentListIterator *This);
    END_INTERFACE
  } ISegmentListIteratorVtbl;
  interface ISegmentListIterator {
    CONST_VTBL struct ISegmentListIteratorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ISegmentListIterator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISegmentListIterator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISegmentListIterator_Release(This) (This)->lpVtbl->Release(This)
#define ISegmentListIterator_Current(This,ppISegment) (This)->lpVtbl->Current(This,ppISegment)
#define ISegmentListIterator_First(This) (This)->lpVtbl->First(This)
#define ISegmentListIterator_IsDone(This) (This)->lpVtbl->IsDone(This)
#define ISegmentListIterator_Advance(This) (This)->lpVtbl->Advance(This)
#endif
#endif

  HRESULT WINAPI ISegmentListIterator_Current_Proxy(ISegmentListIterator *This,ISegment **ppISegment);
  void __RPC_STUB ISegmentListIterator_Current_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentListIterator_First_Proxy(ISegmentListIterator *This);
  void __RPC_STUB ISegmentListIterator_First_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentListIterator_IsDone_Proxy(ISegmentListIterator *This);
  void __RPC_STUB ISegmentListIterator_IsDone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISegmentListIterator_Advance_Proxy(ISegmentListIterator *This);
  void __RPC_STUB ISegmentListIterator_Advance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLCaret_INTERFACE_DEFINED__
#define __IHTMLCaret_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLCaret;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLCaret : public IUnknown {
  public:
    virtual HRESULT WINAPI MoveCaretToPointer(IDisplayPointer *pDispPointer,WINBOOL fScrollIntoView,CARET_DIRECTION eDir) = 0;
    virtual HRESULT WINAPI MoveCaretToPointerEx(IDisplayPointer *pDispPointer,WINBOOL fVisible,WINBOOL fScrollIntoView,CARET_DIRECTION eDir) = 0;
    virtual HRESULT WINAPI MoveMarkupPointerToCaret(IMarkupPointer *pIMarkupPointer) = 0;
    virtual HRESULT WINAPI MoveDisplayPointerToCaret(IDisplayPointer *pDispPointer) = 0;
    virtual HRESULT WINAPI IsVisible(WINBOOL *pIsVisible) = 0;
    virtual HRESULT WINAPI Show(WINBOOL fScrollIntoView) = 0;
    virtual HRESULT WINAPI Hide(void) = 0;
    virtual HRESULT WINAPI InsertText(OLECHAR *pText,LONG lLen) = 0;
    virtual HRESULT WINAPI ScrollIntoView(void) = 0;
    virtual HRESULT WINAPI GetLocation(POINT *pPoint,WINBOOL fTranslate) = 0;
    virtual HRESULT WINAPI GetCaretDirection(CARET_DIRECTION *peDir) = 0;
    virtual HRESULT WINAPI SetCaretDirection(CARET_DIRECTION eDir) = 0;
  };
#else
  typedef struct IHTMLCaretVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLCaret *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLCaret *This);
      ULONG (WINAPI *Release)(IHTMLCaret *This);
      HRESULT (WINAPI *MoveCaretToPointer)(IHTMLCaret *This,IDisplayPointer *pDispPointer,WINBOOL fScrollIntoView,CARET_DIRECTION eDir);
      HRESULT (WINAPI *MoveCaretToPointerEx)(IHTMLCaret *This,IDisplayPointer *pDispPointer,WINBOOL fVisible,WINBOOL fScrollIntoView,CARET_DIRECTION eDir);
      HRESULT (WINAPI *MoveMarkupPointerToCaret)(IHTMLCaret *This,IMarkupPointer *pIMarkupPointer);
      HRESULT (WINAPI *MoveDisplayPointerToCaret)(IHTMLCaret *This,IDisplayPointer *pDispPointer);
      HRESULT (WINAPI *IsVisible)(IHTMLCaret *This,WINBOOL *pIsVisible);
      HRESULT (WINAPI *Show)(IHTMLCaret *This,WINBOOL fScrollIntoView);
      HRESULT (WINAPI *Hide)(IHTMLCaret *This);
      HRESULT (WINAPI *InsertText)(IHTMLCaret *This,OLECHAR *pText,LONG lLen);
      HRESULT (WINAPI *ScrollIntoView)(IHTMLCaret *This);
      HRESULT (WINAPI *GetLocation)(IHTMLCaret *This,POINT *pPoint,WINBOOL fTranslate);
      HRESULT (WINAPI *GetCaretDirection)(IHTMLCaret *This,CARET_DIRECTION *peDir);
      HRESULT (WINAPI *SetCaretDirection)(IHTMLCaret *This,CARET_DIRECTION eDir);
    END_INTERFACE
  } IHTMLCaretVtbl;
  interface IHTMLCaret {
    CONST_VTBL struct IHTMLCaretVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLCaret_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLCaret_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLCaret_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLCaret_MoveCaretToPointer(This,pDispPointer,fScrollIntoView,eDir) (This)->lpVtbl->MoveCaretToPointer(This,pDispPointer,fScrollIntoView,eDir)
#define IHTMLCaret_MoveCaretToPointerEx(This,pDispPointer,fVisible,fScrollIntoView,eDir) (This)->lpVtbl->MoveCaretToPointerEx(This,pDispPointer,fVisible,fScrollIntoView,eDir)
#define IHTMLCaret_MoveMarkupPointerToCaret(This,pIMarkupPointer) (This)->lpVtbl->MoveMarkupPointerToCaret(This,pIMarkupPointer)
#define IHTMLCaret_MoveDisplayPointerToCaret(This,pDispPointer) (This)->lpVtbl->MoveDisplayPointerToCaret(This,pDispPointer)
#define IHTMLCaret_IsVisible(This,pIsVisible) (This)->lpVtbl->IsVisible(This,pIsVisible)
#define IHTMLCaret_Show(This,fScrollIntoView) (This)->lpVtbl->Show(This,fScrollIntoView)
#define IHTMLCaret_Hide(This) (This)->lpVtbl->Hide(This)
#define IHTMLCaret_InsertText(This,pText,lLen) (This)->lpVtbl->InsertText(This,pText,lLen)
#define IHTMLCaret_ScrollIntoView(This) (This)->lpVtbl->ScrollIntoView(This)
#define IHTMLCaret_GetLocation(This,pPoint,fTranslate) (This)->lpVtbl->GetLocation(This,pPoint,fTranslate)
#define IHTMLCaret_GetCaretDirection(This,peDir) (This)->lpVtbl->GetCaretDirection(This,peDir)
#define IHTMLCaret_SetCaretDirection(This,eDir) (This)->lpVtbl->SetCaretDirection(This,eDir)
#endif
#endif

  HRESULT WINAPI IHTMLCaret_MoveCaretToPointer_Proxy(IHTMLCaret *This,IDisplayPointer *pDispPointer,WINBOOL fScrollIntoView,CARET_DIRECTION eDir);
  void __RPC_STUB IHTMLCaret_MoveCaretToPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_MoveCaretToPointerEx_Proxy(IHTMLCaret *This,IDisplayPointer *pDispPointer,WINBOOL fVisible,WINBOOL fScrollIntoView,CARET_DIRECTION eDir);
  void __RPC_STUB IHTMLCaret_MoveCaretToPointerEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_MoveMarkupPointerToCaret_Proxy(IHTMLCaret *This,IMarkupPointer *pIMarkupPointer);
  void __RPC_STUB IHTMLCaret_MoveMarkupPointerToCaret_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_MoveDisplayPointerToCaret_Proxy(IHTMLCaret *This,IDisplayPointer *pDispPointer);
  void __RPC_STUB IHTMLCaret_MoveDisplayPointerToCaret_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_IsVisible_Proxy(IHTMLCaret *This,WINBOOL *pIsVisible);
  void __RPC_STUB IHTMLCaret_IsVisible_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_Show_Proxy(IHTMLCaret *This,WINBOOL fScrollIntoView);
  void __RPC_STUB IHTMLCaret_Show_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_Hide_Proxy(IHTMLCaret *This);
  void __RPC_STUB IHTMLCaret_Hide_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_InsertText_Proxy(IHTMLCaret *This,OLECHAR *pText,LONG lLen);
  void __RPC_STUB IHTMLCaret_InsertText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_ScrollIntoView_Proxy(IHTMLCaret *This);
  void __RPC_STUB IHTMLCaret_ScrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_GetLocation_Proxy(IHTMLCaret *This,POINT *pPoint,WINBOOL fTranslate);
  void __RPC_STUB IHTMLCaret_GetLocation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_GetCaretDirection_Proxy(IHTMLCaret *This,CARET_DIRECTION *peDir);
  void __RPC_STUB IHTMLCaret_GetCaretDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLCaret_SetCaretDirection_Proxy(IHTMLCaret *This,CARET_DIRECTION eDir);
  void __RPC_STUB IHTMLCaret_SetCaretDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISegment_INTERFACE_DEFINED__
#define __ISegment_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISegment;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ISegment : public IUnknown {
  public:
    virtual HRESULT WINAPI GetPointers(IMarkupPointer *pIStart,IMarkupPointer *pIEnd) = 0;
  };
#else
  typedef struct ISegmentVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ISegment *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ISegment *This);
      ULONG (WINAPI *Release)(ISegment *This);
      HRESULT (WINAPI *GetPointers)(ISegment *This,IMarkupPointer *pIStart,IMarkupPointer *pIEnd);
    END_INTERFACE
  } ISegmentVtbl;
  interface ISegment {
    CONST_VTBL struct ISegmentVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ISegment_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISegment_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISegment_Release(This) (This)->lpVtbl->Release(This)
#define ISegment_GetPointers(This,pIStart,pIEnd) (This)->lpVtbl->GetPointers(This,pIStart,pIEnd)
#endif
#endif

  HRESULT WINAPI ISegment_GetPointers_Proxy(ISegment *This,IMarkupPointer *pIStart,IMarkupPointer *pIEnd);
  void __RPC_STUB ISegment_GetPointers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementSegment_INTERFACE_DEFINED__
#define __IElementSegment_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementSegment;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementSegment : public ISegment {
  public:
    virtual HRESULT WINAPI GetElement(IHTMLElement **ppIElement) = 0;
    virtual HRESULT WINAPI SetPrimary(WINBOOL fPrimary) = 0;
    virtual HRESULT WINAPI IsPrimary(WINBOOL *pfPrimary) = 0;
  };
#else
  typedef struct IElementSegmentVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementSegment *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementSegment *This);
      ULONG (WINAPI *Release)(IElementSegment *This);
      HRESULT (WINAPI *GetPointers)(IElementSegment *This,IMarkupPointer *pIStart,IMarkupPointer *pIEnd);
      HRESULT (WINAPI *GetElement)(IElementSegment *This,IHTMLElement **ppIElement);
      HRESULT (WINAPI *SetPrimary)(IElementSegment *This,WINBOOL fPrimary);
      HRESULT (WINAPI *IsPrimary)(IElementSegment *This,WINBOOL *pfPrimary);
    END_INTERFACE
  } IElementSegmentVtbl;
  interface IElementSegment {
    CONST_VTBL struct IElementSegmentVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementSegment_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementSegment_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementSegment_Release(This) (This)->lpVtbl->Release(This)
#define IElementSegment_GetPointers(This,pIStart,pIEnd) (This)->lpVtbl->GetPointers(This,pIStart,pIEnd)
#define IElementSegment_GetElement(This,ppIElement) (This)->lpVtbl->GetElement(This,ppIElement)
#define IElementSegment_SetPrimary(This,fPrimary) (This)->lpVtbl->SetPrimary(This,fPrimary)
#define IElementSegment_IsPrimary(This,pfPrimary) (This)->lpVtbl->IsPrimary(This,pfPrimary)
#endif
#endif

  HRESULT WINAPI IElementSegment_GetElement_Proxy(IElementSegment *This,IHTMLElement **ppIElement);
  void __RPC_STUB IElementSegment_GetElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementSegment_SetPrimary_Proxy(IElementSegment *This,WINBOOL fPrimary);
  void __RPC_STUB IElementSegment_SetPrimary_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementSegment_IsPrimary_Proxy(IElementSegment *This,WINBOOL *pfPrimary);
  void __RPC_STUB IElementSegment_IsPrimary_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHighlightSegment_INTERFACE_DEFINED__
#define __IHighlightSegment_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHighlightSegment;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHighlightSegment : public ISegment {
  };
#else
  typedef struct IHighlightSegmentVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHighlightSegment *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHighlightSegment *This);
      ULONG (WINAPI *Release)(IHighlightSegment *This);
      HRESULT (WINAPI *GetPointers)(IHighlightSegment *This,IMarkupPointer *pIStart,IMarkupPointer *pIEnd);
    END_INTERFACE
  } IHighlightSegmentVtbl;
  interface IHighlightSegment {
    CONST_VTBL struct IHighlightSegmentVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHighlightSegment_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHighlightSegment_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHighlightSegment_Release(This) (This)->lpVtbl->Release(This)
#define IHighlightSegment_GetPointers(This,pIStart,pIEnd) (This)->lpVtbl->GetPointers(This,pIStart,pIEnd)
#endif
#endif
#endif

#ifndef __IHighlightRenderingServices_INTERFACE_DEFINED__
#define __IHighlightRenderingServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHighlightRenderingServices;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHighlightRenderingServices : public IUnknown {
  public:
    virtual HRESULT WINAPI AddSegment(IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd,IHTMLRenderStyle *pIRenderStyle,IHighlightSegment **ppISegment) = 0;
    virtual HRESULT WINAPI MoveSegmentToPointers(IHighlightSegment *pISegment,IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd) = 0;
    virtual HRESULT WINAPI RemoveSegment(IHighlightSegment *pISegment) = 0;
  };
#else
  typedef struct IHighlightRenderingServicesVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHighlightRenderingServices *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHighlightRenderingServices *This);
      ULONG (WINAPI *Release)(IHighlightRenderingServices *This);
      HRESULT (WINAPI *AddSegment)(IHighlightRenderingServices *This,IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd,IHTMLRenderStyle *pIRenderStyle,IHighlightSegment **ppISegment);
      HRESULT (WINAPI *MoveSegmentToPointers)(IHighlightRenderingServices *This,IHighlightSegment *pISegment,IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd);
      HRESULT (WINAPI *RemoveSegment)(IHighlightRenderingServices *This,IHighlightSegment *pISegment);
    END_INTERFACE
  } IHighlightRenderingServicesVtbl;
  interface IHighlightRenderingServices {
    CONST_VTBL struct IHighlightRenderingServicesVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHighlightRenderingServices_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHighlightRenderingServices_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHighlightRenderingServices_Release(This) (This)->lpVtbl->Release(This)
#define IHighlightRenderingServices_AddSegment(This,pDispPointerStart,pDispPointerEnd,pIRenderStyle,ppISegment) (This)->lpVtbl->AddSegment(This,pDispPointerStart,pDispPointerEnd,pIRenderStyle,ppISegment)
#define IHighlightRenderingServices_MoveSegmentToPointers(This,pISegment,pDispPointerStart,pDispPointerEnd) (This)->lpVtbl->MoveSegmentToPointers(This,pISegment,pDispPointerStart,pDispPointerEnd)
#define IHighlightRenderingServices_RemoveSegment(This,pISegment) (This)->lpVtbl->RemoveSegment(This,pISegment)
#endif
#endif

  HRESULT WINAPI IHighlightRenderingServices_AddSegment_Proxy(IHighlightRenderingServices *This,IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd,IHTMLRenderStyle *pIRenderStyle,IHighlightSegment **ppISegment);
  void __RPC_STUB IHighlightRenderingServices_AddSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHighlightRenderingServices_MoveSegmentToPointers_Proxy(IHighlightRenderingServices *This,IHighlightSegment *pISegment,IDisplayPointer *pDispPointerStart,IDisplayPointer *pDispPointerEnd);
  void __RPC_STUB IHighlightRenderingServices_MoveSegmentToPointers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHighlightRenderingServices_RemoveSegment_Proxy(IHighlightRenderingServices *This,IHighlightSegment *pISegment);
  void __RPC_STUB IHighlightRenderingServices_RemoveSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ILineInfo_INTERFACE_DEFINED__
#define __ILineInfo_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ILineInfo;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ILineInfo : public IUnknown {
  public:
    virtual HRESULT WINAPI get_x(long *p) = 0;
    virtual HRESULT WINAPI get_baseLine(long *p) = 0;
    virtual HRESULT WINAPI get_textDescent(long *p) = 0;
    virtual HRESULT WINAPI get_textHeight(long *p) = 0;
    virtual HRESULT WINAPI get_lineDirection(LONG *p) = 0;
  };
#else
  typedef struct ILineInfoVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ILineInfo *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ILineInfo *This);
      ULONG (WINAPI *Release)(ILineInfo *This);
      HRESULT (WINAPI *get_x)(ILineInfo *This,long *p);
      HRESULT (WINAPI *get_baseLine)(ILineInfo *This,long *p);
      HRESULT (WINAPI *get_textDescent)(ILineInfo *This,long *p);
      HRESULT (WINAPI *get_textHeight)(ILineInfo *This,long *p);
      HRESULT (WINAPI *get_lineDirection)(ILineInfo *This,LONG *p);
    END_INTERFACE
  } ILineInfoVtbl;
  interface ILineInfo {
    CONST_VTBL struct ILineInfoVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ILineInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ILineInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ILineInfo_Release(This) (This)->lpVtbl->Release(This)
#define ILineInfo_get_x(This,p) (This)->lpVtbl->get_x(This,p)
#define ILineInfo_get_baseLine(This,p) (This)->lpVtbl->get_baseLine(This,p)
#define ILineInfo_get_textDescent(This,p) (This)->lpVtbl->get_textDescent(This,p)
#define ILineInfo_get_textHeight(This,p) (This)->lpVtbl->get_textHeight(This,p)
#define ILineInfo_get_lineDirection(This,p) (This)->lpVtbl->get_lineDirection(This,p)
#endif
#endif

  HRESULT WINAPI ILineInfo_get_x_Proxy(ILineInfo *This,long *p);
  void __RPC_STUB ILineInfo_get_x_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ILineInfo_get_baseLine_Proxy(ILineInfo *This,long *p);
  void __RPC_STUB ILineInfo_get_baseLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ILineInfo_get_textDescent_Proxy(ILineInfo *This,long *p);
  void __RPC_STUB ILineInfo_get_textDescent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ILineInfo_get_textHeight_Proxy(ILineInfo *This,long *p);
  void __RPC_STUB ILineInfo_get_textHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ILineInfo_get_lineDirection_Proxy(ILineInfo *This,LONG *p);
  void __RPC_STUB ILineInfo_get_lineDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IDisplayPointer_INTERFACE_DEFINED__
#define __IDisplayPointer_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IDisplayPointer;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IDisplayPointer : public IUnknown {
  public:
    virtual HRESULT WINAPI MoveToPoint(POINT ptPoint,COORD_SYSTEM eCoordSystem,IHTMLElement *pElementContext,DWORD dwHitTestOptions,DWORD *pdwHitTestResults) = 0;
    virtual HRESULT WINAPI MoveUnit(DISPLAY_MOVEUNIT eMoveUnit,LONG lXPos) = 0;
    virtual HRESULT WINAPI PositionMarkupPointer(IMarkupPointer *pMarkupPointer) = 0;
    virtual HRESULT WINAPI MoveToPointer(IDisplayPointer *pDispPointer) = 0;
    virtual HRESULT WINAPI SetPointerGravity(POINTER_GRAVITY eGravity) = 0;
    virtual HRESULT WINAPI GetPointerGravity(POINTER_GRAVITY *peGravity) = 0;
    virtual HRESULT WINAPI SetDisplayGravity(DISPLAY_GRAVITY eGravity) = 0;
    virtual HRESULT WINAPI GetDisplayGravity(DISPLAY_GRAVITY *peGravity) = 0;
    virtual HRESULT WINAPI IsPositioned(WINBOOL *pfPositioned) = 0;
    virtual HRESULT WINAPI Unposition(void) = 0;
    virtual HRESULT WINAPI IsEqualTo(IDisplayPointer *pDispPointer,WINBOOL *pfIsEqual) = 0;
    virtual HRESULT WINAPI IsLeftOf(IDisplayPointer *pDispPointer,WINBOOL *pfIsLeftOf) = 0;
    virtual HRESULT WINAPI IsRightOf(IDisplayPointer *pDispPointer,WINBOOL *pfIsRightOf) = 0;
    virtual HRESULT WINAPI IsAtBOL(WINBOOL *pfBOL) = 0;
    virtual HRESULT WINAPI MoveToMarkupPointer(IMarkupPointer *pPointer,IDisplayPointer *pDispLineContext) = 0;
    virtual HRESULT WINAPI ScrollIntoView(void) = 0;
    virtual HRESULT WINAPI GetLineInfo(ILineInfo **ppLineInfo) = 0;
    virtual HRESULT WINAPI GetFlowElement(IHTMLElement **ppLayoutElement) = 0;
    virtual HRESULT WINAPI QueryBreaks(DWORD *pdwBreaks) = 0;
  };
#else
  typedef struct IDisplayPointerVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IDisplayPointer *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IDisplayPointer *This);
      ULONG (WINAPI *Release)(IDisplayPointer *This);
      HRESULT (WINAPI *MoveToPoint)(IDisplayPointer *This,POINT ptPoint,COORD_SYSTEM eCoordSystem,IHTMLElement *pElementContext,DWORD dwHitTestOptions,DWORD *pdwHitTestResults);
      HRESULT (WINAPI *MoveUnit)(IDisplayPointer *This,DISPLAY_MOVEUNIT eMoveUnit,LONG lXPos);
      HRESULT (WINAPI *PositionMarkupPointer)(IDisplayPointer *This,IMarkupPointer *pMarkupPointer);
      HRESULT (WINAPI *MoveToPointer)(IDisplayPointer *This,IDisplayPointer *pDispPointer);
      HRESULT (WINAPI *SetPointerGravity)(IDisplayPointer *This,POINTER_GRAVITY eGravity);
      HRESULT (WINAPI *GetPointerGravity)(IDisplayPointer *This,POINTER_GRAVITY *peGravity);
      HRESULT (WINAPI *SetDisplayGravity)(IDisplayPointer *This,DISPLAY_GRAVITY eGravity);
      HRESULT (WINAPI *GetDisplayGravity)(IDisplayPointer *This,DISPLAY_GRAVITY *peGravity);
      HRESULT (WINAPI *IsPositioned)(IDisplayPointer *This,WINBOOL *pfPositioned);
      HRESULT (WINAPI *Unposition)(IDisplayPointer *This);
      HRESULT (WINAPI *IsEqualTo)(IDisplayPointer *This,IDisplayPointer *pDispPointer,WINBOOL *pfIsEqual);
      HRESULT (WINAPI *IsLeftOf)(IDisplayPointer *This,IDisplayPointer *pDispPointer,WINBOOL *pfIsLeftOf);
      HRESULT (WINAPI *IsRightOf)(IDisplayPointer *This,IDisplayPointer *pDispPointer,WINBOOL *pfIsRightOf);
      HRESULT (WINAPI *IsAtBOL)(IDisplayPointer *This,WINBOOL *pfBOL);
      HRESULT (WINAPI *MoveToMarkupPointer)(IDisplayPointer *This,IMarkupPointer *pPointer,IDisplayPointer *pDispLineContext);
      HRESULT (WINAPI *ScrollIntoView)(IDisplayPointer *This);
      HRESULT (WINAPI *GetLineInfo)(IDisplayPointer *This,ILineInfo **ppLineInfo);
      HRESULT (WINAPI *GetFlowElement)(IDisplayPointer *This,IHTMLElement **ppLayoutElement);
      HRESULT (WINAPI *QueryBreaks)(IDisplayPointer *This,DWORD *pdwBreaks);
    END_INTERFACE
  } IDisplayPointerVtbl;
  interface IDisplayPointer {
    CONST_VTBL struct IDisplayPointerVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IDisplayPointer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDisplayPointer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDisplayPointer_Release(This) (This)->lpVtbl->Release(This)
#define IDisplayPointer_MoveToPoint(This,ptPoint,eCoordSystem,pElementContext,dwHitTestOptions,pdwHitTestResults) (This)->lpVtbl->MoveToPoint(This,ptPoint,eCoordSystem,pElementContext,dwHitTestOptions,pdwHitTestResults)
#define IDisplayPointer_MoveUnit(This,eMoveUnit,lXPos) (This)->lpVtbl->MoveUnit(This,eMoveUnit,lXPos)
#define IDisplayPointer_PositionMarkupPointer(This,pMarkupPointer) (This)->lpVtbl->PositionMarkupPointer(This,pMarkupPointer)
#define IDisplayPointer_MoveToPointer(This,pDispPointer) (This)->lpVtbl->MoveToPointer(This,pDispPointer)
#define IDisplayPointer_SetPointerGravity(This,eGravity) (This)->lpVtbl->SetPointerGravity(This,eGravity)
#define IDisplayPointer_GetPointerGravity(This,peGravity) (This)->lpVtbl->GetPointerGravity(This,peGravity)
#define IDisplayPointer_SetDisplayGravity(This,eGravity) (This)->lpVtbl->SetDisplayGravity(This,eGravity)
#define IDisplayPointer_GetDisplayGravity(This,peGravity) (This)->lpVtbl->GetDisplayGravity(This,peGravity)
#define IDisplayPointer_IsPositioned(This,pfPositioned) (This)->lpVtbl->IsPositioned(This,pfPositioned)
#define IDisplayPointer_Unposition(This) (This)->lpVtbl->Unposition(This)
#define IDisplayPointer_IsEqualTo(This,pDispPointer,pfIsEqual) (This)->lpVtbl->IsEqualTo(This,pDispPointer,pfIsEqual)
#define IDisplayPointer_IsLeftOf(This,pDispPointer,pfIsLeftOf) (This)->lpVtbl->IsLeftOf(This,pDispPointer,pfIsLeftOf)
#define IDisplayPointer_IsRightOf(This,pDispPointer,pfIsRightOf) (This)->lpVtbl->IsRightOf(This,pDispPointer,pfIsRightOf)
#define IDisplayPointer_IsAtBOL(This,pfBOL) (This)->lpVtbl->IsAtBOL(This,pfBOL)
#define IDisplayPointer_MoveToMarkupPointer(This,pPointer,pDispLineContext) (This)->lpVtbl->MoveToMarkupPointer(This,pPointer,pDispLineContext)
#define IDisplayPointer_ScrollIntoView(This) (This)->lpVtbl->ScrollIntoView(This)
#define IDisplayPointer_GetLineInfo(This,ppLineInfo) (This)->lpVtbl->GetLineInfo(This,ppLineInfo)
#define IDisplayPointer_GetFlowElement(This,ppLayoutElement) (This)->lpVtbl->GetFlowElement(This,ppLayoutElement)
#define IDisplayPointer_QueryBreaks(This,pdwBreaks) (This)->lpVtbl->QueryBreaks(This,pdwBreaks)
#endif
#endif

  HRESULT WINAPI IDisplayPointer_MoveToPoint_Proxy(IDisplayPointer *This,POINT ptPoint,COORD_SYSTEM eCoordSystem,IHTMLElement *pElementContext,DWORD dwHitTestOptions,DWORD *pdwHitTestResults);
  void __RPC_STUB IDisplayPointer_MoveToPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_MoveUnit_Proxy(IDisplayPointer *This,DISPLAY_MOVEUNIT eMoveUnit,LONG lXPos);
  void __RPC_STUB IDisplayPointer_MoveUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_PositionMarkupPointer_Proxy(IDisplayPointer *This,IMarkupPointer *pMarkupPointer);
  void __RPC_STUB IDisplayPointer_PositionMarkupPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_MoveToPointer_Proxy(IDisplayPointer *This,IDisplayPointer *pDispPointer);
  void __RPC_STUB IDisplayPointer_MoveToPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_SetPointerGravity_Proxy(IDisplayPointer *This,POINTER_GRAVITY eGravity);
  void __RPC_STUB IDisplayPointer_SetPointerGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_GetPointerGravity_Proxy(IDisplayPointer *This,POINTER_GRAVITY *peGravity);
  void __RPC_STUB IDisplayPointer_GetPointerGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_SetDisplayGravity_Proxy(IDisplayPointer *This,DISPLAY_GRAVITY eGravity);
  void __RPC_STUB IDisplayPointer_SetDisplayGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_GetDisplayGravity_Proxy(IDisplayPointer *This,DISPLAY_GRAVITY *peGravity);
  void __RPC_STUB IDisplayPointer_GetDisplayGravity_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsPositioned_Proxy(IDisplayPointer *This,WINBOOL *pfPositioned);
  void __RPC_STUB IDisplayPointer_IsPositioned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_Unposition_Proxy(IDisplayPointer *This);
  void __RPC_STUB IDisplayPointer_Unposition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsEqualTo_Proxy(IDisplayPointer *This,IDisplayPointer *pDispPointer,WINBOOL *pfIsEqual);
  void __RPC_STUB IDisplayPointer_IsEqualTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsLeftOf_Proxy(IDisplayPointer *This,IDisplayPointer *pDispPointer,WINBOOL *pfIsLeftOf);
  void __RPC_STUB IDisplayPointer_IsLeftOf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsRightOf_Proxy(IDisplayPointer *This,IDisplayPointer *pDispPointer,WINBOOL *pfIsRightOf);
  void __RPC_STUB IDisplayPointer_IsRightOf_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_IsAtBOL_Proxy(IDisplayPointer *This,WINBOOL *pfBOL);
  void __RPC_STUB IDisplayPointer_IsAtBOL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_MoveToMarkupPointer_Proxy(IDisplayPointer *This,IMarkupPointer *pPointer,IDisplayPointer *pDispLineContext);
  void __RPC_STUB IDisplayPointer_MoveToMarkupPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_ScrollIntoView_Proxy(IDisplayPointer *This);
  void __RPC_STUB IDisplayPointer_ScrollIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_GetLineInfo_Proxy(IDisplayPointer *This,ILineInfo **ppLineInfo);
  void __RPC_STUB IDisplayPointer_GetLineInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_GetFlowElement_Proxy(IDisplayPointer *This,IHTMLElement **ppLayoutElement);
  void __RPC_STUB IDisplayPointer_GetFlowElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayPointer_QueryBreaks_Proxy(IDisplayPointer *This,DWORD *pdwBreaks);
  void __RPC_STUB IDisplayPointer_QueryBreaks_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IDisplayServices_INTERFACE_DEFINED__
#define __IDisplayServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IDisplayServices;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IDisplayServices : public IUnknown {
  public:
    virtual HRESULT WINAPI CreateDisplayPointer(IDisplayPointer **ppDispPointer) = 0;
    virtual HRESULT WINAPI TransformRect(RECT *pRect,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement) = 0;
    virtual HRESULT WINAPI TransformPoint(POINT *pPoint,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement) = 0;
    virtual HRESULT WINAPI GetCaret(IHTMLCaret **ppCaret) = 0;
    virtual HRESULT WINAPI GetComputedStyle(IMarkupPointer *pPointer,IHTMLComputedStyle **ppComputedStyle) = 0;
    virtual HRESULT WINAPI ScrollRectIntoView(IHTMLElement *pIElement,RECT rect) = 0;
    virtual HRESULT WINAPI HasFlowLayout(IHTMLElement *pIElement,WINBOOL *pfHasFlowLayout) = 0;
  };
#else
  typedef struct IDisplayServicesVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IDisplayServices *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IDisplayServices *This);
      ULONG (WINAPI *Release)(IDisplayServices *This);
      HRESULT (WINAPI *CreateDisplayPointer)(IDisplayServices *This,IDisplayPointer **ppDispPointer);
      HRESULT (WINAPI *TransformRect)(IDisplayServices *This,RECT *pRect,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement);
      HRESULT (WINAPI *TransformPoint)(IDisplayServices *This,POINT *pPoint,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement);
      HRESULT (WINAPI *GetCaret)(IDisplayServices *This,IHTMLCaret **ppCaret);
      HRESULT (WINAPI *GetComputedStyle)(IDisplayServices *This,IMarkupPointer *pPointer,IHTMLComputedStyle **ppComputedStyle);
      HRESULT (WINAPI *ScrollRectIntoView)(IDisplayServices *This,IHTMLElement *pIElement,RECT rect);
      HRESULT (WINAPI *HasFlowLayout)(IDisplayServices *This,IHTMLElement *pIElement,WINBOOL *pfHasFlowLayout);
    END_INTERFACE
  } IDisplayServicesVtbl;
  interface IDisplayServices {
    CONST_VTBL struct IDisplayServicesVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IDisplayServices_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDisplayServices_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDisplayServices_Release(This) (This)->lpVtbl->Release(This)
#define IDisplayServices_CreateDisplayPointer(This,ppDispPointer) (This)->lpVtbl->CreateDisplayPointer(This,ppDispPointer)
#define IDisplayServices_TransformRect(This,pRect,eSource,eDestination,pIElement) (This)->lpVtbl->TransformRect(This,pRect,eSource,eDestination,pIElement)
#define IDisplayServices_TransformPoint(This,pPoint,eSource,eDestination,pIElement) (This)->lpVtbl->TransformPoint(This,pPoint,eSource,eDestination,pIElement)
#define IDisplayServices_GetCaret(This,ppCaret) (This)->lpVtbl->GetCaret(This,ppCaret)
#define IDisplayServices_GetComputedStyle(This,pPointer,ppComputedStyle) (This)->lpVtbl->GetComputedStyle(This,pPointer,ppComputedStyle)
#define IDisplayServices_ScrollRectIntoView(This,pIElement,rect) (This)->lpVtbl->ScrollRectIntoView(This,pIElement,rect)
#define IDisplayServices_HasFlowLayout(This,pIElement,pfHasFlowLayout) (This)->lpVtbl->HasFlowLayout(This,pIElement,pfHasFlowLayout)
#endif
#endif

  HRESULT WINAPI IDisplayServices_CreateDisplayPointer_Proxy(IDisplayServices *This,IDisplayPointer **ppDispPointer);
  void __RPC_STUB IDisplayServices_CreateDisplayPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_TransformRect_Proxy(IDisplayServices *This,RECT *pRect,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement);
  void __RPC_STUB IDisplayServices_TransformRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_TransformPoint_Proxy(IDisplayServices *This,POINT *pPoint,COORD_SYSTEM eSource,COORD_SYSTEM eDestination,IHTMLElement *pIElement);
  void __RPC_STUB IDisplayServices_TransformPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_GetCaret_Proxy(IDisplayServices *This,IHTMLCaret **ppCaret);
  void __RPC_STUB IDisplayServices_GetCaret_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_GetComputedStyle_Proxy(IDisplayServices *This,IMarkupPointer *pPointer,IHTMLComputedStyle **ppComputedStyle);
  void __RPC_STUB IDisplayServices_GetComputedStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_ScrollRectIntoView_Proxy(IDisplayServices *This,IHTMLElement *pIElement,RECT rect);
  void __RPC_STUB IDisplayServices_ScrollRectIntoView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IDisplayServices_HasFlowLayout_Proxy(IDisplayServices *This,IHTMLElement *pIElement,WINBOOL *pfHasFlowLayout);
  void __RPC_STUB IDisplayServices_HasFlowLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHtmlDlgSafeHelper_INTERFACE_DEFINED__
#define __IHtmlDlgSafeHelper_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHtmlDlgSafeHelper;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHtmlDlgSafeHelper : public IDispatch {
  public:
    virtual HRESULT WINAPI choosecolordlg(VARIANT initColor,VARIANT *rgbColor) = 0;
    virtual HRESULT WINAPI getCharset(BSTR fontName,VARIANT *charset) = 0;
    virtual HRESULT WINAPI get_Fonts(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_BlockFormats(IDispatch **p) = 0;
  };
#else
  typedef struct IHtmlDlgSafeHelperVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHtmlDlgSafeHelper *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHtmlDlgSafeHelper *This);
      ULONG (WINAPI *Release)(IHtmlDlgSafeHelper *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHtmlDlgSafeHelper *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHtmlDlgSafeHelper *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHtmlDlgSafeHelper *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHtmlDlgSafeHelper *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *choosecolordlg)(IHtmlDlgSafeHelper *This,VARIANT initColor,VARIANT *rgbColor);
      HRESULT (WINAPI *getCharset)(IHtmlDlgSafeHelper *This,BSTR fontName,VARIANT *charset);
      HRESULT (WINAPI *get_Fonts)(IHtmlDlgSafeHelper *This,IDispatch **p);
      HRESULT (WINAPI *get_BlockFormats)(IHtmlDlgSafeHelper *This,IDispatch **p);
    END_INTERFACE
  } IHtmlDlgSafeHelperVtbl;
  interface IHtmlDlgSafeHelper {
    CONST_VTBL struct IHtmlDlgSafeHelperVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHtmlDlgSafeHelper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHtmlDlgSafeHelper_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHtmlDlgSafeHelper_Release(This) (This)->lpVtbl->Release(This)
#define IHtmlDlgSafeHelper_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHtmlDlgSafeHelper_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHtmlDlgSafeHelper_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHtmlDlgSafeHelper_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHtmlDlgSafeHelper_choosecolordlg(This,initColor,rgbColor) (This)->lpVtbl->choosecolordlg(This,initColor,rgbColor)
#define IHtmlDlgSafeHelper_getCharset(This,fontName,charset) (This)->lpVtbl->getCharset(This,fontName,charset)
#define IHtmlDlgSafeHelper_get_Fonts(This,p) (This)->lpVtbl->get_Fonts(This,p)
#define IHtmlDlgSafeHelper_get_BlockFormats(This,p) (This)->lpVtbl->get_BlockFormats(This,p)
#endif
#endif

  HRESULT WINAPI IHtmlDlgSafeHelper_choosecolordlg_Proxy(IHtmlDlgSafeHelper *This,VARIANT initColor,VARIANT *rgbColor);
  void __RPC_STUB IHtmlDlgSafeHelper_choosecolordlg_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHtmlDlgSafeHelper_getCharset_Proxy(IHtmlDlgSafeHelper *This,BSTR fontName,VARIANT *charset);
  void __RPC_STUB IHtmlDlgSafeHelper_getCharset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHtmlDlgSafeHelper_get_Fonts_Proxy(IHtmlDlgSafeHelper *This,IDispatch **p);
  void __RPC_STUB IHtmlDlgSafeHelper_get_Fonts_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHtmlDlgSafeHelper_get_BlockFormats_Proxy(IHtmlDlgSafeHelper *This,IDispatch **p);
  void __RPC_STUB IHtmlDlgSafeHelper_get_BlockFormats_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IBlockFormats_INTERFACE_DEFINED__
#define __IBlockFormats_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IBlockFormats;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IBlockFormats : public IDispatch {
  public:
    virtual HRESULT WINAPI get__NewEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI get_Count(long *p) = 0;
    virtual HRESULT WINAPI Item(VARIANT *pvarIndex,BSTR *pbstrBlockFormat) = 0;
  };
#else
  typedef struct IBlockFormatsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IBlockFormats *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IBlockFormats *This);
      ULONG (WINAPI *Release)(IBlockFormats *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IBlockFormats *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IBlockFormats *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IBlockFormats *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IBlockFormats *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get__NewEnum)(IBlockFormats *This,IUnknown **p);
      HRESULT (WINAPI *get_Count)(IBlockFormats *This,long *p);
      HRESULT (WINAPI *Item)(IBlockFormats *This,VARIANT *pvarIndex,BSTR *pbstrBlockFormat);
    END_INTERFACE
  } IBlockFormatsVtbl;
  interface IBlockFormats {
    CONST_VTBL struct IBlockFormatsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IBlockFormats_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IBlockFormats_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IBlockFormats_Release(This) (This)->lpVtbl->Release(This)
#define IBlockFormats_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IBlockFormats_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IBlockFormats_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IBlockFormats_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IBlockFormats_get__NewEnum(This,p) (This)->lpVtbl->get__NewEnum(This,p)
#define IBlockFormats_get_Count(This,p) (This)->lpVtbl->get_Count(This,p)
#define IBlockFormats_Item(This,pvarIndex,pbstrBlockFormat) (This)->lpVtbl->Item(This,pvarIndex,pbstrBlockFormat)
#endif
#endif

  HRESULT WINAPI IBlockFormats_get__NewEnum_Proxy(IBlockFormats *This,IUnknown **p);
  void __RPC_STUB IBlockFormats_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IBlockFormats_get_Count_Proxy(IBlockFormats *This,long *p);
  void __RPC_STUB IBlockFormats_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IBlockFormats_Item_Proxy(IBlockFormats *This,VARIANT *pvarIndex,BSTR *pbstrBlockFormat);
  void __RPC_STUB IBlockFormats_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IFontNames_INTERFACE_DEFINED__
#define __IFontNames_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IFontNames;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IFontNames : public IDispatch {
  public:
    virtual HRESULT WINAPI get__NewEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI get_Count(long *p) = 0;
    virtual HRESULT WINAPI Item(VARIANT *pvarIndex,BSTR *pbstrFontName) = 0;
  };
#else
  typedef struct IFontNamesVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IFontNames *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IFontNames *This);
      ULONG (WINAPI *Release)(IFontNames *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IFontNames *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IFontNames *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IFontNames *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IFontNames *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get__NewEnum)(IFontNames *This,IUnknown **p);
      HRESULT (WINAPI *get_Count)(IFontNames *This,long *p);
      HRESULT (WINAPI *Item)(IFontNames *This,VARIANT *pvarIndex,BSTR *pbstrFontName);
    END_INTERFACE
  } IFontNamesVtbl;
  interface IFontNames {
    CONST_VTBL struct IFontNamesVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IFontNames_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFontNames_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFontNames_Release(This) (This)->lpVtbl->Release(This)
#define IFontNames_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IFontNames_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IFontNames_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IFontNames_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IFontNames_get__NewEnum(This,p) (This)->lpVtbl->get__NewEnum(This,p)
#define IFontNames_get_Count(This,p) (This)->lpVtbl->get_Count(This,p)
#define IFontNames_Item(This,pvarIndex,pbstrFontName) (This)->lpVtbl->Item(This,pvarIndex,pbstrFontName)
#endif
#endif

  HRESULT WINAPI IFontNames_get__NewEnum_Proxy(IFontNames *This,IUnknown **p);
  void __RPC_STUB IFontNames_get__NewEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IFontNames_get_Count_Proxy(IFontNames *This,long *p);
  void __RPC_STUB IFontNames_get_Count_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IFontNames_Item_Proxy(IFontNames *This,VARIANT *pvarIndex,BSTR *pbstrFontName);
  void __RPC_STUB IFontNames_Item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ICSSFilter_INTERFACE_DEFINED__
#define __ICSSFilter_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ICSSFilter;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ICSSFilter : public IUnknown {
  public:
    virtual HRESULT WINAPI SetSite(ICSSFilterSite *pSink) = 0;
    virtual HRESULT WINAPI OnAmbientPropertyChange(LONG dispid) = 0;
  };
#else
  typedef struct ICSSFilterVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ICSSFilter *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ICSSFilter *This);
      ULONG (WINAPI *Release)(ICSSFilter *This);
      HRESULT (WINAPI *SetSite)(ICSSFilter *This,ICSSFilterSite *pSink);
      HRESULT (WINAPI *OnAmbientPropertyChange)(ICSSFilter *This,LONG dispid);
    END_INTERFACE
  } ICSSFilterVtbl;
  interface ICSSFilter {
    CONST_VTBL struct ICSSFilterVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ICSSFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ICSSFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ICSSFilter_Release(This) (This)->lpVtbl->Release(This)
#define ICSSFilter_SetSite(This,pSink) (This)->lpVtbl->SetSite(This,pSink)
#define ICSSFilter_OnAmbientPropertyChange(This,dispid) (This)->lpVtbl->OnAmbientPropertyChange(This,dispid)
#endif
#endif

  HRESULT WINAPI ICSSFilter_SetSite_Proxy(ICSSFilter *This,ICSSFilterSite *pSink);
  void __RPC_STUB ICSSFilter_SetSite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ICSSFilter_OnAmbientPropertyChange_Proxy(ICSSFilter *This,LONG dispid);
  void __RPC_STUB ICSSFilter_OnAmbientPropertyChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISecureUrlHost_INTERFACE_DEFINED__
#define __ISecureUrlHost_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISecureUrlHost;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ISecureUrlHost : public IUnknown {
  public:
    virtual HRESULT WINAPI ValidateSecureUrl(WINBOOL *pfAllow,OLECHAR *pchUrlInQuestion,DWORD dwFlags) = 0;
  };
#else
  typedef struct ISecureUrlHostVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ISecureUrlHost *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ISecureUrlHost *This);
      ULONG (WINAPI *Release)(ISecureUrlHost *This);
      HRESULT (WINAPI *ValidateSecureUrl)(ISecureUrlHost *This,WINBOOL *pfAllow,OLECHAR *pchUrlInQuestion,DWORD dwFlags);
    END_INTERFACE
  } ISecureUrlHostVtbl;
  interface ISecureUrlHost {
    CONST_VTBL struct ISecureUrlHostVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ISecureUrlHost_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISecureUrlHost_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISecureUrlHost_Release(This) (This)->lpVtbl->Release(This)
#define ISecureUrlHost_ValidateSecureUrl(This,pfAllow,pchUrlInQuestion,dwFlags) (This)->lpVtbl->ValidateSecureUrl(This,pfAllow,pchUrlInQuestion,dwFlags)
#endif
#endif

  HRESULT WINAPI ISecureUrlHost_ValidateSecureUrl_Proxy(ISecureUrlHost *This,WINBOOL *pfAllow,OLECHAR *pchUrlInQuestion,DWORD dwFlags);
  void __RPC_STUB ISecureUrlHost_ValidateSecureUrl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupServices_INTERFACE_DEFINED__
#define __IMarkupServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupServices;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMarkupServices : public IUnknown {
  public:
    virtual HRESULT WINAPI CreateMarkupPointer(IMarkupPointer **ppPointer) = 0;
    virtual HRESULT WINAPI CreateMarkupContainer(IMarkupContainer **ppMarkupContainer) = 0;
    virtual HRESULT WINAPI CreateElement(ELEMENT_TAG_ID tagID,OLECHAR *pchAttributes,IHTMLElement **ppElement) = 0;
    virtual HRESULT WINAPI CloneElement(IHTMLElement *pElemCloneThis,IHTMLElement **ppElementTheClone) = 0;
    virtual HRESULT WINAPI InsertElement(IHTMLElement *pElementInsert,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI RemoveElement(IHTMLElement *pElementRemove) = 0;
    virtual HRESULT WINAPI Remove(IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI Copy(IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget) = 0;
    virtual HRESULT WINAPI Move(IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget) = 0;
    virtual HRESULT WINAPI InsertText(OLECHAR *pchText,long cch,IMarkupPointer *pPointerTarget) = 0;
    virtual HRESULT WINAPI ParseString(OLECHAR *pchHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *ppPointerStart,IMarkupPointer *ppPointerFinish) = 0;
    virtual HRESULT WINAPI ParseGlobal(HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI IsScopedElement(IHTMLElement *pElement,WINBOOL *pfScoped) = 0;
    virtual HRESULT WINAPI GetElementTagId(IHTMLElement *pElement,ELEMENT_TAG_ID *ptagId) = 0;
    virtual HRESULT WINAPI GetTagIDForName(BSTR bstrName,ELEMENT_TAG_ID *ptagId) = 0;
    virtual HRESULT WINAPI GetNameForTagID(ELEMENT_TAG_ID tagId,BSTR *pbstrName) = 0;
    virtual HRESULT WINAPI MovePointersToRange(IHTMLTxtRange *pIRange,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI MoveRangeToPointers(IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IHTMLTxtRange *pIRange) = 0;
    virtual HRESULT WINAPI BeginUndoUnit(OLECHAR *pchTitle) = 0;
    virtual HRESULT WINAPI EndUndoUnit(void) = 0;
  };
#else
  typedef struct IMarkupServicesVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMarkupServices *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMarkupServices *This);
      ULONG (WINAPI *Release)(IMarkupServices *This);
      HRESULT (WINAPI *CreateMarkupPointer)(IMarkupServices *This,IMarkupPointer **ppPointer);
      HRESULT (WINAPI *CreateMarkupContainer)(IMarkupServices *This,IMarkupContainer **ppMarkupContainer);
      HRESULT (WINAPI *CreateElement)(IMarkupServices *This,ELEMENT_TAG_ID tagID,OLECHAR *pchAttributes,IHTMLElement **ppElement);
      HRESULT (WINAPI *CloneElement)(IMarkupServices *This,IHTMLElement *pElemCloneThis,IHTMLElement **ppElementTheClone);
      HRESULT (WINAPI *InsertElement)(IMarkupServices *This,IHTMLElement *pElementInsert,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
      HRESULT (WINAPI *RemoveElement)(IMarkupServices *This,IHTMLElement *pElementRemove);
      HRESULT (WINAPI *Remove)(IMarkupServices *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
      HRESULT (WINAPI *Copy)(IMarkupServices *This,IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget);
      HRESULT (WINAPI *Move)(IMarkupServices *This,IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget);
      HRESULT (WINAPI *InsertText)(IMarkupServices *This,OLECHAR *pchText,long cch,IMarkupPointer *pPointerTarget);
      HRESULT (WINAPI *ParseString)(IMarkupServices *This,OLECHAR *pchHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *ppPointerStart,IMarkupPointer *ppPointerFinish);
      HRESULT (WINAPI *ParseGlobal)(IMarkupServices *This,HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
      HRESULT (WINAPI *IsScopedElement)(IMarkupServices *This,IHTMLElement *pElement,WINBOOL *pfScoped);
      HRESULT (WINAPI *GetElementTagId)(IMarkupServices *This,IHTMLElement *pElement,ELEMENT_TAG_ID *ptagId);
      HRESULT (WINAPI *GetTagIDForName)(IMarkupServices *This,BSTR bstrName,ELEMENT_TAG_ID *ptagId);
      HRESULT (WINAPI *GetNameForTagID)(IMarkupServices *This,ELEMENT_TAG_ID tagId,BSTR *pbstrName);
      HRESULT (WINAPI *MovePointersToRange)(IMarkupServices *This,IHTMLTxtRange *pIRange,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
      HRESULT (WINAPI *MoveRangeToPointers)(IMarkupServices *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IHTMLTxtRange *pIRange);
      HRESULT (WINAPI *BeginUndoUnit)(IMarkupServices *This,OLECHAR *pchTitle);
      HRESULT (WINAPI *EndUndoUnit)(IMarkupServices *This);
    END_INTERFACE
  } IMarkupServicesVtbl;
  interface IMarkupServices {
    CONST_VTBL struct IMarkupServicesVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMarkupServices_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMarkupServices_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMarkupServices_Release(This) (This)->lpVtbl->Release(This)
#define IMarkupServices_CreateMarkupPointer(This,ppPointer) (This)->lpVtbl->CreateMarkupPointer(This,ppPointer)
#define IMarkupServices_CreateMarkupContainer(This,ppMarkupContainer) (This)->lpVtbl->CreateMarkupContainer(This,ppMarkupContainer)
#define IMarkupServices_CreateElement(This,tagID,pchAttributes,ppElement) (This)->lpVtbl->CreateElement(This,tagID,pchAttributes,ppElement)
#define IMarkupServices_CloneElement(This,pElemCloneThis,ppElementTheClone) (This)->lpVtbl->CloneElement(This,pElemCloneThis,ppElementTheClone)
#define IMarkupServices_InsertElement(This,pElementInsert,pPointerStart,pPointerFinish) (This)->lpVtbl->InsertElement(This,pElementInsert,pPointerStart,pPointerFinish)
#define IMarkupServices_RemoveElement(This,pElementRemove) (This)->lpVtbl->RemoveElement(This,pElementRemove)
#define IMarkupServices_Remove(This,pPointerStart,pPointerFinish) (This)->lpVtbl->Remove(This,pPointerStart,pPointerFinish)
#define IMarkupServices_Copy(This,pPointerSourceStart,pPointerSourceFinish,pPointerTarget) (This)->lpVtbl->Copy(This,pPointerSourceStart,pPointerSourceFinish,pPointerTarget)
#define IMarkupServices_Move(This,pPointerSourceStart,pPointerSourceFinish,pPointerTarget) (This)->lpVtbl->Move(This,pPointerSourceStart,pPointerSourceFinish,pPointerTarget)
#define IMarkupServices_InsertText(This,pchText,cch,pPointerTarget) (This)->lpVtbl->InsertText(This,pchText,cch,pPointerTarget)
#define IMarkupServices_ParseString(This,pchHTML,dwFlags,ppContainerResult,ppPointerStart,ppPointerFinish) (This)->lpVtbl->ParseString(This,pchHTML,dwFlags,ppContainerResult,ppPointerStart,ppPointerFinish)
#define IMarkupServices_ParseGlobal(This,hglobalHTML,dwFlags,ppContainerResult,pPointerStart,pPointerFinish) (This)->lpVtbl->ParseGlobal(This,hglobalHTML,dwFlags,ppContainerResult,pPointerStart,pPointerFinish)
#define IMarkupServices_IsScopedElement(This,pElement,pfScoped) (This)->lpVtbl->IsScopedElement(This,pElement,pfScoped)
#define IMarkupServices_GetElementTagId(This,pElement,ptagId) (This)->lpVtbl->GetElementTagId(This,pElement,ptagId)
#define IMarkupServices_GetTagIDForName(This,bstrName,ptagId) (This)->lpVtbl->GetTagIDForName(This,bstrName,ptagId)
#define IMarkupServices_GetNameForTagID(This,tagId,pbstrName) (This)->lpVtbl->GetNameForTagID(This,tagId,pbstrName)
#define IMarkupServices_MovePointersToRange(This,pIRange,pPointerStart,pPointerFinish) (This)->lpVtbl->MovePointersToRange(This,pIRange,pPointerStart,pPointerFinish)
#define IMarkupServices_MoveRangeToPointers(This,pPointerStart,pPointerFinish,pIRange) (This)->lpVtbl->MoveRangeToPointers(This,pPointerStart,pPointerFinish,pIRange)
#define IMarkupServices_BeginUndoUnit(This,pchTitle) (This)->lpVtbl->BeginUndoUnit(This,pchTitle)
#define IMarkupServices_EndUndoUnit(This) (This)->lpVtbl->EndUndoUnit(This)
#endif
#endif

  HRESULT WINAPI IMarkupServices_CreateMarkupPointer_Proxy(IMarkupServices *This,IMarkupPointer **ppPointer);
  void __RPC_STUB IMarkupServices_CreateMarkupPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_CreateMarkupContainer_Proxy(IMarkupServices *This,IMarkupContainer **ppMarkupContainer);
  void __RPC_STUB IMarkupServices_CreateMarkupContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_CreateElement_Proxy(IMarkupServices *This,ELEMENT_TAG_ID tagID,OLECHAR *pchAttributes,IHTMLElement **ppElement);
  void __RPC_STUB IMarkupServices_CreateElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_CloneElement_Proxy(IMarkupServices *This,IHTMLElement *pElemCloneThis,IHTMLElement **ppElementTheClone);
  void __RPC_STUB IMarkupServices_CloneElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_InsertElement_Proxy(IMarkupServices *This,IHTMLElement *pElementInsert,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices_InsertElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_RemoveElement_Proxy(IMarkupServices *This,IHTMLElement *pElementRemove);
  void __RPC_STUB IMarkupServices_RemoveElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_Remove_Proxy(IMarkupServices *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices_Remove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_Copy_Proxy(IMarkupServices *This,IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget);
  void __RPC_STUB IMarkupServices_Copy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_Move_Proxy(IMarkupServices *This,IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget);
  void __RPC_STUB IMarkupServices_Move_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_InsertText_Proxy(IMarkupServices *This,OLECHAR *pchText,long cch,IMarkupPointer *pPointerTarget);
  void __RPC_STUB IMarkupServices_InsertText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_ParseString_Proxy(IMarkupServices *This,OLECHAR *pchHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *ppPointerStart,IMarkupPointer *ppPointerFinish);
  void __RPC_STUB IMarkupServices_ParseString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_ParseGlobal_Proxy(IMarkupServices *This,HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices_ParseGlobal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_IsScopedElement_Proxy(IMarkupServices *This,IHTMLElement *pElement,WINBOOL *pfScoped);
  void __RPC_STUB IMarkupServices_IsScopedElement_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_GetElementTagId_Proxy(IMarkupServices *This,IHTMLElement *pElement,ELEMENT_TAG_ID *ptagId);
  void __RPC_STUB IMarkupServices_GetElementTagId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_GetTagIDForName_Proxy(IMarkupServices *This,BSTR bstrName,ELEMENT_TAG_ID *ptagId);
  void __RPC_STUB IMarkupServices_GetTagIDForName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_GetNameForTagID_Proxy(IMarkupServices *This,ELEMENT_TAG_ID tagId,BSTR *pbstrName);
  void __RPC_STUB IMarkupServices_GetNameForTagID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_MovePointersToRange_Proxy(IMarkupServices *This,IHTMLTxtRange *pIRange,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices_MovePointersToRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_MoveRangeToPointers_Proxy(IMarkupServices *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IHTMLTxtRange *pIRange);
  void __RPC_STUB IMarkupServices_MoveRangeToPointers_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_BeginUndoUnit_Proxy(IMarkupServices *This,OLECHAR *pchTitle);
  void __RPC_STUB IMarkupServices_BeginUndoUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices_EndUndoUnit_Proxy(IMarkupServices *This);
  void __RPC_STUB IMarkupServices_EndUndoUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupServices2_INTERFACE_DEFINED__
#define __IMarkupServices2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupServices2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMarkupServices2 : public IMarkupServices {
  public:
    virtual HRESULT WINAPI ParseGlobalEx(HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer *pContext,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish) = 0;
    virtual HRESULT WINAPI ValidateElements(IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IMarkupPointer *pPointerTarget,IMarkupPointer *pPointerStatus,IHTMLElement **ppElemFailBottom,IHTMLElement **ppElemFailTop) = 0;
    virtual HRESULT WINAPI SaveSegmentsToClipboard(ISegmentList *pSegmentList,DWORD dwFlags) = 0;
  };
#else
  typedef struct IMarkupServices2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMarkupServices2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMarkupServices2 *This);
      ULONG (WINAPI *Release)(IMarkupServices2 *This);
      HRESULT (WINAPI *CreateMarkupPointer)(IMarkupServices2 *This,IMarkupPointer **ppPointer);
      HRESULT (WINAPI *CreateMarkupContainer)(IMarkupServices2 *This,IMarkupContainer **ppMarkupContainer);
      HRESULT (WINAPI *CreateElement)(IMarkupServices2 *This,ELEMENT_TAG_ID tagID,OLECHAR *pchAttributes,IHTMLElement **ppElement);
      HRESULT (WINAPI *CloneElement)(IMarkupServices2 *This,IHTMLElement *pElemCloneThis,IHTMLElement **ppElementTheClone);
      HRESULT (WINAPI *InsertElement)(IMarkupServices2 *This,IHTMLElement *pElementInsert,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
      HRESULT (WINAPI *RemoveElement)(IMarkupServices2 *This,IHTMLElement *pElementRemove);
      HRESULT (WINAPI *Remove)(IMarkupServices2 *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
      HRESULT (WINAPI *Copy)(IMarkupServices2 *This,IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget);
      HRESULT (WINAPI *Move)(IMarkupServices2 *This,IMarkupPointer *pPointerSourceStart,IMarkupPointer *pPointerSourceFinish,IMarkupPointer *pPointerTarget);
      HRESULT (WINAPI *InsertText)(IMarkupServices2 *This,OLECHAR *pchText,long cch,IMarkupPointer *pPointerTarget);
      HRESULT (WINAPI *ParseString)(IMarkupServices2 *This,OLECHAR *pchHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *ppPointerStart,IMarkupPointer *ppPointerFinish);
      HRESULT (WINAPI *ParseGlobal)(IMarkupServices2 *This,HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
      HRESULT (WINAPI *IsScopedElement)(IMarkupServices2 *This,IHTMLElement *pElement,WINBOOL *pfScoped);
      HRESULT (WINAPI *GetElementTagId)(IMarkupServices2 *This,IHTMLElement *pElement,ELEMENT_TAG_ID *ptagId);
      HRESULT (WINAPI *GetTagIDForName)(IMarkupServices2 *This,BSTR bstrName,ELEMENT_TAG_ID *ptagId);
      HRESULT (WINAPI *GetNameForTagID)(IMarkupServices2 *This,ELEMENT_TAG_ID tagId,BSTR *pbstrName);
      HRESULT (WINAPI *MovePointersToRange)(IMarkupServices2 *This,IHTMLTxtRange *pIRange,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
      HRESULT (WINAPI *MoveRangeToPointers)(IMarkupServices2 *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IHTMLTxtRange *pIRange);
      HRESULT (WINAPI *BeginUndoUnit)(IMarkupServices2 *This,OLECHAR *pchTitle);
      HRESULT (WINAPI *EndUndoUnit)(IMarkupServices2 *This);
      HRESULT (WINAPI *ParseGlobalEx)(IMarkupServices2 *This,HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer *pContext,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
      HRESULT (WINAPI *ValidateElements)(IMarkupServices2 *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IMarkupPointer *pPointerTarget,IMarkupPointer *pPointerStatus,IHTMLElement **ppElemFailBottom,IHTMLElement **ppElemFailTop);
      HRESULT (WINAPI *SaveSegmentsToClipboard)(IMarkupServices2 *This,ISegmentList *pSegmentList,DWORD dwFlags);
    END_INTERFACE
  } IMarkupServices2Vtbl;
  interface IMarkupServices2 {
    CONST_VTBL struct IMarkupServices2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMarkupServices2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMarkupServices2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMarkupServices2_Release(This) (This)->lpVtbl->Release(This)
#define IMarkupServices2_CreateMarkupPointer(This,ppPointer) (This)->lpVtbl->CreateMarkupPointer(This,ppPointer)
#define IMarkupServices2_CreateMarkupContainer(This,ppMarkupContainer) (This)->lpVtbl->CreateMarkupContainer(This,ppMarkupContainer)
#define IMarkupServices2_CreateElement(This,tagID,pchAttributes,ppElement) (This)->lpVtbl->CreateElement(This,tagID,pchAttributes,ppElement)
#define IMarkupServices2_CloneElement(This,pElemCloneThis,ppElementTheClone) (This)->lpVtbl->CloneElement(This,pElemCloneThis,ppElementTheClone)
#define IMarkupServices2_InsertElement(This,pElementInsert,pPointerStart,pPointerFinish) (This)->lpVtbl->InsertElement(This,pElementInsert,pPointerStart,pPointerFinish)
#define IMarkupServices2_RemoveElement(This,pElementRemove) (This)->lpVtbl->RemoveElement(This,pElementRemove)
#define IMarkupServices2_Remove(This,pPointerStart,pPointerFinish) (This)->lpVtbl->Remove(This,pPointerStart,pPointerFinish)
#define IMarkupServices2_Copy(This,pPointerSourceStart,pPointerSourceFinish,pPointerTarget) (This)->lpVtbl->Copy(This,pPointerSourceStart,pPointerSourceFinish,pPointerTarget)
#define IMarkupServices2_Move(This,pPointerSourceStart,pPointerSourceFinish,pPointerTarget) (This)->lpVtbl->Move(This,pPointerSourceStart,pPointerSourceFinish,pPointerTarget)
#define IMarkupServices2_InsertText(This,pchText,cch,pPointerTarget) (This)->lpVtbl->InsertText(This,pchText,cch,pPointerTarget)
#define IMarkupServices2_ParseString(This,pchHTML,dwFlags,ppContainerResult,ppPointerStart,ppPointerFinish) (This)->lpVtbl->ParseString(This,pchHTML,dwFlags,ppContainerResult,ppPointerStart,ppPointerFinish)
#define IMarkupServices2_ParseGlobal(This,hglobalHTML,dwFlags,ppContainerResult,pPointerStart,pPointerFinish) (This)->lpVtbl->ParseGlobal(This,hglobalHTML,dwFlags,ppContainerResult,pPointerStart,pPointerFinish)
#define IMarkupServices2_IsScopedElement(This,pElement,pfScoped) (This)->lpVtbl->IsScopedElement(This,pElement,pfScoped)
#define IMarkupServices2_GetElementTagId(This,pElement,ptagId) (This)->lpVtbl->GetElementTagId(This,pElement,ptagId)
#define IMarkupServices2_GetTagIDForName(This,bstrName,ptagId) (This)->lpVtbl->GetTagIDForName(This,bstrName,ptagId)
#define IMarkupServices2_GetNameForTagID(This,tagId,pbstrName) (This)->lpVtbl->GetNameForTagID(This,tagId,pbstrName)
#define IMarkupServices2_MovePointersToRange(This,pIRange,pPointerStart,pPointerFinish) (This)->lpVtbl->MovePointersToRange(This,pIRange,pPointerStart,pPointerFinish)
#define IMarkupServices2_MoveRangeToPointers(This,pPointerStart,pPointerFinish,pIRange) (This)->lpVtbl->MoveRangeToPointers(This,pPointerStart,pPointerFinish,pIRange)
#define IMarkupServices2_BeginUndoUnit(This,pchTitle) (This)->lpVtbl->BeginUndoUnit(This,pchTitle)
#define IMarkupServices2_EndUndoUnit(This) (This)->lpVtbl->EndUndoUnit(This)
#define IMarkupServices2_ParseGlobalEx(This,hglobalHTML,dwFlags,pContext,ppContainerResult,pPointerStart,pPointerFinish) (This)->lpVtbl->ParseGlobalEx(This,hglobalHTML,dwFlags,pContext,ppContainerResult,pPointerStart,pPointerFinish)
#define IMarkupServices2_ValidateElements(This,pPointerStart,pPointerFinish,pPointerTarget,pPointerStatus,ppElemFailBottom,ppElemFailTop) (This)->lpVtbl->ValidateElements(This,pPointerStart,pPointerFinish,pPointerTarget,pPointerStatus,ppElemFailBottom,ppElemFailTop)
#define IMarkupServices2_SaveSegmentsToClipboard(This,pSegmentList,dwFlags) (This)->lpVtbl->SaveSegmentsToClipboard(This,pSegmentList,dwFlags)
#endif
#endif

  HRESULT WINAPI IMarkupServices2_ParseGlobalEx_Proxy(IMarkupServices2 *This,HGLOBAL hglobalHTML,DWORD dwFlags,IMarkupContainer *pContext,IMarkupContainer **ppContainerResult,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish);
  void __RPC_STUB IMarkupServices2_ParseGlobalEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices2_ValidateElements_Proxy(IMarkupServices2 *This,IMarkupPointer *pPointerStart,IMarkupPointer *pPointerFinish,IMarkupPointer *pPointerTarget,IMarkupPointer *pPointerStatus,IHTMLElement **ppElemFailBottom,IHTMLElement **ppElemFailTop);
  void __RPC_STUB IMarkupServices2_ValidateElements_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupServices2_SaveSegmentsToClipboard_Proxy(IMarkupServices2 *This,ISegmentList *pSegmentList,DWORD dwFlags);
  void __RPC_STUB IMarkupServices2_SaveSegmentsToClipboard_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLChangePlayback_INTERFACE_DEFINED__
#define __IHTMLChangePlayback_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLChangePlayback;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLChangePlayback : public IUnknown {
  public:
    virtual HRESULT WINAPI ExecChange(BYTE *pbRecord,WINBOOL fForward) = 0;
  };
#else
  typedef struct IHTMLChangePlaybackVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLChangePlayback *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLChangePlayback *This);
      ULONG (WINAPI *Release)(IHTMLChangePlayback *This);
      HRESULT (WINAPI *ExecChange)(IHTMLChangePlayback *This,BYTE *pbRecord,WINBOOL fForward);
    END_INTERFACE
  } IHTMLChangePlaybackVtbl;
  interface IHTMLChangePlayback {
    CONST_VTBL struct IHTMLChangePlaybackVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLChangePlayback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLChangePlayback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLChangePlayback_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLChangePlayback_ExecChange(This,pbRecord,fForward) (This)->lpVtbl->ExecChange(This,pbRecord,fForward)
#endif
#endif

  HRESULT WINAPI IHTMLChangePlayback_ExecChange_Proxy(IHTMLChangePlayback *This,BYTE *pbRecord,WINBOOL fForward);
  void __RPC_STUB IHTMLChangePlayback_ExecChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupPointer2_INTERFACE_DEFINED__
#define __IMarkupPointer2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupPointer2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMarkupPointer2 : public IMarkupPointer {
  public:
    virtual HRESULT WINAPI IsAtWordBreak(WINBOOL *pfAtBreak) = 0;
    virtual HRESULT WINAPI GetMarkupPosition(long *plMP) = 0;
    virtual HRESULT WINAPI MoveToMarkupPosition(IMarkupContainer *pContainer,long lMP) = 0;
    virtual HRESULT WINAPI MoveUnitBounded(MOVEUNIT_ACTION muAction,IMarkupPointer *pIBoundary) = 0;
    virtual HRESULT WINAPI IsInsideURL(IMarkupPointer *pRight,WINBOOL *pfResult) = 0;
    virtual HRESULT WINAPI MoveToContent(IHTMLElement *pIElement,WINBOOL fAtStart) = 0;
  };
#else
  typedef struct IMarkupPointer2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMarkupPointer2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMarkupPointer2 *This);
      ULONG (WINAPI *Release)(IMarkupPointer2 *This);
      HRESULT (WINAPI *OwningDoc)(IMarkupPointer2 *This,IHTMLDocument2 **ppDoc);
      HRESULT (WINAPI *Gravity)(IMarkupPointer2 *This,POINTER_GRAVITY *pGravity);
      HRESULT (WINAPI *SetGravity)(IMarkupPointer2 *This,POINTER_GRAVITY Gravity);
      HRESULT (WINAPI *Cling)(IMarkupPointer2 *This,WINBOOL *pfCling);
      HRESULT (WINAPI *SetCling)(IMarkupPointer2 *This,WINBOOL fCLing);
      HRESULT (WINAPI *Unposition)(IMarkupPointer2 *This);
      HRESULT (WINAPI *IsPositioned)(IMarkupPointer2 *This,WINBOOL *pfPositioned);
      HRESULT (WINAPI *GetContainer)(IMarkupPointer2 *This,IMarkupContainer **ppContainer);
      HRESULT (WINAPI *MoveAdjacentToElement)(IMarkupPointer2 *This,IHTMLElement *pElement,ELEMENT_ADJACENCY eAdj);
      HRESULT (WINAPI *MoveToPointer)(IMarkupPointer2 *This,IMarkupPointer *pPointer);
      HRESULT (WINAPI *MoveToContainer)(IMarkupPointer2 *This,IMarkupContainer *pContainer,WINBOOL fAtStart);
      HRESULT (WINAPI *Left)(IMarkupPointer2 *This,WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText);
      HRESULT (WINAPI *Right)(IMarkupPointer2 *This,WINBOOL fMove,MARKUP_CONTEXT_TYPE *pContext,IHTMLElement **ppElement,long *pcch,OLECHAR *pchText);
      HRESULT (WINAPI *CurrentScope)(IMarkupPointer2 *This,IHTMLElement **ppElemCurrent);
      HRESULT (WINAPI *IsLeftOf)(IMarkupPointer2 *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
      HRESULT (WINAPI *IsLeftOfOrEqualTo)(IMarkupPointer2 *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
      HRESULT (WINAPI *IsRightOf)(IMarkupPointer2 *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
      HRESULT (WINAPI *IsRightOfOrEqualTo)(IMarkupPointer2 *This,IMarkupPointer *pPointerThat,WINBOOL *pfResult);
      HRESULT (WINAPI *IsEqualTo)(IMarkupPointer2 *This,IMarkupPointer *pPointerThat,WINBOOL *pfAreEqual);
      HRESULT (WINAPI *MoveUnit)(IMarkupPointer2 *This,MOVEUNIT_ACTION muAction);
      HRESULT (WINAPI *FindText)(IMarkupPointer2 *This,OLECHAR *pchFindText,DWORD dwFlags,IMarkupPointer *pIEndMatch,IMarkupPointer *pIEndSearch);
      HRESULT (WINAPI *IsAtWordBreak)(IMarkupPointer2 *This,WINBOOL *pfAtBreak);
      HRESULT (WINAPI *GetMarkupPosition)(IMarkupPointer2 *This,long *plMP);
      HRESULT (WINAPI *MoveToMarkupPosition)(IMarkupPointer2 *This,IMarkupContainer *pContainer,long lMP);
      HRESULT (WINAPI *MoveUnitBounded)(IMarkupPointer2 *This,MOVEUNIT_ACTION muAction,IMarkupPointer *pIBoundary);
      HRESULT (WINAPI *IsInsideURL)(IMarkupPointer2 *This,IMarkupPointer *pRight,WINBOOL *pfResult);
      HRESULT (WINAPI *MoveToContent)(IMarkupPointer2 *This,IHTMLElement *pIElement,WINBOOL fAtStart);
    END_INTERFACE
  } IMarkupPointer2Vtbl;
  interface IMarkupPointer2 {
    CONST_VTBL struct IMarkupPointer2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMarkupPointer2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMarkupPointer2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMarkupPointer2_Release(This) (This)->lpVtbl->Release(This)
#define IMarkupPointer2_OwningDoc(This,ppDoc) (This)->lpVtbl->OwningDoc(This,ppDoc)
#define IMarkupPointer2_Gravity(This,pGravity) (This)->lpVtbl->Gravity(This,pGravity)
#define IMarkupPointer2_SetGravity(This,Gravity) (This)->lpVtbl->SetGravity(This,Gravity)
#define IMarkupPointer2_Cling(This,pfCling) (This)->lpVtbl->Cling(This,pfCling)
#define IMarkupPointer2_SetCling(This,fCLing) (This)->lpVtbl->SetCling(This,fCLing)
#define IMarkupPointer2_Unposition(This) (This)->lpVtbl->Unposition(This)
#define IMarkupPointer2_IsPositioned(This,pfPositioned) (This)->lpVtbl->IsPositioned(This,pfPositioned)
#define IMarkupPointer2_GetContainer(This,ppContainer) (This)->lpVtbl->GetContainer(This,ppContainer)
#define IMarkupPointer2_MoveAdjacentToElement(This,pElement,eAdj) (This)->lpVtbl->MoveAdjacentToElement(This,pElement,eAdj)
#define IMarkupPointer2_MoveToPointer(This,pPointer) (This)->lpVtbl->MoveToPointer(This,pPointer)
#define IMarkupPointer2_MoveToContainer(This,pContainer,fAtStart) (This)->lpVtbl->MoveToContainer(This,pContainer,fAtStart)
#define IMarkupPointer2_Left(This,fMove,pContext,ppElement,pcch,pchText) (This)->lpVtbl->Left(This,fMove,pContext,ppElement,pcch,pchText)
#define IMarkupPointer2_Right(This,fMove,pContext,ppElement,pcch,pchText) (This)->lpVtbl->Right(This,fMove,pContext,ppElement,pcch,pchText)
#define IMarkupPointer2_CurrentScope(This,ppElemCurrent) (This)->lpVtbl->CurrentScope(This,ppElemCurrent)
#define IMarkupPointer2_IsLeftOf(This,pPointerThat,pfResult) (This)->lpVtbl->IsLeftOf(This,pPointerThat,pfResult)
#define IMarkupPointer2_IsLeftOfOrEqualTo(This,pPointerThat,pfResult) (This)->lpVtbl->IsLeftOfOrEqualTo(This,pPointerThat,pfResult)
#define IMarkupPointer2_IsRightOf(This,pPointerThat,pfResult) (This)->lpVtbl->IsRightOf(This,pPointerThat,pfResult)
#define IMarkupPointer2_IsRightOfOrEqualTo(This,pPointerThat,pfResult) (This)->lpVtbl->IsRightOfOrEqualTo(This,pPointerThat,pfResult)
#define IMarkupPointer2_IsEqualTo(This,pPointerThat,pfAreEqual) (This)->lpVtbl->IsEqualTo(This,pPointerThat,pfAreEqual)
#define IMarkupPointer2_MoveUnit(This,muAction) (This)->lpVtbl->MoveUnit(This,muAction)
#define IMarkupPointer2_FindText(This,pchFindText,dwFlags,pIEndMatch,pIEndSearch) (This)->lpVtbl->FindText(This,pchFindText,dwFlags,pIEndMatch,pIEndSearch)
#define IMarkupPointer2_IsAtWordBreak(This,pfAtBreak) (This)->lpVtbl->IsAtWordBreak(This,pfAtBreak)
#define IMarkupPointer2_GetMarkupPosition(This,plMP) (This)->lpVtbl->GetMarkupPosition(This,plMP)
#define IMarkupPointer2_MoveToMarkupPosition(This,pContainer,lMP) (This)->lpVtbl->MoveToMarkupPosition(This,pContainer,lMP)
#define IMarkupPointer2_MoveUnitBounded(This,muAction,pIBoundary) (This)->lpVtbl->MoveUnitBounded(This,muAction,pIBoundary)
#define IMarkupPointer2_IsInsideURL(This,pRight,pfResult) (This)->lpVtbl->IsInsideURL(This,pRight,pfResult)
#define IMarkupPointer2_MoveToContent(This,pIElement,fAtStart) (This)->lpVtbl->MoveToContent(This,pIElement,fAtStart)
#endif
#endif

  HRESULT WINAPI IMarkupPointer2_IsAtWordBreak_Proxy(IMarkupPointer2 *This,WINBOOL *pfAtBreak);
  void __RPC_STUB IMarkupPointer2_IsAtWordBreak_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_GetMarkupPosition_Proxy(IMarkupPointer2 *This,long *plMP);
  void __RPC_STUB IMarkupPointer2_GetMarkupPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_MoveToMarkupPosition_Proxy(IMarkupPointer2 *This,IMarkupContainer *pContainer,long lMP);
  void __RPC_STUB IMarkupPointer2_MoveToMarkupPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_MoveUnitBounded_Proxy(IMarkupPointer2 *This,MOVEUNIT_ACTION muAction,IMarkupPointer *pIBoundary);
  void __RPC_STUB IMarkupPointer2_MoveUnitBounded_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_IsInsideURL_Proxy(IMarkupPointer2 *This,IMarkupPointer *pRight,WINBOOL *pfResult);
  void __RPC_STUB IMarkupPointer2_IsInsideURL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupPointer2_MoveToContent_Proxy(IMarkupPointer2 *This,IHTMLElement *pIElement,WINBOOL fAtStart);
  void __RPC_STUB IMarkupPointer2_MoveToContent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IMarkupTextFrags_INTERFACE_DEFINED__
#define __IMarkupTextFrags_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IMarkupTextFrags;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IMarkupTextFrags : public IUnknown {
  public:
    virtual HRESULT WINAPI GetTextFragCount(long *pcFrags) = 0;
    virtual HRESULT WINAPI GetTextFrag(long iFrag,BSTR *pbstrFrag,IMarkupPointer *pPointerFrag) = 0;
    virtual HRESULT WINAPI RemoveTextFrag(long iFrag) = 0;
    virtual HRESULT WINAPI InsertTextFrag(long iFrag,BSTR bstrInsert,IMarkupPointer *pPointerInsert) = 0;
    virtual HRESULT WINAPI FindTextFragFromMarkupPointer(IMarkupPointer *pPointerFind,long *piFrag,WINBOOL *pfFragFound) = 0;
  };
#else
  typedef struct IMarkupTextFragsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IMarkupTextFrags *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IMarkupTextFrags *This);
      ULONG (WINAPI *Release)(IMarkupTextFrags *This);
      HRESULT (WINAPI *GetTextFragCount)(IMarkupTextFrags *This,long *pcFrags);
      HRESULT (WINAPI *GetTextFrag)(IMarkupTextFrags *This,long iFrag,BSTR *pbstrFrag,IMarkupPointer *pPointerFrag);
      HRESULT (WINAPI *RemoveTextFrag)(IMarkupTextFrags *This,long iFrag);
      HRESULT (WINAPI *InsertTextFrag)(IMarkupTextFrags *This,long iFrag,BSTR bstrInsert,IMarkupPointer *pPointerInsert);
      HRESULT (WINAPI *FindTextFragFromMarkupPointer)(IMarkupTextFrags *This,IMarkupPointer *pPointerFind,long *piFrag,WINBOOL *pfFragFound);
    END_INTERFACE
  } IMarkupTextFragsVtbl;
  interface IMarkupTextFrags {
    CONST_VTBL struct IMarkupTextFragsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IMarkupTextFrags_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMarkupTextFrags_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMarkupTextFrags_Release(This) (This)->lpVtbl->Release(This)
#define IMarkupTextFrags_GetTextFragCount(This,pcFrags) (This)->lpVtbl->GetTextFragCount(This,pcFrags)
#define IMarkupTextFrags_GetTextFrag(This,iFrag,pbstrFrag,pPointerFrag) (This)->lpVtbl->GetTextFrag(This,iFrag,pbstrFrag,pPointerFrag)
#define IMarkupTextFrags_RemoveTextFrag(This,iFrag) (This)->lpVtbl->RemoveTextFrag(This,iFrag)
#define IMarkupTextFrags_InsertTextFrag(This,iFrag,bstrInsert,pPointerInsert) (This)->lpVtbl->InsertTextFrag(This,iFrag,bstrInsert,pPointerInsert)
#define IMarkupTextFrags_FindTextFragFromMarkupPointer(This,pPointerFind,piFrag,pfFragFound) (This)->lpVtbl->FindTextFragFromMarkupPointer(This,pPointerFind,piFrag,pfFragFound)
#endif
#endif

  HRESULT WINAPI IMarkupTextFrags_GetTextFragCount_Proxy(IMarkupTextFrags *This,long *pcFrags);
  void __RPC_STUB IMarkupTextFrags_GetTextFragCount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupTextFrags_GetTextFrag_Proxy(IMarkupTextFrags *This,long iFrag,BSTR *pbstrFrag,IMarkupPointer *pPointerFrag);
  void __RPC_STUB IMarkupTextFrags_GetTextFrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupTextFrags_RemoveTextFrag_Proxy(IMarkupTextFrags *This,long iFrag);
  void __RPC_STUB IMarkupTextFrags_RemoveTextFrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupTextFrags_InsertTextFrag_Proxy(IMarkupTextFrags *This,long iFrag,BSTR bstrInsert,IMarkupPointer *pPointerInsert);
  void __RPC_STUB IMarkupTextFrags_InsertTextFrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IMarkupTextFrags_FindTextFragFromMarkupPointer_Proxy(IMarkupTextFrags *This,IMarkupPointer *pPointerFind,long *piFrag,WINBOOL *pfFragFound);
  void __RPC_STUB IMarkupTextFrags_FindTextFragFromMarkupPointer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IXMLGenericParse_INTERFACE_DEFINED__
#define __IXMLGenericParse_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IXMLGenericParse;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IXMLGenericParse : public IUnknown {
  public:
    virtual HRESULT WINAPI SetGenericParse(VARIANT_BOOL fDoGeneric) = 0;
  };
#else
  typedef struct IXMLGenericParseVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IXMLGenericParse *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IXMLGenericParse *This);
      ULONG (WINAPI *Release)(IXMLGenericParse *This);
      HRESULT (WINAPI *SetGenericParse)(IXMLGenericParse *This,VARIANT_BOOL fDoGeneric);
    END_INTERFACE
  } IXMLGenericParseVtbl;
  interface IXMLGenericParse {
    CONST_VTBL struct IXMLGenericParseVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IXMLGenericParse_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXMLGenericParse_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXMLGenericParse_Release(This) (This)->lpVtbl->Release(This)
#define IXMLGenericParse_SetGenericParse(This,fDoGeneric) (This)->lpVtbl->SetGenericParse(This,fDoGeneric)
#endif
#endif

  HRESULT WINAPI IXMLGenericParse_SetGenericParse_Proxy(IXMLGenericParse *This,VARIANT_BOOL fDoGeneric);
  void __RPC_STUB IXMLGenericParse_SetGenericParse_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditHost_INTERFACE_DEFINED__
#define __IHTMLEditHost_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditHost;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLEditHost : public IUnknown {
  public:
    virtual HRESULT WINAPI SnapRect(IHTMLElement *pIElement,RECT *prcNew,ELEMENT_CORNER eHandle) = 0;
  };
#else
  typedef struct IHTMLEditHostVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLEditHost *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLEditHost *This);
      ULONG (WINAPI *Release)(IHTMLEditHost *This);
      HRESULT (WINAPI *SnapRect)(IHTMLEditHost *This,IHTMLElement *pIElement,RECT *prcNew,ELEMENT_CORNER eHandle);
    END_INTERFACE
  } IHTMLEditHostVtbl;
  interface IHTMLEditHost {
    CONST_VTBL struct IHTMLEditHostVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLEditHost_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLEditHost_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLEditHost_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLEditHost_SnapRect(This,pIElement,prcNew,eHandle) (This)->lpVtbl->SnapRect(This,pIElement,prcNew,eHandle)
#endif
#endif

  HRESULT WINAPI IHTMLEditHost_SnapRect_Proxy(IHTMLEditHost *This,IHTMLElement *pIElement,RECT *prcNew,ELEMENT_CORNER eHandle);
  void __RPC_STUB IHTMLEditHost_SnapRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditHost2_INTERFACE_DEFINED__
#define __IHTMLEditHost2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditHost2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLEditHost2 : public IHTMLEditHost {
  public:
    virtual HRESULT WINAPI PreDrag(void) = 0;
  };
#else
  typedef struct IHTMLEditHost2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLEditHost2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLEditHost2 *This);
      ULONG (WINAPI *Release)(IHTMLEditHost2 *This);
      HRESULT (WINAPI *SnapRect)(IHTMLEditHost2 *This,IHTMLElement *pIElement,RECT *prcNew,ELEMENT_CORNER eHandle);
      HRESULT (WINAPI *PreDrag)(IHTMLEditHost2 *This);
    END_INTERFACE
  } IHTMLEditHost2Vtbl;
  interface IHTMLEditHost2 {
    CONST_VTBL struct IHTMLEditHost2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLEditHost2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLEditHost2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLEditHost2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLEditHost2_SnapRect(This,pIElement,prcNew,eHandle) (This)->lpVtbl->SnapRect(This,pIElement,prcNew,eHandle)
#define IHTMLEditHost2_PreDrag(This) (This)->lpVtbl->PreDrag(This)
#endif
#endif

  HRESULT WINAPI IHTMLEditHost2_PreDrag_Proxy(IHTMLEditHost2 *This);
  void __RPC_STUB IHTMLEditHost2_PreDrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISequenceNumber_INTERFACE_DEFINED__
#define __ISequenceNumber_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISequenceNumber;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ISequenceNumber : public IUnknown {
  public:
    virtual HRESULT WINAPI GetSequenceNumber(long nCurrent,long *pnNew) = 0;
  };
#else
  typedef struct ISequenceNumberVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ISequenceNumber *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ISequenceNumber *This);
      ULONG (WINAPI *Release)(ISequenceNumber *This);
      HRESULT (WINAPI *GetSequenceNumber)(ISequenceNumber *This,long nCurrent,long *pnNew);
    END_INTERFACE
  } ISequenceNumberVtbl;
  interface ISequenceNumber {
    CONST_VTBL struct ISequenceNumberVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ISequenceNumber_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISequenceNumber_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISequenceNumber_Release(This) (This)->lpVtbl->Release(This)
#define ISequenceNumber_GetSequenceNumber(This,nCurrent,pnNew) (This)->lpVtbl->GetSequenceNumber(This,nCurrent,pnNew)
#endif
#endif

  HRESULT WINAPI ISequenceNumber_GetSequenceNumber_Proxy(ISequenceNumber *This,long nCurrent,long *pnNew);
  void __RPC_STUB ISequenceNumber_GetSequenceNumber_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IIMEServices_INTERFACE_DEFINED__
#define __IIMEServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IIMEServices;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IIMEServices : public IUnknown {
  public:
    virtual HRESULT WINAPI GetActiveIMM(IActiveIMMApp **ppActiveIMM) = 0;
  };
#else
  typedef struct IIMEServicesVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IIMEServices *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IIMEServices *This);
      ULONG (WINAPI *Release)(IIMEServices *This);
      HRESULT (WINAPI *GetActiveIMM)(IIMEServices *This,IActiveIMMApp **ppActiveIMM);
    END_INTERFACE
  } IIMEServicesVtbl;
  interface IIMEServices {
    CONST_VTBL struct IIMEServicesVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IIMEServices_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IIMEServices_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IIMEServices_Release(This) (This)->lpVtbl->Release(This)
#define IIMEServices_GetActiveIMM(This,ppActiveIMM) (This)->lpVtbl->GetActiveIMM(This,ppActiveIMM)
#endif
#endif

  HRESULT WINAPI IIMEServices_GetActiveIMM_Proxy(IIMEServices *This,IActiveIMMApp **ppActiveIMM);
  void __RPC_STUB IIMEServices_GetActiveIMM_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISelectionServicesListener_INTERFACE_DEFINED__
#define __ISelectionServicesListener_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISelectionServicesListener;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ISelectionServicesListener : public IUnknown {
  public:
    virtual HRESULT WINAPI BeginSelectionUndo(void) = 0;
    virtual HRESULT WINAPI EndSelectionUndo(void) = 0;
    virtual HRESULT WINAPI OnSelectedElementExit(IMarkupPointer *pIElementStart,IMarkupPointer *pIElementEnd,IMarkupPointer *pIElementContentStart,IMarkupPointer *pIElementContentEnd) = 0;
    virtual HRESULT WINAPI OnChangeType(SELECTION_TYPE eType,ISelectionServicesListener *pIListener) = 0;
    virtual HRESULT WINAPI GetTypeDetail(BSTR *pTypeDetail) = 0;
  };
#else
  typedef struct ISelectionServicesListenerVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ISelectionServicesListener *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ISelectionServicesListener *This);
      ULONG (WINAPI *Release)(ISelectionServicesListener *This);
      HRESULT (WINAPI *BeginSelectionUndo)(ISelectionServicesListener *This);
      HRESULT (WINAPI *EndSelectionUndo)(ISelectionServicesListener *This);
      HRESULT (WINAPI *OnSelectedElementExit)(ISelectionServicesListener *This,IMarkupPointer *pIElementStart,IMarkupPointer *pIElementEnd,IMarkupPointer *pIElementContentStart,IMarkupPointer *pIElementContentEnd);
      HRESULT (WINAPI *OnChangeType)(ISelectionServicesListener *This,SELECTION_TYPE eType,ISelectionServicesListener *pIListener);
      HRESULT (WINAPI *GetTypeDetail)(ISelectionServicesListener *This,BSTR *pTypeDetail);
    END_INTERFACE
  } ISelectionServicesListenerVtbl;
  interface ISelectionServicesListener {
    CONST_VTBL struct ISelectionServicesListenerVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ISelectionServicesListener_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISelectionServicesListener_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISelectionServicesListener_Release(This) (This)->lpVtbl->Release(This)
#define ISelectionServicesListener_BeginSelectionUndo(This) (This)->lpVtbl->BeginSelectionUndo(This)
#define ISelectionServicesListener_EndSelectionUndo(This) (This)->lpVtbl->EndSelectionUndo(This)
#define ISelectionServicesListener_OnSelectedElementExit(This,pIElementStart,pIElementEnd,pIElementContentStart,pIElementContentEnd) (This)->lpVtbl->OnSelectedElementExit(This,pIElementStart,pIElementEnd,pIElementContentStart,pIElementContentEnd)
#define ISelectionServicesListener_OnChangeType(This,eType,pIListener) (This)->lpVtbl->OnChangeType(This,eType,pIListener)
#define ISelectionServicesListener_GetTypeDetail(This,pTypeDetail) (This)->lpVtbl->GetTypeDetail(This,pTypeDetail)
#endif
#endif

  HRESULT WINAPI ISelectionServicesListener_BeginSelectionUndo_Proxy(ISelectionServicesListener *This);
  void __RPC_STUB ISelectionServicesListener_BeginSelectionUndo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServicesListener_EndSelectionUndo_Proxy(ISelectionServicesListener *This);
  void __RPC_STUB ISelectionServicesListener_EndSelectionUndo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServicesListener_OnSelectedElementExit_Proxy(ISelectionServicesListener *This,IMarkupPointer *pIElementStart,IMarkupPointer *pIElementEnd,IMarkupPointer *pIElementContentStart,IMarkupPointer *pIElementContentEnd);
  void __RPC_STUB ISelectionServicesListener_OnSelectedElementExit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServicesListener_OnChangeType_Proxy(ISelectionServicesListener *This,SELECTION_TYPE eType,ISelectionServicesListener *pIListener);
  void __RPC_STUB ISelectionServicesListener_OnChangeType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServicesListener_GetTypeDetail_Proxy(ISelectionServicesListener *This,BSTR *pTypeDetail);
  void __RPC_STUB ISelectionServicesListener_GetTypeDetail_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __ISelectionServices_INTERFACE_DEFINED__
#define __ISelectionServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_ISelectionServices;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct ISelectionServices : public IUnknown {
  public:
    virtual HRESULT WINAPI SetSelectionType(SELECTION_TYPE eType,ISelectionServicesListener *pIListener) = 0;
    virtual HRESULT WINAPI GetMarkupContainer(IMarkupContainer **ppIContainer) = 0;
    virtual HRESULT WINAPI AddSegment(IMarkupPointer *pIStart,IMarkupPointer *pIEnd,ISegment **ppISegmentAdded) = 0;
    virtual HRESULT WINAPI AddElementSegment(IHTMLElement *pIElement,IElementSegment **ppISegmentAdded) = 0;
    virtual HRESULT WINAPI RemoveSegment(ISegment *pISegment) = 0;
    virtual HRESULT WINAPI GetSelectionServicesListener(ISelectionServicesListener **ppISelectionServicesListener) = 0;
  };
#else
  typedef struct ISelectionServicesVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(ISelectionServices *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(ISelectionServices *This);
      ULONG (WINAPI *Release)(ISelectionServices *This);
      HRESULT (WINAPI *SetSelectionType)(ISelectionServices *This,SELECTION_TYPE eType,ISelectionServicesListener *pIListener);
      HRESULT (WINAPI *GetMarkupContainer)(ISelectionServices *This,IMarkupContainer **ppIContainer);
      HRESULT (WINAPI *AddSegment)(ISelectionServices *This,IMarkupPointer *pIStart,IMarkupPointer *pIEnd,ISegment **ppISegmentAdded);
      HRESULT (WINAPI *AddElementSegment)(ISelectionServices *This,IHTMLElement *pIElement,IElementSegment **ppISegmentAdded);
      HRESULT (WINAPI *RemoveSegment)(ISelectionServices *This,ISegment *pISegment);
      HRESULT (WINAPI *GetSelectionServicesListener)(ISelectionServices *This,ISelectionServicesListener **ppISelectionServicesListener);
    END_INTERFACE
  } ISelectionServicesVtbl;
  interface ISelectionServices {
    CONST_VTBL struct ISelectionServicesVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define ISelectionServices_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISelectionServices_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISelectionServices_Release(This) (This)->lpVtbl->Release(This)
#define ISelectionServices_SetSelectionType(This,eType,pIListener) (This)->lpVtbl->SetSelectionType(This,eType,pIListener)
#define ISelectionServices_GetMarkupContainer(This,ppIContainer) (This)->lpVtbl->GetMarkupContainer(This,ppIContainer)
#define ISelectionServices_AddSegment(This,pIStart,pIEnd,ppISegmentAdded) (This)->lpVtbl->AddSegment(This,pIStart,pIEnd,ppISegmentAdded)
#define ISelectionServices_AddElementSegment(This,pIElement,ppISegmentAdded) (This)->lpVtbl->AddElementSegment(This,pIElement,ppISegmentAdded)
#define ISelectionServices_RemoveSegment(This,pISegment) (This)->lpVtbl->RemoveSegment(This,pISegment)
#define ISelectionServices_GetSelectionServicesListener(This,ppISelectionServicesListener) (This)->lpVtbl->GetSelectionServicesListener(This,ppISelectionServicesListener)
#endif
#endif

  HRESULT WINAPI ISelectionServices_SetSelectionType_Proxy(ISelectionServices *This,SELECTION_TYPE eType,ISelectionServicesListener *pIListener);
  void __RPC_STUB ISelectionServices_SetSelectionType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_GetMarkupContainer_Proxy(ISelectionServices *This,IMarkupContainer **ppIContainer);
  void __RPC_STUB ISelectionServices_GetMarkupContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_AddSegment_Proxy(ISelectionServices *This,IMarkupPointer *pIStart,IMarkupPointer *pIEnd,ISegment **ppISegmentAdded);
  void __RPC_STUB ISelectionServices_AddSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_AddElementSegment_Proxy(ISelectionServices *This,IHTMLElement *pIElement,IElementSegment **ppISegmentAdded);
  void __RPC_STUB ISelectionServices_AddElementSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_RemoveSegment_Proxy(ISelectionServices *This,ISegment *pISegment);
  void __RPC_STUB ISelectionServices_RemoveSegment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI ISelectionServices_GetSelectionServicesListener_Proxy(ISelectionServices *This,ISelectionServicesListener **ppISelectionServicesListener);
  void __RPC_STUB ISelectionServices_GetSelectionServicesListener_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditDesigner_INTERFACE_DEFINED__
#define __IHTMLEditDesigner_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditDesigner;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLEditDesigner : public IUnknown {
  public:
    virtual HRESULT WINAPI PreHandleEvent(DISPID inEvtDispId,IHTMLEventObj *pIEventObj) = 0;
    virtual HRESULT WINAPI PostHandleEvent(DISPID inEvtDispId,IHTMLEventObj *pIEventObj) = 0;
    virtual HRESULT WINAPI TranslateAccelerator(DISPID inEvtDispId,IHTMLEventObj *pIEventObj) = 0;
    virtual HRESULT WINAPI PostEditorEventNotify(DISPID inEvtDispId,IHTMLEventObj *pIEventObj) = 0;
  };
#else
  typedef struct IHTMLEditDesignerVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLEditDesigner *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLEditDesigner *This);
      ULONG (WINAPI *Release)(IHTMLEditDesigner *This);
      HRESULT (WINAPI *PreHandleEvent)(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
      HRESULT (WINAPI *PostHandleEvent)(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
      HRESULT (WINAPI *TranslateAccelerator)(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
      HRESULT (WINAPI *PostEditorEventNotify)(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
    END_INTERFACE
  } IHTMLEditDesignerVtbl;
  interface IHTMLEditDesigner {
    CONST_VTBL struct IHTMLEditDesignerVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLEditDesigner_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLEditDesigner_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLEditDesigner_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLEditDesigner_PreHandleEvent(This,inEvtDispId,pIEventObj) (This)->lpVtbl->PreHandleEvent(This,inEvtDispId,pIEventObj)
#define IHTMLEditDesigner_PostHandleEvent(This,inEvtDispId,pIEventObj) (This)->lpVtbl->PostHandleEvent(This,inEvtDispId,pIEventObj)
#define IHTMLEditDesigner_TranslateAccelerator(This,inEvtDispId,pIEventObj) (This)->lpVtbl->TranslateAccelerator(This,inEvtDispId,pIEventObj)
#define IHTMLEditDesigner_PostEditorEventNotify(This,inEvtDispId,pIEventObj) (This)->lpVtbl->PostEditorEventNotify(This,inEvtDispId,pIEventObj)
#endif
#endif

  HRESULT WINAPI IHTMLEditDesigner_PreHandleEvent_Proxy(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
  void __RPC_STUB IHTMLEditDesigner_PreHandleEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditDesigner_PostHandleEvent_Proxy(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
  void __RPC_STUB IHTMLEditDesigner_PostHandleEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditDesigner_TranslateAccelerator_Proxy(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
  void __RPC_STUB IHTMLEditDesigner_TranslateAccelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditDesigner_PostEditorEventNotify_Proxy(IHTMLEditDesigner *This,DISPID inEvtDispId,IHTMLEventObj *pIEventObj);
  void __RPC_STUB IHTMLEditDesigner_PostEditorEventNotify_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditServices_INTERFACE_DEFINED__
#define __IHTMLEditServices_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditServices;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLEditServices : public IUnknown {
  public:
    virtual HRESULT WINAPI AddDesigner(IHTMLEditDesigner *pIDesigner) = 0;
    virtual HRESULT WINAPI RemoveDesigner(IHTMLEditDesigner *pIDesigner) = 0;
    virtual HRESULT WINAPI GetSelectionServices(IMarkupContainer *pIContainer,ISelectionServices **ppSelSvc) = 0;
    virtual HRESULT WINAPI MoveToSelectionAnchor(IMarkupPointer *pIStartAnchor) = 0;
    virtual HRESULT WINAPI MoveToSelectionEnd(IMarkupPointer *pIEndAnchor) = 0;
    virtual HRESULT WINAPI SelectRange(IMarkupPointer *pStart,IMarkupPointer *pEnd,SELECTION_TYPE eType) = 0;
  };
#else
  typedef struct IHTMLEditServicesVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLEditServices *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLEditServices *This);
      ULONG (WINAPI *Release)(IHTMLEditServices *This);
      HRESULT (WINAPI *AddDesigner)(IHTMLEditServices *This,IHTMLEditDesigner *pIDesigner);
      HRESULT (WINAPI *RemoveDesigner)(IHTMLEditServices *This,IHTMLEditDesigner *pIDesigner);
      HRESULT (WINAPI *GetSelectionServices)(IHTMLEditServices *This,IMarkupContainer *pIContainer,ISelectionServices **ppSelSvc);
      HRESULT (WINAPI *MoveToSelectionAnchor)(IHTMLEditServices *This,IMarkupPointer *pIStartAnchor);
      HRESULT (WINAPI *MoveToSelectionEnd)(IHTMLEditServices *This,IMarkupPointer *pIEndAnchor);
      HRESULT (WINAPI *SelectRange)(IHTMLEditServices *This,IMarkupPointer *pStart,IMarkupPointer *pEnd,SELECTION_TYPE eType);
    END_INTERFACE
  } IHTMLEditServicesVtbl;
  interface IHTMLEditServices {
    CONST_VTBL struct IHTMLEditServicesVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLEditServices_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLEditServices_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLEditServices_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLEditServices_AddDesigner(This,pIDesigner) (This)->lpVtbl->AddDesigner(This,pIDesigner)
#define IHTMLEditServices_RemoveDesigner(This,pIDesigner) (This)->lpVtbl->RemoveDesigner(This,pIDesigner)
#define IHTMLEditServices_GetSelectionServices(This,pIContainer,ppSelSvc) (This)->lpVtbl->GetSelectionServices(This,pIContainer,ppSelSvc)
#define IHTMLEditServices_MoveToSelectionAnchor(This,pIStartAnchor) (This)->lpVtbl->MoveToSelectionAnchor(This,pIStartAnchor)
#define IHTMLEditServices_MoveToSelectionEnd(This,pIEndAnchor) (This)->lpVtbl->MoveToSelectionEnd(This,pIEndAnchor)
#define IHTMLEditServices_SelectRange(This,pStart,pEnd,eType) (This)->lpVtbl->SelectRange(This,pStart,pEnd,eType)
#endif
#endif

  HRESULT WINAPI IHTMLEditServices_AddDesigner_Proxy(IHTMLEditServices *This,IHTMLEditDesigner *pIDesigner);
  void __RPC_STUB IHTMLEditServices_AddDesigner_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_RemoveDesigner_Proxy(IHTMLEditServices *This,IHTMLEditDesigner *pIDesigner);
  void __RPC_STUB IHTMLEditServices_RemoveDesigner_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_GetSelectionServices_Proxy(IHTMLEditServices *This,IMarkupContainer *pIContainer,ISelectionServices **ppSelSvc);
  void __RPC_STUB IHTMLEditServices_GetSelectionServices_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_MoveToSelectionAnchor_Proxy(IHTMLEditServices *This,IMarkupPointer *pIStartAnchor);
  void __RPC_STUB IHTMLEditServices_MoveToSelectionAnchor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_MoveToSelectionEnd_Proxy(IHTMLEditServices *This,IMarkupPointer *pIEndAnchor);
  void __RPC_STUB IHTMLEditServices_MoveToSelectionEnd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices_SelectRange_Proxy(IHTMLEditServices *This,IMarkupPointer *pStart,IMarkupPointer *pEnd,SELECTION_TYPE eType);
  void __RPC_STUB IHTMLEditServices_SelectRange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLEditServices2_INTERFACE_DEFINED__
#define __IHTMLEditServices2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLEditServices2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLEditServices2 : public IHTMLEditServices {
  public:
    virtual HRESULT WINAPI MoveToSelectionAnchorEx(IDisplayPointer *pIStartAnchor) = 0;
    virtual HRESULT WINAPI MoveToSelectionEndEx(IDisplayPointer *pIEndAnchor) = 0;
    virtual HRESULT WINAPI FreezeVirtualCaretPos(WINBOOL fReCompute) = 0;
    virtual HRESULT WINAPI UnFreezeVirtualCaretPos(WINBOOL fReset) = 0;
  };
#else
  typedef struct IHTMLEditServices2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLEditServices2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLEditServices2 *This);
      ULONG (WINAPI *Release)(IHTMLEditServices2 *This);
      HRESULT (WINAPI *AddDesigner)(IHTMLEditServices2 *This,IHTMLEditDesigner *pIDesigner);
      HRESULT (WINAPI *RemoveDesigner)(IHTMLEditServices2 *This,IHTMLEditDesigner *pIDesigner);
      HRESULT (WINAPI *GetSelectionServices)(IHTMLEditServices2 *This,IMarkupContainer *pIContainer,ISelectionServices **ppSelSvc);
      HRESULT (WINAPI *MoveToSelectionAnchor)(IHTMLEditServices2 *This,IMarkupPointer *pIStartAnchor);
      HRESULT (WINAPI *MoveToSelectionEnd)(IHTMLEditServices2 *This,IMarkupPointer *pIEndAnchor);
      HRESULT (WINAPI *SelectRange)(IHTMLEditServices2 *This,IMarkupPointer *pStart,IMarkupPointer *pEnd,SELECTION_TYPE eType);
      HRESULT (WINAPI *MoveToSelectionAnchorEx)(IHTMLEditServices2 *This,IDisplayPointer *pIStartAnchor);
      HRESULT (WINAPI *MoveToSelectionEndEx)(IHTMLEditServices2 *This,IDisplayPointer *pIEndAnchor);
      HRESULT (WINAPI *FreezeVirtualCaretPos)(IHTMLEditServices2 *This,WINBOOL fReCompute);
      HRESULT (WINAPI *UnFreezeVirtualCaretPos)(IHTMLEditServices2 *This,WINBOOL fReset);
    END_INTERFACE
  } IHTMLEditServices2Vtbl;
  interface IHTMLEditServices2 {
    CONST_VTBL struct IHTMLEditServices2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLEditServices2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLEditServices2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLEditServices2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLEditServices2_AddDesigner(This,pIDesigner) (This)->lpVtbl->AddDesigner(This,pIDesigner)
#define IHTMLEditServices2_RemoveDesigner(This,pIDesigner) (This)->lpVtbl->RemoveDesigner(This,pIDesigner)
#define IHTMLEditServices2_GetSelectionServices(This,pIContainer,ppSelSvc) (This)->lpVtbl->GetSelectionServices(This,pIContainer,ppSelSvc)
#define IHTMLEditServices2_MoveToSelectionAnchor(This,pIStartAnchor) (This)->lpVtbl->MoveToSelectionAnchor(This,pIStartAnchor)
#define IHTMLEditServices2_MoveToSelectionEnd(This,pIEndAnchor) (This)->lpVtbl->MoveToSelectionEnd(This,pIEndAnchor)
#define IHTMLEditServices2_SelectRange(This,pStart,pEnd,eType) (This)->lpVtbl->SelectRange(This,pStart,pEnd,eType)
#define IHTMLEditServices2_MoveToSelectionAnchorEx(This,pIStartAnchor) (This)->lpVtbl->MoveToSelectionAnchorEx(This,pIStartAnchor)
#define IHTMLEditServices2_MoveToSelectionEndEx(This,pIEndAnchor) (This)->lpVtbl->MoveToSelectionEndEx(This,pIEndAnchor)
#define IHTMLEditServices2_FreezeVirtualCaretPos(This,fReCompute) (This)->lpVtbl->FreezeVirtualCaretPos(This,fReCompute)
#define IHTMLEditServices2_UnFreezeVirtualCaretPos(This,fReset) (This)->lpVtbl->UnFreezeVirtualCaretPos(This,fReset)
#endif
#endif

  HRESULT WINAPI IHTMLEditServices2_MoveToSelectionAnchorEx_Proxy(IHTMLEditServices2 *This,IDisplayPointer *pIStartAnchor);
  void __RPC_STUB IHTMLEditServices2_MoveToSelectionAnchorEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices2_MoveToSelectionEndEx_Proxy(IHTMLEditServices2 *This,IDisplayPointer *pIEndAnchor);
  void __RPC_STUB IHTMLEditServices2_MoveToSelectionEndEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices2_FreezeVirtualCaretPos_Proxy(IHTMLEditServices2 *This,WINBOOL fReCompute);
  void __RPC_STUB IHTMLEditServices2_FreezeVirtualCaretPos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLEditServices2_UnFreezeVirtualCaretPos_Proxy(IHTMLEditServices2 *This,WINBOOL fReset);
  void __RPC_STUB IHTMLEditServices2_UnFreezeVirtualCaretPos_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLComputedStyle_INTERFACE_DEFINED__
#define __IHTMLComputedStyle_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLComputedStyle;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLComputedStyle : public IUnknown {
  public:
    virtual HRESULT WINAPI get_bold(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_italic(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_underline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_overline(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_strikeOut(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_subScript(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_superScript(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_explicitFace(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_fontWeight(long *p) = 0;
    virtual HRESULT WINAPI get_fontSize(long *p) = 0;
    virtual HRESULT WINAPI get_fontName(TCHAR *p) = 0;
    virtual HRESULT WINAPI get_hasBgColor(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_textColor(DWORD *p) = 0;
    virtual HRESULT WINAPI get_backgroundColor(DWORD *p) = 0;
    virtual HRESULT WINAPI get_preFormatted(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_direction(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_blockDirection(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI get_OL(VARIANT_BOOL *p) = 0;
    virtual HRESULT WINAPI IsEqual(IHTMLComputedStyle *pComputedStyle,VARIANT_BOOL *pfEqual) = 0;
  };
#else
  typedef struct IHTMLComputedStyleVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLComputedStyle *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLComputedStyle *This);
      ULONG (WINAPI *Release)(IHTMLComputedStyle *This);
      HRESULT (WINAPI *get_bold)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_italic)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_underline)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_overline)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_strikeOut)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_subScript)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_superScript)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_explicitFace)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_fontWeight)(IHTMLComputedStyle *This,long *p);
      HRESULT (WINAPI *get_fontSize)(IHTMLComputedStyle *This,long *p);
      HRESULT (WINAPI *get_fontName)(IHTMLComputedStyle *This,TCHAR *p);
      HRESULT (WINAPI *get_hasBgColor)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_textColor)(IHTMLComputedStyle *This,DWORD *p);
      HRESULT (WINAPI *get_backgroundColor)(IHTMLComputedStyle *This,DWORD *p);
      HRESULT (WINAPI *get_preFormatted)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_direction)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_blockDirection)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *get_OL)(IHTMLComputedStyle *This,VARIANT_BOOL *p);
      HRESULT (WINAPI *IsEqual)(IHTMLComputedStyle *This,IHTMLComputedStyle *pComputedStyle,VARIANT_BOOL *pfEqual);
    END_INTERFACE
  } IHTMLComputedStyleVtbl;
  interface IHTMLComputedStyle {
    CONST_VTBL struct IHTMLComputedStyleVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLComputedStyle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLComputedStyle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLComputedStyle_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLComputedStyle_get_bold(This,p) (This)->lpVtbl->get_bold(This,p)
#define IHTMLComputedStyle_get_italic(This,p) (This)->lpVtbl->get_italic(This,p)
#define IHTMLComputedStyle_get_underline(This,p) (This)->lpVtbl->get_underline(This,p)
#define IHTMLComputedStyle_get_overline(This,p) (This)->lpVtbl->get_overline(This,p)
#define IHTMLComputedStyle_get_strikeOut(This,p) (This)->lpVtbl->get_strikeOut(This,p)
#define IHTMLComputedStyle_get_subScript(This,p) (This)->lpVtbl->get_subScript(This,p)
#define IHTMLComputedStyle_get_superScript(This,p) (This)->lpVtbl->get_superScript(This,p)
#define IHTMLComputedStyle_get_explicitFace(This,p) (This)->lpVtbl->get_explicitFace(This,p)
#define IHTMLComputedStyle_get_fontWeight(This,p) (This)->lpVtbl->get_fontWeight(This,p)
#define IHTMLComputedStyle_get_fontSize(This,p) (This)->lpVtbl->get_fontSize(This,p)
#define IHTMLComputedStyle_get_fontName(This,p) (This)->lpVtbl->get_fontName(This,p)
#define IHTMLComputedStyle_get_hasBgColor(This,p) (This)->lpVtbl->get_hasBgColor(This,p)
#define IHTMLComputedStyle_get_textColor(This,p) (This)->lpVtbl->get_textColor(This,p)
#define IHTMLComputedStyle_get_backgroundColor(This,p) (This)->lpVtbl->get_backgroundColor(This,p)
#define IHTMLComputedStyle_get_preFormatted(This,p) (This)->lpVtbl->get_preFormatted(This,p)
#define IHTMLComputedStyle_get_direction(This,p) (This)->lpVtbl->get_direction(This,p)
#define IHTMLComputedStyle_get_blockDirection(This,p) (This)->lpVtbl->get_blockDirection(This,p)
#define IHTMLComputedStyle_get_OL(This,p) (This)->lpVtbl->get_OL(This,p)
#define IHTMLComputedStyle_IsEqual(This,pComputedStyle,pfEqual) (This)->lpVtbl->IsEqual(This,pComputedStyle,pfEqual)
#endif
#endif

  HRESULT WINAPI IHTMLComputedStyle_get_bold_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_bold_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_italic_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_italic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_underline_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_underline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_overline_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_overline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_strikeOut_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_strikeOut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_subScript_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_subScript_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_superScript_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_superScript_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_explicitFace_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_explicitFace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_fontWeight_Proxy(IHTMLComputedStyle *This,long *p);
  void __RPC_STUB IHTMLComputedStyle_get_fontWeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_fontSize_Proxy(IHTMLComputedStyle *This,long *p);
  void __RPC_STUB IHTMLComputedStyle_get_fontSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_fontName_Proxy(IHTMLComputedStyle *This,TCHAR *p);
  void __RPC_STUB IHTMLComputedStyle_get_fontName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_hasBgColor_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_hasBgColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_textColor_Proxy(IHTMLComputedStyle *This,DWORD *p);
  void __RPC_STUB IHTMLComputedStyle_get_textColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_backgroundColor_Proxy(IHTMLComputedStyle *This,DWORD *p);
  void __RPC_STUB IHTMLComputedStyle_get_backgroundColor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_preFormatted_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_preFormatted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_direction_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_direction_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_blockDirection_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_blockDirection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_get_OL_Proxy(IHTMLComputedStyle *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLComputedStyle_get_OL_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLComputedStyle_IsEqual_Proxy(IHTMLComputedStyle *This,IHTMLComputedStyle *pComputedStyle,VARIANT_BOOL *pfEqual);
  void __RPC_STUB IHTMLComputedStyle_IsEqual_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_HtmlDlgSafeHelper;
#ifdef __cplusplus
  class HtmlDlgSafeHelper;
#endif
  EXTERN_C const CLSID CLSID_BlockFormats;
#ifdef __cplusplus
  class BlockFormats;
#endif
  EXTERN_C const CLSID CLSID_FontNames;
#ifdef __cplusplus
  class FontNames;
#endif

#ifndef __HTMLNamespaceEvents_DISPINTERFACE_DEFINED__
#define __HTMLNamespaceEvents_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_HTMLNamespaceEvents;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct HTMLNamespaceEvents : public IDispatch {
  };
#else
  typedef struct HTMLNamespaceEventsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(HTMLNamespaceEvents *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(HTMLNamespaceEvents *This);
      ULONG (WINAPI *Release)(HTMLNamespaceEvents *This);
      HRESULT (WINAPI *GetTypeInfoCount)(HTMLNamespaceEvents *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(HTMLNamespaceEvents *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(HTMLNamespaceEvents *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(HTMLNamespaceEvents *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } HTMLNamespaceEventsVtbl;
  interface HTMLNamespaceEvents {
    CONST_VTBL struct HTMLNamespaceEventsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define HTMLNamespaceEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define HTMLNamespaceEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define HTMLNamespaceEvents_Release(This) (This)->lpVtbl->Release(This)
#define HTMLNamespaceEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define HTMLNamespaceEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define HTMLNamespaceEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define HTMLNamespaceEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

#ifndef __IHTMLNamespace_INTERFACE_DEFINED__
#define __IHTMLNamespace_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLNamespace;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLNamespace : public IDispatch {
  public:
    virtual HRESULT WINAPI get_name(BSTR *p) = 0;
    virtual HRESULT WINAPI get_urn(BSTR *p) = 0;
    virtual HRESULT WINAPI get_tagNames(IDispatch **p) = 0;
    virtual HRESULT WINAPI get_readyState(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_onreadystatechange(VARIANT v) = 0;
    virtual HRESULT WINAPI get_onreadystatechange(VARIANT *p) = 0;
    virtual HRESULT WINAPI doImport(BSTR bstrImplementationUrl) = 0;
    virtual HRESULT WINAPI attachEvent(BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult) = 0;
    virtual HRESULT WINAPI detachEvent(BSTR event,IDispatch *pDisp) = 0;
  };
#else
  typedef struct IHTMLNamespaceVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLNamespace *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLNamespace *This);
      ULONG (WINAPI *Release)(IHTMLNamespace *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLNamespace *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLNamespace *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLNamespace *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLNamespace *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_name)(IHTMLNamespace *This,BSTR *p);
      HRESULT (WINAPI *get_urn)(IHTMLNamespace *This,BSTR *p);
      HRESULT (WINAPI *get_tagNames)(IHTMLNamespace *This,IDispatch **p);
      HRESULT (WINAPI *get_readyState)(IHTMLNamespace *This,VARIANT *p);
      HRESULT (WINAPI *put_onreadystatechange)(IHTMLNamespace *This,VARIANT v);
      HRESULT (WINAPI *get_onreadystatechange)(IHTMLNamespace *This,VARIANT *p);
      HRESULT (WINAPI *doImport)(IHTMLNamespace *This,BSTR bstrImplementationUrl);
      HRESULT (WINAPI *attachEvent)(IHTMLNamespace *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
      HRESULT (WINAPI *detachEvent)(IHTMLNamespace *This,BSTR event,IDispatch *pDisp);
    END_INTERFACE
  } IHTMLNamespaceVtbl;
  interface IHTMLNamespace {
    CONST_VTBL struct IHTMLNamespaceVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLNamespace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLNamespace_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLNamespace_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLNamespace_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLNamespace_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLNamespace_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLNamespace_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLNamespace_get_name(This,p) (This)->lpVtbl->get_name(This,p)
#define IHTMLNamespace_get_urn(This,p) (This)->lpVtbl->get_urn(This,p)
#define IHTMLNamespace_get_tagNames(This,p) (This)->lpVtbl->get_tagNames(This,p)
#define IHTMLNamespace_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
#define IHTMLNamespace_put_onreadystatechange(This,v) (This)->lpVtbl->put_onreadystatechange(This,v)
#define IHTMLNamespace_get_onreadystatechange(This,p) (This)->lpVtbl->get_onreadystatechange(This,p)
#define IHTMLNamespace_doImport(This,bstrImplementationUrl) (This)->lpVtbl->doImport(This,bstrImplementationUrl)
#define IHTMLNamespace_attachEvent(This,event,pDisp,pfResult) (This)->lpVtbl->attachEvent(This,event,pDisp,pfResult)
#define IHTMLNamespace_detachEvent(This,event,pDisp) (This)->lpVtbl->detachEvent(This,event,pDisp)
#endif
#endif

  HRESULT WINAPI IHTMLNamespace_get_name_Proxy(IHTMLNamespace *This,BSTR *p);
  void __RPC_STUB IHTMLNamespace_get_name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_get_urn_Proxy(IHTMLNamespace *This,BSTR *p);
  void __RPC_STUB IHTMLNamespace_get_urn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_get_tagNames_Proxy(IHTMLNamespace *This,IDispatch **p);
  void __RPC_STUB IHTMLNamespace_get_tagNames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_get_readyState_Proxy(IHTMLNamespace *This,VARIANT *p);
  void __RPC_STUB IHTMLNamespace_get_readyState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_put_onreadystatechange_Proxy(IHTMLNamespace *This,VARIANT v);
  void __RPC_STUB IHTMLNamespace_put_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_get_onreadystatechange_Proxy(IHTMLNamespace *This,VARIANT *p);
  void __RPC_STUB IHTMLNamespace_get_onreadystatechange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_doImport_Proxy(IHTMLNamespace *This,BSTR bstrImplementationUrl);
  void __RPC_STUB IHTMLNamespace_doImport_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_attachEvent_Proxy(IHTMLNamespace *This,BSTR event,IDispatch *pDisp,VARIANT_BOOL *pfResult);
  void __RPC_STUB IHTMLNamespace_attachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespace_detachEvent_Proxy(IHTMLNamespace *This,BSTR event,IDispatch *pDisp);
  void __RPC_STUB IHTMLNamespace_detachEvent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLNamespaceCollection_INTERFACE_DEFINED__
#define __IHTMLNamespaceCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLNamespaceCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLNamespaceCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI item(VARIANT index,IDispatch **ppNamespace) = 0;
    virtual HRESULT WINAPI add(BSTR bstrNamespace,BSTR bstrUrn,VARIANT implementationUrl,IDispatch **ppNamespace) = 0;
  };
#else
  typedef struct IHTMLNamespaceCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLNamespaceCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLNamespaceCollection *This);
      ULONG (WINAPI *Release)(IHTMLNamespaceCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLNamespaceCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLNamespaceCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLNamespaceCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLNamespaceCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLNamespaceCollection *This,long *p);
      HRESULT (WINAPI *item)(IHTMLNamespaceCollection *This,VARIANT index,IDispatch **ppNamespace);
      HRESULT (WINAPI *add)(IHTMLNamespaceCollection *This,BSTR bstrNamespace,BSTR bstrUrn,VARIANT implementationUrl,IDispatch **ppNamespace);
    END_INTERFACE
  } IHTMLNamespaceCollectionVtbl;
  interface IHTMLNamespaceCollection {
    CONST_VTBL struct IHTMLNamespaceCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLNamespaceCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLNamespaceCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLNamespaceCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLNamespaceCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLNamespaceCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLNamespaceCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLNamespaceCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLNamespaceCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLNamespaceCollection_item(This,index,ppNamespace) (This)->lpVtbl->item(This,index,ppNamespace)
#define IHTMLNamespaceCollection_add(This,bstrNamespace,bstrUrn,implementationUrl,ppNamespace) (This)->lpVtbl->add(This,bstrNamespace,bstrUrn,implementationUrl,ppNamespace)
#endif
#endif

  HRESULT WINAPI IHTMLNamespaceCollection_get_length_Proxy(IHTMLNamespaceCollection *This,long *p);
  void __RPC_STUB IHTMLNamespaceCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespaceCollection_item_Proxy(IHTMLNamespaceCollection *This,VARIANT index,IDispatch **ppNamespace);
  void __RPC_STUB IHTMLNamespaceCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLNamespaceCollection_add_Proxy(IHTMLNamespaceCollection *This,BSTR bstrNamespace,BSTR bstrUrn,VARIANT implementationUrl,IDispatch **ppNamespace);
  void __RPC_STUB IHTMLNamespaceCollection_add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_HTMLNamespace;
#ifdef __cplusplus
  class HTMLNamespace;
#endif
  EXTERN_C const CLSID CLSID_HTMLNamespaceCollection;
#ifdef __cplusplus
  class HTMLNamespaceCollection;
#endif

#ifndef __IHTMLPainter_INTERFACE_DEFINED__
#define __IHTMLPainter_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPainter;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLPainter : public IUnknown {
  public:
    virtual HRESULT WINAPI Draw(RECT rcBounds,RECT rcUpdate,LONG lDrawFlags,HDC hdc,LPVOID pvDrawObject) = 0;
    virtual HRESULT WINAPI OnResize(SIZE size) = 0;
    virtual HRESULT WINAPI GetPainterInfo(HTML_PAINTER_INFO *pInfo) = 0;
    virtual HRESULT WINAPI HitTestPoint(POINT pt,WINBOOL *pbHit,LONG *plPartID) = 0;
  };
#else
  typedef struct IHTMLPainterVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLPainter *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLPainter *This);
      ULONG (WINAPI *Release)(IHTMLPainter *This);
      HRESULT (WINAPI *Draw)(IHTMLPainter *This,RECT rcBounds,RECT rcUpdate,LONG lDrawFlags,HDC hdc,LPVOID pvDrawObject);
      HRESULT (WINAPI *OnResize)(IHTMLPainter *This,SIZE size);
      HRESULT (WINAPI *GetPainterInfo)(IHTMLPainter *This,HTML_PAINTER_INFO *pInfo);
      HRESULT (WINAPI *HitTestPoint)(IHTMLPainter *This,POINT pt,WINBOOL *pbHit,LONG *plPartID);
    END_INTERFACE
  } IHTMLPainterVtbl;
  interface IHTMLPainter {
    CONST_VTBL struct IHTMLPainterVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLPainter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLPainter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLPainter_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLPainter_Draw(This,rcBounds,rcUpdate,lDrawFlags,hdc,pvDrawObject) (This)->lpVtbl->Draw(This,rcBounds,rcUpdate,lDrawFlags,hdc,pvDrawObject)
#define IHTMLPainter_OnResize(This,size) (This)->lpVtbl->OnResize(This,size)
#define IHTMLPainter_GetPainterInfo(This,pInfo) (This)->lpVtbl->GetPainterInfo(This,pInfo)
#define IHTMLPainter_HitTestPoint(This,pt,pbHit,plPartID) (This)->lpVtbl->HitTestPoint(This,pt,pbHit,plPartID)
#endif
#endif

  HRESULT WINAPI IHTMLPainter_Draw_Proxy(IHTMLPainter *This,RECT rcBounds,RECT rcUpdate,LONG lDrawFlags,HDC hdc,LPVOID pvDrawObject);
  void __RPC_STUB IHTMLPainter_Draw_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainter_OnResize_Proxy(IHTMLPainter *This,SIZE size);
  void __RPC_STUB IHTMLPainter_OnResize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainter_GetPainterInfo_Proxy(IHTMLPainter *This,HTML_PAINTER_INFO *pInfo);
  void __RPC_STUB IHTMLPainter_GetPainterInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainter_HitTestPoint_Proxy(IHTMLPainter *This,POINT pt,WINBOOL *pbHit,LONG *plPartID);
  void __RPC_STUB IHTMLPainter_HitTestPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLPaintSite_INTERFACE_DEFINED__
#define __IHTMLPaintSite_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPaintSite;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLPaintSite : public IUnknown {
  public:
    virtual HRESULT WINAPI InvalidatePainterInfo(void) = 0;
    virtual HRESULT WINAPI InvalidateRect(RECT *prcInvalid) = 0;
    virtual HRESULT WINAPI InvalidateRegion(HRGN rgnInvalid) = 0;
    virtual HRESULT WINAPI GetDrawInfo(LONG lFlags,HTML_PAINT_DRAW_INFO *pDrawInfo) = 0;
    virtual HRESULT WINAPI TransformGlobalToLocal(POINT ptGlobal,POINT *pptLocal) = 0;
    virtual HRESULT WINAPI TransformLocalToGlobal(POINT ptLocal,POINT *pptGlobal) = 0;
    virtual HRESULT WINAPI GetHitTestCookie(LONG *plCookie) = 0;
  };
#else
  typedef struct IHTMLPaintSiteVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLPaintSite *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLPaintSite *This);
      ULONG (WINAPI *Release)(IHTMLPaintSite *This);
      HRESULT (WINAPI *InvalidatePainterInfo)(IHTMLPaintSite *This);
      HRESULT (WINAPI *InvalidateRect)(IHTMLPaintSite *This,RECT *prcInvalid);
      HRESULT (WINAPI *InvalidateRegion)(IHTMLPaintSite *This,HRGN rgnInvalid);
      HRESULT (WINAPI *GetDrawInfo)(IHTMLPaintSite *This,LONG lFlags,HTML_PAINT_DRAW_INFO *pDrawInfo);
      HRESULT (WINAPI *TransformGlobalToLocal)(IHTMLPaintSite *This,POINT ptGlobal,POINT *pptLocal);
      HRESULT (WINAPI *TransformLocalToGlobal)(IHTMLPaintSite *This,POINT ptLocal,POINT *pptGlobal);
      HRESULT (WINAPI *GetHitTestCookie)(IHTMLPaintSite *This,LONG *plCookie);
    END_INTERFACE
  } IHTMLPaintSiteVtbl;
  interface IHTMLPaintSite {
    CONST_VTBL struct IHTMLPaintSiteVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLPaintSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLPaintSite_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLPaintSite_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLPaintSite_InvalidatePainterInfo(This) (This)->lpVtbl->InvalidatePainterInfo(This)
#define IHTMLPaintSite_InvalidateRect(This,prcInvalid) (This)->lpVtbl->InvalidateRect(This,prcInvalid)
#define IHTMLPaintSite_InvalidateRegion(This,rgnInvalid) (This)->lpVtbl->InvalidateRegion(This,rgnInvalid)
#define IHTMLPaintSite_GetDrawInfo(This,lFlags,pDrawInfo) (This)->lpVtbl->GetDrawInfo(This,lFlags,pDrawInfo)
#define IHTMLPaintSite_TransformGlobalToLocal(This,ptGlobal,pptLocal) (This)->lpVtbl->TransformGlobalToLocal(This,ptGlobal,pptLocal)
#define IHTMLPaintSite_TransformLocalToGlobal(This,ptLocal,pptGlobal) (This)->lpVtbl->TransformLocalToGlobal(This,ptLocal,pptGlobal)
#define IHTMLPaintSite_GetHitTestCookie(This,plCookie) (This)->lpVtbl->GetHitTestCookie(This,plCookie)
#endif
#endif

  HRESULT WINAPI IHTMLPaintSite_InvalidatePainterInfo_Proxy(IHTMLPaintSite *This);
  void __RPC_STUB IHTMLPaintSite_InvalidatePainterInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_InvalidateRect_Proxy(IHTMLPaintSite *This,RECT *prcInvalid);
  void __RPC_STUB IHTMLPaintSite_InvalidateRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_InvalidateRegion_Proxy(IHTMLPaintSite *This,HRGN rgnInvalid);
  void __RPC_STUB IHTMLPaintSite_InvalidateRegion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_GetDrawInfo_Proxy(IHTMLPaintSite *This,LONG lFlags,HTML_PAINT_DRAW_INFO *pDrawInfo);
  void __RPC_STUB IHTMLPaintSite_GetDrawInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_TransformGlobalToLocal_Proxy(IHTMLPaintSite *This,POINT ptGlobal,POINT *pptLocal);
  void __RPC_STUB IHTMLPaintSite_TransformGlobalToLocal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_TransformLocalToGlobal_Proxy(IHTMLPaintSite *This,POINT ptLocal,POINT *pptGlobal);
  void __RPC_STUB IHTMLPaintSite_TransformLocalToGlobal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPaintSite_GetHitTestCookie_Proxy(IHTMLPaintSite *This,LONG *plCookie);
  void __RPC_STUB IHTMLPaintSite_GetHitTestCookie_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLPainterEventInfo_INTERFACE_DEFINED__
#define __IHTMLPainterEventInfo_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPainterEventInfo;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLPainterEventInfo : public IUnknown {
  public:
    virtual HRESULT WINAPI GetEventInfoFlags(long *plEventInfoFlags) = 0;
    virtual HRESULT WINAPI GetEventTarget(IHTMLElement **ppElement) = 0;
    virtual HRESULT WINAPI SetCursor(LONG lPartID) = 0;
    virtual HRESULT WINAPI StringFromPartID(LONG lPartID,BSTR *pbstrPart) = 0;
  };
#else
  typedef struct IHTMLPainterEventInfoVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLPainterEventInfo *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLPainterEventInfo *This);
      ULONG (WINAPI *Release)(IHTMLPainterEventInfo *This);
      HRESULT (WINAPI *GetEventInfoFlags)(IHTMLPainterEventInfo *This,long *plEventInfoFlags);
      HRESULT (WINAPI *GetEventTarget)(IHTMLPainterEventInfo *This,IHTMLElement **ppElement);
      HRESULT (WINAPI *SetCursor)(IHTMLPainterEventInfo *This,LONG lPartID);
      HRESULT (WINAPI *StringFromPartID)(IHTMLPainterEventInfo *This,LONG lPartID,BSTR *pbstrPart);
    END_INTERFACE
  } IHTMLPainterEventInfoVtbl;
  interface IHTMLPainterEventInfo {
    CONST_VTBL struct IHTMLPainterEventInfoVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLPainterEventInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLPainterEventInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLPainterEventInfo_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLPainterEventInfo_GetEventInfoFlags(This,plEventInfoFlags) (This)->lpVtbl->GetEventInfoFlags(This,plEventInfoFlags)
#define IHTMLPainterEventInfo_GetEventTarget(This,ppElement) (This)->lpVtbl->GetEventTarget(This,ppElement)
#define IHTMLPainterEventInfo_SetCursor(This,lPartID) (This)->lpVtbl->SetCursor(This,lPartID)
#define IHTMLPainterEventInfo_StringFromPartID(This,lPartID,pbstrPart) (This)->lpVtbl->StringFromPartID(This,lPartID,pbstrPart)
#endif
#endif

  HRESULT WINAPI IHTMLPainterEventInfo_GetEventInfoFlags_Proxy(IHTMLPainterEventInfo *This,long *plEventInfoFlags);
  void __RPC_STUB IHTMLPainterEventInfo_GetEventInfoFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainterEventInfo_GetEventTarget_Proxy(IHTMLPainterEventInfo *This,IHTMLElement **ppElement);
  void __RPC_STUB IHTMLPainterEventInfo_GetEventTarget_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainterEventInfo_SetCursor_Proxy(IHTMLPainterEventInfo *This,LONG lPartID);
  void __RPC_STUB IHTMLPainterEventInfo_SetCursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPainterEventInfo_StringFromPartID_Proxy(IHTMLPainterEventInfo *This,LONG lPartID,BSTR *pbstrPart);
  void __RPC_STUB IHTMLPainterEventInfo_StringFromPartID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLPainterOverlay_INTERFACE_DEFINED__
#define __IHTMLPainterOverlay_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPainterOverlay;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLPainterOverlay : public IUnknown {
  public:
    virtual HRESULT WINAPI OnMove(RECT rcDevice) = 0;
  };
#else
  typedef struct IHTMLPainterOverlayVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLPainterOverlay *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLPainterOverlay *This);
      ULONG (WINAPI *Release)(IHTMLPainterOverlay *This);
      HRESULT (WINAPI *OnMove)(IHTMLPainterOverlay *This,RECT rcDevice);
    END_INTERFACE
  } IHTMLPainterOverlayVtbl;
  interface IHTMLPainterOverlay {
    CONST_VTBL struct IHTMLPainterOverlayVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLPainterOverlay_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLPainterOverlay_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLPainterOverlay_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLPainterOverlay_OnMove(This,rcDevice) (This)->lpVtbl->OnMove(This,rcDevice)
#endif
#endif

  HRESULT WINAPI IHTMLPainterOverlay_OnMove_Proxy(IHTMLPainterOverlay *This,RECT rcDevice);
  void __RPC_STUB IHTMLPainterOverlay_OnMove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLIPrintCollection_INTERFACE_DEFINED__
#define __IHTMLIPrintCollection_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLIPrintCollection;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLIPrintCollection : public IDispatch {
  public:
    virtual HRESULT WINAPI get_length(long *p) = 0;
    virtual HRESULT WINAPI get__newEnum(IUnknown **p) = 0;
    virtual HRESULT WINAPI item(long index,IUnknown **ppIPrint) = 0;
  };
#else
  typedef struct IHTMLIPrintCollectionVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLIPrintCollection *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLIPrintCollection *This);
      ULONG (WINAPI *Release)(IHTMLIPrintCollection *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLIPrintCollection *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLIPrintCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLIPrintCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLIPrintCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_length)(IHTMLIPrintCollection *This,long *p);
      HRESULT (WINAPI *get__newEnum)(IHTMLIPrintCollection *This,IUnknown **p);
      HRESULT (WINAPI *item)(IHTMLIPrintCollection *This,long index,IUnknown **ppIPrint);
    END_INTERFACE
  } IHTMLIPrintCollectionVtbl;
  interface IHTMLIPrintCollection {
    CONST_VTBL struct IHTMLIPrintCollectionVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLIPrintCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLIPrintCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLIPrintCollection_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLIPrintCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLIPrintCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLIPrintCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLIPrintCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLIPrintCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
#define IHTMLIPrintCollection_get__newEnum(This,p) (This)->lpVtbl->get__newEnum(This,p)
#define IHTMLIPrintCollection_item(This,index,ppIPrint) (This)->lpVtbl->item(This,index,ppIPrint)
#endif
#endif

  HRESULT WINAPI IHTMLIPrintCollection_get_length_Proxy(IHTMLIPrintCollection *This,long *p);
  void __RPC_STUB IHTMLIPrintCollection_get_length_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIPrintCollection_get__newEnum_Proxy(IHTMLIPrintCollection *This,IUnknown **p);
  void __RPC_STUB IHTMLIPrintCollection_get__newEnum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLIPrintCollection_item_Proxy(IHTMLIPrintCollection *This,long index,IUnknown **ppIPrint);
  void __RPC_STUB IHTMLIPrintCollection_item_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IEnumPrivacyRecords_INTERFACE_DEFINED__
#define __IEnumPrivacyRecords_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IEnumPrivacyRecords;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IEnumPrivacyRecords : public IUnknown {
  public:
    virtual HRESULT WINAPI Reset(void) = 0;
    virtual HRESULT WINAPI GetSize(ULONG *pSize) = 0;
    virtual HRESULT WINAPI GetPrivacyImpacted(WINBOOL *pState) = 0;
    virtual HRESULT WINAPI Next(BSTR *pbstrUrl,BSTR *pbstrPolicyRef,LONG *pdwReserved,DWORD *pdwPrivacyFlags) = 0;
  };
#else
  typedef struct IEnumPrivacyRecordsVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IEnumPrivacyRecords *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IEnumPrivacyRecords *This);
      ULONG (WINAPI *Release)(IEnumPrivacyRecords *This);
      HRESULT (WINAPI *Reset)(IEnumPrivacyRecords *This);
      HRESULT (WINAPI *GetSize)(IEnumPrivacyRecords *This,ULONG *pSize);
      HRESULT (WINAPI *GetPrivacyImpacted)(IEnumPrivacyRecords *This,WINBOOL *pState);
      HRESULT (WINAPI *Next)(IEnumPrivacyRecords *This,BSTR *pbstrUrl,BSTR *pbstrPolicyRef,LONG *pdwReserved,DWORD *pdwPrivacyFlags);
    END_INTERFACE
  } IEnumPrivacyRecordsVtbl;
  interface IEnumPrivacyRecords {
    CONST_VTBL struct IEnumPrivacyRecordsVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IEnumPrivacyRecords_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IEnumPrivacyRecords_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IEnumPrivacyRecords_Release(This) (This)->lpVtbl->Release(This)
#define IEnumPrivacyRecords_Reset(This) (This)->lpVtbl->Reset(This)
#define IEnumPrivacyRecords_GetSize(This,pSize) (This)->lpVtbl->GetSize(This,pSize)
#define IEnumPrivacyRecords_GetPrivacyImpacted(This,pState) (This)->lpVtbl->GetPrivacyImpacted(This,pState)
#define IEnumPrivacyRecords_Next(This,pbstrUrl,pbstrPolicyRef,pdwReserved,pdwPrivacyFlags) (This)->lpVtbl->Next(This,pbstrUrl,pbstrPolicyRef,pdwReserved,pdwPrivacyFlags)
#endif
#endif

  HRESULT WINAPI IEnumPrivacyRecords_Reset_Proxy(IEnumPrivacyRecords *This);
  void __RPC_STUB IEnumPrivacyRecords_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IEnumPrivacyRecords_GetSize_Proxy(IEnumPrivacyRecords *This,ULONG *pSize);
  void __RPC_STUB IEnumPrivacyRecords_GetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IEnumPrivacyRecords_GetPrivacyImpacted_Proxy(IEnumPrivacyRecords *This,WINBOOL *pState);
  void __RPC_STUB IEnumPrivacyRecords_GetPrivacyImpacted_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IEnumPrivacyRecords_Next_Proxy(IEnumPrivacyRecords *This,BSTR *pbstrUrl,BSTR *pbstrPolicyRef,LONG *pdwReserved,DWORD *pdwPrivacyFlags);
  void __RPC_STUB IEnumPrivacyRecords_Next_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDialog_INTERFACE_DEFINED__
#define __IHTMLDialog_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDialog;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDialog : public IDispatch {
  public:
    virtual HRESULT WINAPI put_dialogTop(VARIANT v) = 0;
    virtual HRESULT WINAPI get_dialogTop(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dialogLeft(VARIANT v) = 0;
    virtual HRESULT WINAPI get_dialogLeft(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dialogWidth(VARIANT v) = 0;
    virtual HRESULT WINAPI get_dialogWidth(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_dialogHeight(VARIANT v) = 0;
    virtual HRESULT WINAPI get_dialogHeight(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_dialogArguments(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_menuArguments(VARIANT *p) = 0;
    virtual HRESULT WINAPI put_returnValue(VARIANT v) = 0;
    virtual HRESULT WINAPI get_returnValue(VARIANT *p) = 0;
    virtual HRESULT WINAPI close(void) = 0;
    virtual HRESULT WINAPI toString(BSTR *String) = 0;
  };
#else
  typedef struct IHTMLDialogVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDialog *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDialog *This);
      ULONG (WINAPI *Release)(IHTMLDialog *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDialog *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDialog *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDialog *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDialog *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_dialogTop)(IHTMLDialog *This,VARIANT v);
      HRESULT (WINAPI *get_dialogTop)(IHTMLDialog *This,VARIANT *p);
      HRESULT (WINAPI *put_dialogLeft)(IHTMLDialog *This,VARIANT v);
      HRESULT (WINAPI *get_dialogLeft)(IHTMLDialog *This,VARIANT *p);
      HRESULT (WINAPI *put_dialogWidth)(IHTMLDialog *This,VARIANT v);
      HRESULT (WINAPI *get_dialogWidth)(IHTMLDialog *This,VARIANT *p);
      HRESULT (WINAPI *put_dialogHeight)(IHTMLDialog *This,VARIANT v);
      HRESULT (WINAPI *get_dialogHeight)(IHTMLDialog *This,VARIANT *p);
      HRESULT (WINAPI *get_dialogArguments)(IHTMLDialog *This,VARIANT *p);
      HRESULT (WINAPI *get_menuArguments)(IHTMLDialog *This,VARIANT *p);
      HRESULT (WINAPI *put_returnValue)(IHTMLDialog *This,VARIANT v);
      HRESULT (WINAPI *get_returnValue)(IHTMLDialog *This,VARIANT *p);
      HRESULT (WINAPI *close)(IHTMLDialog *This);
      HRESULT (WINAPI *toString)(IHTMLDialog *This,BSTR *String);
    END_INTERFACE
  } IHTMLDialogVtbl;
  interface IHTMLDialog {
    CONST_VTBL struct IHTMLDialogVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDialog_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDialog_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDialog_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDialog_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDialog_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDialog_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDialog_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDialog_put_dialogTop(This,v) (This)->lpVtbl->put_dialogTop(This,v)
#define IHTMLDialog_get_dialogTop(This,p) (This)->lpVtbl->get_dialogTop(This,p)
#define IHTMLDialog_put_dialogLeft(This,v) (This)->lpVtbl->put_dialogLeft(This,v)
#define IHTMLDialog_get_dialogLeft(This,p) (This)->lpVtbl->get_dialogLeft(This,p)
#define IHTMLDialog_put_dialogWidth(This,v) (This)->lpVtbl->put_dialogWidth(This,v)
#define IHTMLDialog_get_dialogWidth(This,p) (This)->lpVtbl->get_dialogWidth(This,p)
#define IHTMLDialog_put_dialogHeight(This,v) (This)->lpVtbl->put_dialogHeight(This,v)
#define IHTMLDialog_get_dialogHeight(This,p) (This)->lpVtbl->get_dialogHeight(This,p)
#define IHTMLDialog_get_dialogArguments(This,p) (This)->lpVtbl->get_dialogArguments(This,p)
#define IHTMLDialog_get_menuArguments(This,p) (This)->lpVtbl->get_menuArguments(This,p)
#define IHTMLDialog_put_returnValue(This,v) (This)->lpVtbl->put_returnValue(This,v)
#define IHTMLDialog_get_returnValue(This,p) (This)->lpVtbl->get_returnValue(This,p)
#define IHTMLDialog_close(This) (This)->lpVtbl->close(This)
#define IHTMLDialog_toString(This,String) (This)->lpVtbl->toString(This,String)
#endif
#endif

  HRESULT WINAPI IHTMLDialog_put_dialogTop_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_dialogTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogTop_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogTop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_put_dialogLeft_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_dialogLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogLeft_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogLeft_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_put_dialogWidth_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_dialogWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogWidth_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogWidth_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_put_dialogHeight_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_dialogHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogHeight_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogHeight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_dialogArguments_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_dialogArguments_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_menuArguments_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_menuArguments_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_put_returnValue_Proxy(IHTMLDialog *This,VARIANT v);
  void __RPC_STUB IHTMLDialog_put_returnValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_get_returnValue_Proxy(IHTMLDialog *This,VARIANT *p);
  void __RPC_STUB IHTMLDialog_get_returnValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_close_Proxy(IHTMLDialog *This);
  void __RPC_STUB IHTMLDialog_close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog_toString_Proxy(IHTMLDialog *This,BSTR *String);
  void __RPC_STUB IHTMLDialog_toString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDialog2_INTERFACE_DEFINED__
#define __IHTMLDialog2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDialog2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDialog2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_status(BSTR v) = 0;
    virtual HRESULT WINAPI get_status(BSTR *p) = 0;
    virtual HRESULT WINAPI put_resizable(BSTR v) = 0;
    virtual HRESULT WINAPI get_resizable(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLDialog2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDialog2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDialog2 *This);
      ULONG (WINAPI *Release)(IHTMLDialog2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDialog2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDialog2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDialog2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDialog2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_status)(IHTMLDialog2 *This,BSTR v);
      HRESULT (WINAPI *get_status)(IHTMLDialog2 *This,BSTR *p);
      HRESULT (WINAPI *put_resizable)(IHTMLDialog2 *This,BSTR v);
      HRESULT (WINAPI *get_resizable)(IHTMLDialog2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLDialog2Vtbl;
  interface IHTMLDialog2 {
    CONST_VTBL struct IHTMLDialog2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDialog2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDialog2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDialog2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDialog2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDialog2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDialog2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDialog2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDialog2_put_status(This,v) (This)->lpVtbl->put_status(This,v)
#define IHTMLDialog2_get_status(This,p) (This)->lpVtbl->get_status(This,p)
#define IHTMLDialog2_put_resizable(This,v) (This)->lpVtbl->put_resizable(This,v)
#define IHTMLDialog2_get_resizable(This,p) (This)->lpVtbl->get_resizable(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLDialog2_put_status_Proxy(IHTMLDialog2 *This,BSTR v);
  void __RPC_STUB IHTMLDialog2_put_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog2_get_status_Proxy(IHTMLDialog2 *This,BSTR *p);
  void __RPC_STUB IHTMLDialog2_get_status_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog2_put_resizable_Proxy(IHTMLDialog2 *This,BSTR v);
  void __RPC_STUB IHTMLDialog2_put_resizable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog2_get_resizable_Proxy(IHTMLDialog2 *This,BSTR *p);
  void __RPC_STUB IHTMLDialog2_get_resizable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLDialog3_INTERFACE_DEFINED__
#define __IHTMLDialog3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLDialog3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLDialog3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_unadorned(BSTR v) = 0;
    virtual HRESULT WINAPI get_unadorned(BSTR *p) = 0;
    virtual HRESULT WINAPI put_dialogHide(BSTR v) = 0;
    virtual HRESULT WINAPI get_dialogHide(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLDialog3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLDialog3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLDialog3 *This);
      ULONG (WINAPI *Release)(IHTMLDialog3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLDialog3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLDialog3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLDialog3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLDialog3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_unadorned)(IHTMLDialog3 *This,BSTR v);
      HRESULT (WINAPI *get_unadorned)(IHTMLDialog3 *This,BSTR *p);
      HRESULT (WINAPI *put_dialogHide)(IHTMLDialog3 *This,BSTR v);
      HRESULT (WINAPI *get_dialogHide)(IHTMLDialog3 *This,BSTR *p);
    END_INTERFACE
  } IHTMLDialog3Vtbl;
  interface IHTMLDialog3 {
    CONST_VTBL struct IHTMLDialog3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLDialog3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLDialog3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLDialog3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLDialog3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLDialog3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLDialog3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLDialog3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLDialog3_put_unadorned(This,v) (This)->lpVtbl->put_unadorned(This,v)
#define IHTMLDialog3_get_unadorned(This,p) (This)->lpVtbl->get_unadorned(This,p)
#define IHTMLDialog3_put_dialogHide(This,v) (This)->lpVtbl->put_dialogHide(This,v)
#define IHTMLDialog3_get_dialogHide(This,p) (This)->lpVtbl->get_dialogHide(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLDialog3_put_unadorned_Proxy(IHTMLDialog3 *This,BSTR v);
  void __RPC_STUB IHTMLDialog3_put_unadorned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog3_get_unadorned_Proxy(IHTMLDialog3 *This,BSTR *p);
  void __RPC_STUB IHTMLDialog3_get_unadorned_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog3_put_dialogHide_Proxy(IHTMLDialog3 *This,BSTR v);
  void __RPC_STUB IHTMLDialog3_put_dialogHide_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLDialog3_get_dialogHide_Proxy(IHTMLDialog3 *This,BSTR *p);
  void __RPC_STUB IHTMLDialog3_get_dialogHide_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLModelessInit_INTERFACE_DEFINED__
#define __IHTMLModelessInit_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLModelessInit;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLModelessInit : public IDispatch {
  public:
    virtual HRESULT WINAPI get_parameters(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_optionString(VARIANT *p) = 0;
    virtual HRESULT WINAPI get_moniker(IUnknown **p) = 0;
    virtual HRESULT WINAPI get_document(IUnknown **p) = 0;
  };
#else
  typedef struct IHTMLModelessInitVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLModelessInit *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLModelessInit *This);
      ULONG (WINAPI *Release)(IHTMLModelessInit *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLModelessInit *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLModelessInit *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLModelessInit *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLModelessInit *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *get_parameters)(IHTMLModelessInit *This,VARIANT *p);
      HRESULT (WINAPI *get_optionString)(IHTMLModelessInit *This,VARIANT *p);
      HRESULT (WINAPI *get_moniker)(IHTMLModelessInit *This,IUnknown **p);
      HRESULT (WINAPI *get_document)(IHTMLModelessInit *This,IUnknown **p);
    END_INTERFACE
  } IHTMLModelessInitVtbl;
  interface IHTMLModelessInit {
    CONST_VTBL struct IHTMLModelessInitVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLModelessInit_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLModelessInit_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLModelessInit_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLModelessInit_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLModelessInit_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLModelessInit_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLModelessInit_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLModelessInit_get_parameters(This,p) (This)->lpVtbl->get_parameters(This,p)
#define IHTMLModelessInit_get_optionString(This,p) (This)->lpVtbl->get_optionString(This,p)
#define IHTMLModelessInit_get_moniker(This,p) (This)->lpVtbl->get_moniker(This,p)
#define IHTMLModelessInit_get_document(This,p) (This)->lpVtbl->get_document(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLModelessInit_get_parameters_Proxy(IHTMLModelessInit *This,VARIANT *p);
  void __RPC_STUB IHTMLModelessInit_get_parameters_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLModelessInit_get_optionString_Proxy(IHTMLModelessInit *This,VARIANT *p);
  void __RPC_STUB IHTMLModelessInit_get_optionString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLModelessInit_get_moniker_Proxy(IHTMLModelessInit *This,IUnknown **p);
  void __RPC_STUB IHTMLModelessInit_get_moniker_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLModelessInit_get_document_Proxy(IHTMLModelessInit *This,IUnknown **p);
  void __RPC_STUB IHTMLModelessInit_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

  EXTERN_C const CLSID CLSID_ThreadDialogProcParam;
#ifdef __cplusplus
  class ThreadDialogProcParam;
#endif
  EXTERN_C const CLSID CLSID_HTMLDialog;
#ifdef __cplusplus
  class HTMLDialog;
#endif

#ifndef __IHTMLPopup_INTERFACE_DEFINED__
#define __IHTMLPopup_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLPopup;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLPopup : public IDispatch {
  public:
    virtual HRESULT WINAPI show(long x,long y,long w,long h,VARIANT *pElement) = 0;
    virtual HRESULT WINAPI hide(void) = 0;
    virtual HRESULT WINAPI get_document(IHTMLDocument **p) = 0;
    virtual HRESULT WINAPI get_isOpen(VARIANT_BOOL *p) = 0;
  };
#else
  typedef struct IHTMLPopupVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLPopup *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLPopup *This);
      ULONG (WINAPI *Release)(IHTMLPopup *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLPopup *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLPopup *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLPopup *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLPopup *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *show)(IHTMLPopup *This,long x,long y,long w,long h,VARIANT *pElement);
      HRESULT (WINAPI *hide)(IHTMLPopup *This);
      HRESULT (WINAPI *get_document)(IHTMLPopup *This,IHTMLDocument **p);
      HRESULT (WINAPI *get_isOpen)(IHTMLPopup *This,VARIANT_BOOL *p);
    END_INTERFACE
  } IHTMLPopupVtbl;
  interface IHTMLPopup {
    CONST_VTBL struct IHTMLPopupVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLPopup_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLPopup_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLPopup_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLPopup_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLPopup_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLPopup_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLPopup_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLPopup_show(This,x,y,w,h,pElement) (This)->lpVtbl->show(This,x,y,w,h,pElement)
#define IHTMLPopup_hide(This) (This)->lpVtbl->hide(This)
#define IHTMLPopup_get_document(This,p) (This)->lpVtbl->get_document(This,p)
#define IHTMLPopup_get_isOpen(This,p) (This)->lpVtbl->get_isOpen(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLPopup_show_Proxy(IHTMLPopup *This,long x,long y,long w,long h,VARIANT *pElement);
  void __RPC_STUB IHTMLPopup_show_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPopup_hide_Proxy(IHTMLPopup *This);
  void __RPC_STUB IHTMLPopup_hide_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPopup_get_document_Proxy(IHTMLPopup *This,IHTMLDocument **p);
  void __RPC_STUB IHTMLPopup_get_document_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLPopup_get_isOpen_Proxy(IHTMLPopup *This,VARIANT_BOOL *p);
  void __RPC_STUB IHTMLPopup_get_isOpen_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLPopup_DISPINTERFACE_DEFINED__
#define __DispHTMLPopup_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLPopup;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLPopup : public IDispatch {
  };
#else
  typedef struct DispHTMLPopupVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLPopup *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLPopup *This);
      ULONG (WINAPI *Release)(DispHTMLPopup *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLPopup *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLPopup *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLPopup *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLPopup *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLPopupVtbl;
  interface DispHTMLPopup {
    CONST_VTBL struct DispHTMLPopupVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLPopup_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLPopup_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLPopup_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLPopup_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLPopup_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLPopup_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLPopup_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLPopup;
#ifdef __cplusplus
  class HTMLPopup;
#endif

#ifndef __IHTMLAppBehavior_INTERFACE_DEFINED__
#define __IHTMLAppBehavior_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAppBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLAppBehavior : public IDispatch {
  public:
    virtual HRESULT WINAPI put_applicationName(BSTR v) = 0;
    virtual HRESULT WINAPI get_applicationName(BSTR *p) = 0;
    virtual HRESULT WINAPI put_version(BSTR v) = 0;
    virtual HRESULT WINAPI get_version(BSTR *p) = 0;
    virtual HRESULT WINAPI put_icon(BSTR v) = 0;
    virtual HRESULT WINAPI get_icon(BSTR *p) = 0;
    virtual HRESULT WINAPI put_singleInstance(BSTR v) = 0;
    virtual HRESULT WINAPI get_singleInstance(BSTR *p) = 0;
    virtual HRESULT WINAPI put_minimizeButton(BSTR v) = 0;
    virtual HRESULT WINAPI get_minimizeButton(BSTR *p) = 0;
    virtual HRESULT WINAPI put_maximizeButton(BSTR v) = 0;
    virtual HRESULT WINAPI get_maximizeButton(BSTR *p) = 0;
    virtual HRESULT WINAPI put_border(BSTR v) = 0;
    virtual HRESULT WINAPI get_border(BSTR *p) = 0;
    virtual HRESULT WINAPI put_borderStyle(BSTR v) = 0;
    virtual HRESULT WINAPI get_borderStyle(BSTR *p) = 0;
    virtual HRESULT WINAPI put_sysMenu(BSTR v) = 0;
    virtual HRESULT WINAPI get_sysMenu(BSTR *p) = 0;
    virtual HRESULT WINAPI put_caption(BSTR v) = 0;
    virtual HRESULT WINAPI get_caption(BSTR *p) = 0;
    virtual HRESULT WINAPI put_windowState(BSTR v) = 0;
    virtual HRESULT WINAPI get_windowState(BSTR *p) = 0;
    virtual HRESULT WINAPI put_showInTaskBar(BSTR v) = 0;
    virtual HRESULT WINAPI get_showInTaskBar(BSTR *p) = 0;
    virtual HRESULT WINAPI get_commandLine(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLAppBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLAppBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLAppBehavior *This);
      ULONG (WINAPI *Release)(IHTMLAppBehavior *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLAppBehavior *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLAppBehavior *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLAppBehavior *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLAppBehavior *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_applicationName)(IHTMLAppBehavior *This,BSTR v);
      HRESULT (WINAPI *get_applicationName)(IHTMLAppBehavior *This,BSTR *p);
      HRESULT (WINAPI *put_version)(IHTMLAppBehavior *This,BSTR v);
      HRESULT (WINAPI *get_version)(IHTMLAppBehavior *This,BSTR *p);
      HRESULT (WINAPI *put_icon)(IHTMLAppBehavior *This,BSTR v);
      HRESULT (WINAPI *get_icon)(IHTMLAppBehavior *This,BSTR *p);
      HRESULT (WINAPI *put_singleInstance)(IHTMLAppBehavior *This,BSTR v);
      HRESULT (WINAPI *get_singleInstance)(IHTMLAppBehavior *This,BSTR *p);
      HRESULT (WINAPI *put_minimizeButton)(IHTMLAppBehavior *This,BSTR v);
      HRESULT (WINAPI *get_minimizeButton)(IHTMLAppBehavior *This,BSTR *p);
      HRESULT (WINAPI *put_maximizeButton)(IHTMLAppBehavior *This,BSTR v);
      HRESULT (WINAPI *get_maximizeButton)(IHTMLAppBehavior *This,BSTR *p);
      HRESULT (WINAPI *put_border)(IHTMLAppBehavior *This,BSTR v);
      HRESULT (WINAPI *get_border)(IHTMLAppBehavior *This,BSTR *p);
      HRESULT (WINAPI *put_borderStyle)(IHTMLAppBehavior *This,BSTR v);
      HRESULT (WINAPI *get_borderStyle)(IHTMLAppBehavior *This,BSTR *p);
      HRESULT (WINAPI *put_sysMenu)(IHTMLAppBehavior *This,BSTR v);
      HRESULT (WINAPI *get_sysMenu)(IHTMLAppBehavior *This,BSTR *p);
      HRESULT (WINAPI *put_caption)(IHTMLAppBehavior *This,BSTR v);
      HRESULT (WINAPI *get_caption)(IHTMLAppBehavior *This,BSTR *p);
      HRESULT (WINAPI *put_windowState)(IHTMLAppBehavior *This,BSTR v);
      HRESULT (WINAPI *get_windowState)(IHTMLAppBehavior *This,BSTR *p);
      HRESULT (WINAPI *put_showInTaskBar)(IHTMLAppBehavior *This,BSTR v);
      HRESULT (WINAPI *get_showInTaskBar)(IHTMLAppBehavior *This,BSTR *p);
      HRESULT (WINAPI *get_commandLine)(IHTMLAppBehavior *This,BSTR *p);
    END_INTERFACE
  } IHTMLAppBehaviorVtbl;
  interface IHTMLAppBehavior {
    CONST_VTBL struct IHTMLAppBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLAppBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLAppBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLAppBehavior_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLAppBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLAppBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLAppBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLAppBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLAppBehavior_put_applicationName(This,v) (This)->lpVtbl->put_applicationName(This,v)
#define IHTMLAppBehavior_get_applicationName(This,p) (This)->lpVtbl->get_applicationName(This,p)
#define IHTMLAppBehavior_put_version(This,v) (This)->lpVtbl->put_version(This,v)
#define IHTMLAppBehavior_get_version(This,p) (This)->lpVtbl->get_version(This,p)
#define IHTMLAppBehavior_put_icon(This,v) (This)->lpVtbl->put_icon(This,v)
#define IHTMLAppBehavior_get_icon(This,p) (This)->lpVtbl->get_icon(This,p)
#define IHTMLAppBehavior_put_singleInstance(This,v) (This)->lpVtbl->put_singleInstance(This,v)
#define IHTMLAppBehavior_get_singleInstance(This,p) (This)->lpVtbl->get_singleInstance(This,p)
#define IHTMLAppBehavior_put_minimizeButton(This,v) (This)->lpVtbl->put_minimizeButton(This,v)
#define IHTMLAppBehavior_get_minimizeButton(This,p) (This)->lpVtbl->get_minimizeButton(This,p)
#define IHTMLAppBehavior_put_maximizeButton(This,v) (This)->lpVtbl->put_maximizeButton(This,v)
#define IHTMLAppBehavior_get_maximizeButton(This,p) (This)->lpVtbl->get_maximizeButton(This,p)
#define IHTMLAppBehavior_put_border(This,v) (This)->lpVtbl->put_border(This,v)
#define IHTMLAppBehavior_get_border(This,p) (This)->lpVtbl->get_border(This,p)
#define IHTMLAppBehavior_put_borderStyle(This,v) (This)->lpVtbl->put_borderStyle(This,v)
#define IHTMLAppBehavior_get_borderStyle(This,p) (This)->lpVtbl->get_borderStyle(This,p)
#define IHTMLAppBehavior_put_sysMenu(This,v) (This)->lpVtbl->put_sysMenu(This,v)
#define IHTMLAppBehavior_get_sysMenu(This,p) (This)->lpVtbl->get_sysMenu(This,p)
#define IHTMLAppBehavior_put_caption(This,v) (This)->lpVtbl->put_caption(This,v)
#define IHTMLAppBehavior_get_caption(This,p) (This)->lpVtbl->get_caption(This,p)
#define IHTMLAppBehavior_put_windowState(This,v) (This)->lpVtbl->put_windowState(This,v)
#define IHTMLAppBehavior_get_windowState(This,p) (This)->lpVtbl->get_windowState(This,p)
#define IHTMLAppBehavior_put_showInTaskBar(This,v) (This)->lpVtbl->put_showInTaskBar(This,v)
#define IHTMLAppBehavior_get_showInTaskBar(This,p) (This)->lpVtbl->get_showInTaskBar(This,p)
#define IHTMLAppBehavior_get_commandLine(This,p) (This)->lpVtbl->get_commandLine(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLAppBehavior_put_applicationName_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_applicationName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_applicationName_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_applicationName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_version_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_version_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_version_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_icon_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_icon_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_icon_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_icon_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_singleInstance_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_singleInstance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_singleInstance_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_singleInstance_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_minimizeButton_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_minimizeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_minimizeButton_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_minimizeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_maximizeButton_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_maximizeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_maximizeButton_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_maximizeButton_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_border_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_border_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_border_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_borderStyle_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_borderStyle_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_borderStyle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_sysMenu_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_sysMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_sysMenu_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_sysMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_caption_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_caption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_caption_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_caption_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_windowState_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_windowState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_windowState_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_windowState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_put_showInTaskBar_Proxy(IHTMLAppBehavior *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior_put_showInTaskBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_showInTaskBar_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_showInTaskBar_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior_get_commandLine_Proxy(IHTMLAppBehavior *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior_get_commandLine_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAppBehavior2_INTERFACE_DEFINED__
#define __IHTMLAppBehavior2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAppBehavior2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLAppBehavior2 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_contextMenu(BSTR v) = 0;
    virtual HRESULT WINAPI get_contextMenu(BSTR *p) = 0;
    virtual HRESULT WINAPI put_innerBorder(BSTR v) = 0;
    virtual HRESULT WINAPI get_innerBorder(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scroll(BSTR v) = 0;
    virtual HRESULT WINAPI get_scroll(BSTR *p) = 0;
    virtual HRESULT WINAPI put_scrollFlat(BSTR v) = 0;
    virtual HRESULT WINAPI get_scrollFlat(BSTR *p) = 0;
    virtual HRESULT WINAPI put_selection(BSTR v) = 0;
    virtual HRESULT WINAPI get_selection(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLAppBehavior2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLAppBehavior2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLAppBehavior2 *This);
      ULONG (WINAPI *Release)(IHTMLAppBehavior2 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLAppBehavior2 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLAppBehavior2 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLAppBehavior2 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLAppBehavior2 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_contextMenu)(IHTMLAppBehavior2 *This,BSTR v);
      HRESULT (WINAPI *get_contextMenu)(IHTMLAppBehavior2 *This,BSTR *p);
      HRESULT (WINAPI *put_innerBorder)(IHTMLAppBehavior2 *This,BSTR v);
      HRESULT (WINAPI *get_innerBorder)(IHTMLAppBehavior2 *This,BSTR *p);
      HRESULT (WINAPI *put_scroll)(IHTMLAppBehavior2 *This,BSTR v);
      HRESULT (WINAPI *get_scroll)(IHTMLAppBehavior2 *This,BSTR *p);
      HRESULT (WINAPI *put_scrollFlat)(IHTMLAppBehavior2 *This,BSTR v);
      HRESULT (WINAPI *get_scrollFlat)(IHTMLAppBehavior2 *This,BSTR *p);
      HRESULT (WINAPI *put_selection)(IHTMLAppBehavior2 *This,BSTR v);
      HRESULT (WINAPI *get_selection)(IHTMLAppBehavior2 *This,BSTR *p);
    END_INTERFACE
  } IHTMLAppBehavior2Vtbl;
  interface IHTMLAppBehavior2 {
    CONST_VTBL struct IHTMLAppBehavior2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLAppBehavior2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLAppBehavior2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLAppBehavior2_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLAppBehavior2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLAppBehavior2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLAppBehavior2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLAppBehavior2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLAppBehavior2_put_contextMenu(This,v) (This)->lpVtbl->put_contextMenu(This,v)
#define IHTMLAppBehavior2_get_contextMenu(This,p) (This)->lpVtbl->get_contextMenu(This,p)
#define IHTMLAppBehavior2_put_innerBorder(This,v) (This)->lpVtbl->put_innerBorder(This,v)
#define IHTMLAppBehavior2_get_innerBorder(This,p) (This)->lpVtbl->get_innerBorder(This,p)
#define IHTMLAppBehavior2_put_scroll(This,v) (This)->lpVtbl->put_scroll(This,v)
#define IHTMLAppBehavior2_get_scroll(This,p) (This)->lpVtbl->get_scroll(This,p)
#define IHTMLAppBehavior2_put_scrollFlat(This,v) (This)->lpVtbl->put_scrollFlat(This,v)
#define IHTMLAppBehavior2_get_scrollFlat(This,p) (This)->lpVtbl->get_scrollFlat(This,p)
#define IHTMLAppBehavior2_put_selection(This,v) (This)->lpVtbl->put_selection(This,v)
#define IHTMLAppBehavior2_get_selection(This,p) (This)->lpVtbl->get_selection(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLAppBehavior2_put_contextMenu_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_contextMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_contextMenu_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_contextMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_put_innerBorder_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_innerBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_innerBorder_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_innerBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_put_scroll_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_scroll_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_put_scrollFlat_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_scrollFlat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_scrollFlat_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_scrollFlat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_put_selection_Proxy(IHTMLAppBehavior2 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior2_put_selection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior2_get_selection_Proxy(IHTMLAppBehavior2 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior2_get_selection_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHTMLAppBehavior3_INTERFACE_DEFINED__
#define __IHTMLAppBehavior3_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHTMLAppBehavior3;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHTMLAppBehavior3 : public IDispatch {
  public:
    virtual HRESULT WINAPI put_navigable(BSTR v) = 0;
    virtual HRESULT WINAPI get_navigable(BSTR *p) = 0;
  };
#else
  typedef struct IHTMLAppBehavior3Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHTMLAppBehavior3 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHTMLAppBehavior3 *This);
      ULONG (WINAPI *Release)(IHTMLAppBehavior3 *This);
      HRESULT (WINAPI *GetTypeInfoCount)(IHTMLAppBehavior3 *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(IHTMLAppBehavior3 *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(IHTMLAppBehavior3 *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(IHTMLAppBehavior3 *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
      HRESULT (WINAPI *put_navigable)(IHTMLAppBehavior3 *This,BSTR v);
      HRESULT (WINAPI *get_navigable)(IHTMLAppBehavior3 *This,BSTR *p);
    END_INTERFACE
  } IHTMLAppBehavior3Vtbl;
  interface IHTMLAppBehavior3 {
    CONST_VTBL struct IHTMLAppBehavior3Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHTMLAppBehavior3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHTMLAppBehavior3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHTMLAppBehavior3_Release(This) (This)->lpVtbl->Release(This)
#define IHTMLAppBehavior3_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define IHTMLAppBehavior3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IHTMLAppBehavior3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IHTMLAppBehavior3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IHTMLAppBehavior3_put_navigable(This,v) (This)->lpVtbl->put_navigable(This,v)
#define IHTMLAppBehavior3_get_navigable(This,p) (This)->lpVtbl->get_navigable(This,p)
#endif
#endif

  HRESULT WINAPI IHTMLAppBehavior3_put_navigable_Proxy(IHTMLAppBehavior3 *This,BSTR v);
  void __RPC_STUB IHTMLAppBehavior3_put_navigable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IHTMLAppBehavior3_get_navigable_Proxy(IHTMLAppBehavior3 *This,BSTR *p);
  void __RPC_STUB IHTMLAppBehavior3_get_navigable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __DispHTMLAppBehavior_DISPINTERFACE_DEFINED__
#define __DispHTMLAppBehavior_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispHTMLAppBehavior;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispHTMLAppBehavior : public IDispatch {
  };
#else
  typedef struct DispHTMLAppBehaviorVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispHTMLAppBehavior *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispHTMLAppBehavior *This);
      ULONG (WINAPI *Release)(DispHTMLAppBehavior *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispHTMLAppBehavior *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispHTMLAppBehavior *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispHTMLAppBehavior *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispHTMLAppBehavior *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispHTMLAppBehaviorVtbl;
  interface DispHTMLAppBehavior {
    CONST_VTBL struct DispHTMLAppBehaviorVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispHTMLAppBehavior_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispHTMLAppBehavior_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispHTMLAppBehavior_Release(This) (This)->lpVtbl->Release(This)
#define DispHTMLAppBehavior_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispHTMLAppBehavior_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispHTMLAppBehavior_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispHTMLAppBehavior_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLAppBehavior;
#ifdef __cplusplus
  class HTMLAppBehavior;
#endif
  EXTERN_C const CLSID CLSID_OldHTMLDocument;
#ifdef __cplusplus
  class OldHTMLDocument;
#endif
  EXTERN_C const CLSID CLSID_OldHTMLFormElement;
#ifdef __cplusplus
  class OldHTMLFormElement;
#endif

#ifndef __DispIHTMLInputButtonElement_DISPINTERFACE_DEFINED__
#define __DispIHTMLInputButtonElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLInputButtonElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispIHTMLInputButtonElement : public IDispatch {
  };
#else
  typedef struct DispIHTMLInputButtonElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispIHTMLInputButtonElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispIHTMLInputButtonElement *This);
      ULONG (WINAPI *Release)(DispIHTMLInputButtonElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispIHTMLInputButtonElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispIHTMLInputButtonElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispIHTMLInputButtonElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispIHTMLInputButtonElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispIHTMLInputButtonElementVtbl;
  interface DispIHTMLInputButtonElement {
    CONST_VTBL struct DispIHTMLInputButtonElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispIHTMLInputButtonElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispIHTMLInputButtonElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispIHTMLInputButtonElement_Release(This) (This)->lpVtbl->Release(This)
#define DispIHTMLInputButtonElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispIHTMLInputButtonElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispIHTMLInputButtonElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispIHTMLInputButtonElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLInputButtonElement;
#ifdef __cplusplus
  class HTMLInputButtonElement;
#endif

#ifndef __DispIHTMLInputTextElement_DISPINTERFACE_DEFINED__
#define __DispIHTMLInputTextElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLInputTextElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispIHTMLInputTextElement : public IDispatch {
  };
#else
  typedef struct DispIHTMLInputTextElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispIHTMLInputTextElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispIHTMLInputTextElement *This);
      ULONG (WINAPI *Release)(DispIHTMLInputTextElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispIHTMLInputTextElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispIHTMLInputTextElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispIHTMLInputTextElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispIHTMLInputTextElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispIHTMLInputTextElementVtbl;
  interface DispIHTMLInputTextElement {
    CONST_VTBL struct DispIHTMLInputTextElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispIHTMLInputTextElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispIHTMLInputTextElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispIHTMLInputTextElement_Release(This) (This)->lpVtbl->Release(This)
#define DispIHTMLInputTextElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispIHTMLInputTextElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispIHTMLInputTextElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispIHTMLInputTextElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLInputTextElement;
#ifdef __cplusplus
  class HTMLInputTextElement;
#endif

#ifndef __DispIHTMLInputFileElement_DISPINTERFACE_DEFINED__
#define __DispIHTMLInputFileElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLInputFileElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispIHTMLInputFileElement : public IDispatch {
  };
#else
  typedef struct DispIHTMLInputFileElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispIHTMLInputFileElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispIHTMLInputFileElement *This);
      ULONG (WINAPI *Release)(DispIHTMLInputFileElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispIHTMLInputFileElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispIHTMLInputFileElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispIHTMLInputFileElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispIHTMLInputFileElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispIHTMLInputFileElementVtbl;
  interface DispIHTMLInputFileElement {
    CONST_VTBL struct DispIHTMLInputFileElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispIHTMLInputFileElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispIHTMLInputFileElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispIHTMLInputFileElement_Release(This) (This)->lpVtbl->Release(This)
#define DispIHTMLInputFileElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispIHTMLInputFileElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispIHTMLInputFileElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispIHTMLInputFileElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLInputFileElement;
#ifdef __cplusplus
  class HTMLInputFileElement;
#endif

#ifndef __DispIHTMLOptionButtonElement_DISPINTERFACE_DEFINED__
#define __DispIHTMLOptionButtonElement_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLOptionButtonElement;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispIHTMLOptionButtonElement : public IDispatch {
  };
#else
  typedef struct DispIHTMLOptionButtonElementVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispIHTMLOptionButtonElement *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispIHTMLOptionButtonElement *This);
      ULONG (WINAPI *Release)(DispIHTMLOptionButtonElement *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispIHTMLOptionButtonElement *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispIHTMLOptionButtonElement *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispIHTMLOptionButtonElement *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispIHTMLOptionButtonElement *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispIHTMLOptionButtonElementVtbl;
  interface DispIHTMLOptionButtonElement {
    CONST_VTBL struct DispIHTMLOptionButtonElementVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispIHTMLOptionButtonElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispIHTMLOptionButtonElement_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispIHTMLOptionButtonElement_Release(This) (This)->lpVtbl->Release(This)
#define DispIHTMLOptionButtonElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispIHTMLOptionButtonElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispIHTMLOptionButtonElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispIHTMLOptionButtonElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLOptionButtonElement;
#ifdef __cplusplus
  class HTMLOptionButtonElement;
#endif

#ifndef __DispIHTMLInputImage_DISPINTERFACE_DEFINED__
#define __DispIHTMLInputImage_DISPINTERFACE_DEFINED__
  EXTERN_C const IID DIID_DispIHTMLInputImage;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct DispIHTMLInputImage : public IDispatch {
  };
#else
  typedef struct DispIHTMLInputImageVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(DispIHTMLInputImage *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(DispIHTMLInputImage *This);
      ULONG (WINAPI *Release)(DispIHTMLInputImage *This);
      HRESULT (WINAPI *GetTypeInfoCount)(DispIHTMLInputImage *This,UINT *pctinfo);
      HRESULT (WINAPI *GetTypeInfo)(DispIHTMLInputImage *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
      HRESULT (WINAPI *GetIDsOfNames)(DispIHTMLInputImage *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
      HRESULT (WINAPI *Invoke)(DispIHTMLInputImage *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
    END_INTERFACE
  } DispIHTMLInputImageVtbl;
  interface DispIHTMLInputImage {
    CONST_VTBL struct DispIHTMLInputImageVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define DispIHTMLInputImage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define DispIHTMLInputImage_AddRef(This) (This)->lpVtbl->AddRef(This)
#define DispIHTMLInputImage_Release(This) (This)->lpVtbl->Release(This)
#define DispIHTMLInputImage_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define DispIHTMLInputImage_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define DispIHTMLInputImage_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define DispIHTMLInputImage_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#endif
#endif

  EXTERN_C const CLSID CLSID_HTMLInputImage;
#ifdef __cplusplus
  class HTMLInputImage;
#endif

#ifndef __IElementNamespace_INTERFACE_DEFINED__
#define __IElementNamespace_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespace;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementNamespace : public IUnknown {
  public:
    virtual HRESULT WINAPI AddTag(BSTR bstrTagName,LONG lFlags) = 0;
  };
#else
  typedef struct IElementNamespaceVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementNamespace *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementNamespace *This);
      ULONG (WINAPI *Release)(IElementNamespace *This);
      HRESULT (WINAPI *AddTag)(IElementNamespace *This,BSTR bstrTagName,LONG lFlags);
    END_INTERFACE
  } IElementNamespaceVtbl;
  interface IElementNamespace {
    CONST_VTBL struct IElementNamespaceVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementNamespace_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementNamespace_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementNamespace_Release(This) (This)->lpVtbl->Release(This)
#define IElementNamespace_AddTag(This,bstrTagName,lFlags) (This)->lpVtbl->AddTag(This,bstrTagName,lFlags)
#endif
#endif

  HRESULT WINAPI IElementNamespace_AddTag_Proxy(IElementNamespace *This,BSTR bstrTagName,LONG lFlags);
  void __RPC_STUB IElementNamespace_AddTag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementNamespaceTable_INTERFACE_DEFINED__
#define __IElementNamespaceTable_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespaceTable;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementNamespaceTable : public IUnknown {
  public:
    virtual HRESULT WINAPI AddNamespace(BSTR bstrNamespace,BSTR bstrUrn,LONG lFlags,VARIANT *pvarFactory) = 0;
  };
#else
  typedef struct IElementNamespaceTableVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementNamespaceTable *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementNamespaceTable *This);
      ULONG (WINAPI *Release)(IElementNamespaceTable *This);
      HRESULT (WINAPI *AddNamespace)(IElementNamespaceTable *This,BSTR bstrNamespace,BSTR bstrUrn,LONG lFlags,VARIANT *pvarFactory);
    END_INTERFACE
  } IElementNamespaceTableVtbl;
  interface IElementNamespaceTable {
    CONST_VTBL struct IElementNamespaceTableVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementNamespaceTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementNamespaceTable_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementNamespaceTable_Release(This) (This)->lpVtbl->Release(This)
#define IElementNamespaceTable_AddNamespace(This,bstrNamespace,bstrUrn,lFlags,pvarFactory) (This)->lpVtbl->AddNamespace(This,bstrNamespace,bstrUrn,lFlags,pvarFactory)
#endif
#endif

  HRESULT WINAPI IElementNamespaceTable_AddNamespace_Proxy(IElementNamespaceTable *This,BSTR bstrNamespace,BSTR bstrUrn,LONG lFlags,VARIANT *pvarFactory);
  void __RPC_STUB IElementNamespaceTable_AddNamespace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementNamespaceFactory_INTERFACE_DEFINED__
#define __IElementNamespaceFactory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespaceFactory;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementNamespaceFactory : public IUnknown {
  public:
    virtual HRESULT WINAPI Create(IElementNamespace *pNamespace) = 0;
  };
#else
  typedef struct IElementNamespaceFactoryVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementNamespaceFactory *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementNamespaceFactory *This);
      ULONG (WINAPI *Release)(IElementNamespaceFactory *This);
      HRESULT (WINAPI *Create)(IElementNamespaceFactory *This,IElementNamespace *pNamespace);
    END_INTERFACE
  } IElementNamespaceFactoryVtbl;
  interface IElementNamespaceFactory {
    CONST_VTBL struct IElementNamespaceFactoryVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementNamespaceFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementNamespaceFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementNamespaceFactory_Release(This) (This)->lpVtbl->Release(This)
#define IElementNamespaceFactory_Create(This,pNamespace) (This)->lpVtbl->Create(This,pNamespace)
#endif
#endif

  HRESULT WINAPI IElementNamespaceFactory_Create_Proxy(IElementNamespaceFactory *This,IElementNamespace *pNamespace);
  void __RPC_STUB IElementNamespaceFactory_Create_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementNamespaceFactory2_INTERFACE_DEFINED__
#define __IElementNamespaceFactory2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespaceFactory2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementNamespaceFactory2 : public IElementNamespaceFactory {
  public:
    virtual HRESULT WINAPI CreateWithImplementation(IElementNamespace *pNamespace,BSTR bstrImplementation) = 0;
  };
#else
  typedef struct IElementNamespaceFactory2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementNamespaceFactory2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementNamespaceFactory2 *This);
      ULONG (WINAPI *Release)(IElementNamespaceFactory2 *This);
      HRESULT (WINAPI *Create)(IElementNamespaceFactory2 *This,IElementNamespace *pNamespace);
      HRESULT (WINAPI *CreateWithImplementation)(IElementNamespaceFactory2 *This,IElementNamespace *pNamespace,BSTR bstrImplementation);
    END_INTERFACE
  } IElementNamespaceFactory2Vtbl;
  interface IElementNamespaceFactory2 {
    CONST_VTBL struct IElementNamespaceFactory2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementNamespaceFactory2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementNamespaceFactory2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementNamespaceFactory2_Release(This) (This)->lpVtbl->Release(This)
#define IElementNamespaceFactory2_Create(This,pNamespace) (This)->lpVtbl->Create(This,pNamespace)
#define IElementNamespaceFactory2_CreateWithImplementation(This,pNamespace,bstrImplementation) (This)->lpVtbl->CreateWithImplementation(This,pNamespace,bstrImplementation)
#endif
#endif

  HRESULT WINAPI IElementNamespaceFactory2_CreateWithImplementation_Proxy(IElementNamespaceFactory2 *This,IElementNamespace *pNamespace,BSTR bstrImplementation);
  void __RPC_STUB IElementNamespaceFactory2_CreateWithImplementation_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementNamespaceFactoryCallback_INTERFACE_DEFINED__
#define __IElementNamespaceFactoryCallback_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementNamespaceFactoryCallback;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementNamespaceFactoryCallback : public IUnknown {
  public:
    virtual HRESULT WINAPI Resolve(BSTR bstrNamespace,BSTR bstrTagName,BSTR bstrAttrs,IElementNamespace *pNamespace) = 0;
  };
#else
  typedef struct IElementNamespaceFactoryCallbackVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementNamespaceFactoryCallback *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementNamespaceFactoryCallback *This);
      ULONG (WINAPI *Release)(IElementNamespaceFactoryCallback *This);
      HRESULT (WINAPI *Resolve)(IElementNamespaceFactoryCallback *This,BSTR bstrNamespace,BSTR bstrTagName,BSTR bstrAttrs,IElementNamespace *pNamespace);
    END_INTERFACE
  } IElementNamespaceFactoryCallbackVtbl;
  interface IElementNamespaceFactoryCallback {
    CONST_VTBL struct IElementNamespaceFactoryCallbackVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementNamespaceFactoryCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementNamespaceFactoryCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementNamespaceFactoryCallback_Release(This) (This)->lpVtbl->Release(This)
#define IElementNamespaceFactoryCallback_Resolve(This,bstrNamespace,bstrTagName,bstrAttrs,pNamespace) (This)->lpVtbl->Resolve(This,bstrNamespace,bstrTagName,bstrAttrs,pNamespace)
#endif
#endif

  HRESULT WINAPI IElementNamespaceFactoryCallback_Resolve_Proxy(IElementNamespaceFactoryCallback *This,BSTR bstrNamespace,BSTR bstrTagName,BSTR bstrAttrs,IElementNamespace *pNamespace);
  void __RPC_STUB IElementNamespaceFactoryCallback_Resolve_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteOM2_INTERFACE_DEFINED__
#define __IElementBehaviorSiteOM2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteOM2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorSiteOM2 : public IElementBehaviorSiteOM {
  public:
    virtual HRESULT WINAPI GetDefaults(IHTMLElementDefaults **ppDefaults) = 0;
  };
#else
  typedef struct IElementBehaviorSiteOM2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorSiteOM2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorSiteOM2 *This);
      ULONG (WINAPI *Release)(IElementBehaviorSiteOM2 *This);
      HRESULT (WINAPI *RegisterEvent)(IElementBehaviorSiteOM2 *This,LPOLESTR pchEvent,LONG lFlags,LONG *plCookie);
      HRESULT (WINAPI *GetEventCookie)(IElementBehaviorSiteOM2 *This,LPOLESTR pchEvent,LONG *plCookie);
      HRESULT (WINAPI *FireEvent)(IElementBehaviorSiteOM2 *This,LONG lCookie,IHTMLEventObj *pEventObject);
      HRESULT (WINAPI *CreateEventObject)(IElementBehaviorSiteOM2 *This,IHTMLEventObj **ppEventObject);
      HRESULT (WINAPI *RegisterName)(IElementBehaviorSiteOM2 *This,LPOLESTR pchName);
      HRESULT (WINAPI *RegisterUrn)(IElementBehaviorSiteOM2 *This,LPOLESTR pchUrn);
      HRESULT (WINAPI *GetDefaults)(IElementBehaviorSiteOM2 *This,IHTMLElementDefaults **ppDefaults);
    END_INTERFACE
  } IElementBehaviorSiteOM2Vtbl;
  interface IElementBehaviorSiteOM2 {
    CONST_VTBL struct IElementBehaviorSiteOM2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorSiteOM2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorSiteOM2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorSiteOM2_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorSiteOM2_RegisterEvent(This,pchEvent,lFlags,plCookie) (This)->lpVtbl->RegisterEvent(This,pchEvent,lFlags,plCookie)
#define IElementBehaviorSiteOM2_GetEventCookie(This,pchEvent,plCookie) (This)->lpVtbl->GetEventCookie(This,pchEvent,plCookie)
#define IElementBehaviorSiteOM2_FireEvent(This,lCookie,pEventObject) (This)->lpVtbl->FireEvent(This,lCookie,pEventObject)
#define IElementBehaviorSiteOM2_CreateEventObject(This,ppEventObject) (This)->lpVtbl->CreateEventObject(This,ppEventObject)
#define IElementBehaviorSiteOM2_RegisterName(This,pchName) (This)->lpVtbl->RegisterName(This,pchName)
#define IElementBehaviorSiteOM2_RegisterUrn(This,pchUrn) (This)->lpVtbl->RegisterUrn(This,pchUrn)
#define IElementBehaviorSiteOM2_GetDefaults(This,ppDefaults) (This)->lpVtbl->GetDefaults(This,ppDefaults)
#endif
#endif

  HRESULT WINAPI IElementBehaviorSiteOM2_GetDefaults_Proxy(IElementBehaviorSiteOM2 *This,IHTMLElementDefaults **ppDefaults);
  void __RPC_STUB IElementBehaviorSiteOM2_GetDefaults_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorCategory_INTERFACE_DEFINED__
#define __IElementBehaviorCategory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorCategory;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorCategory : public IUnknown {
  public:
    virtual HRESULT WINAPI GetCategory(LPOLESTR *ppchCategory) = 0;
  };
#else
  typedef struct IElementBehaviorCategoryVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorCategory *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorCategory *This);
      ULONG (WINAPI *Release)(IElementBehaviorCategory *This);
      HRESULT (WINAPI *GetCategory)(IElementBehaviorCategory *This,LPOLESTR *ppchCategory);
    END_INTERFACE
  } IElementBehaviorCategoryVtbl;
  interface IElementBehaviorCategory {
    CONST_VTBL struct IElementBehaviorCategoryVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorCategory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorCategory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorCategory_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorCategory_GetCategory(This,ppchCategory) (This)->lpVtbl->GetCategory(This,ppchCategory)
#endif
#endif

  HRESULT WINAPI IElementBehaviorCategory_GetCategory_Proxy(IElementBehaviorCategory *This,LPOLESTR *ppchCategory);
  void __RPC_STUB IElementBehaviorCategory_GetCategory_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteCategory_INTERFACE_DEFINED__
#define __IElementBehaviorSiteCategory_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteCategory;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorSiteCategory : public IUnknown {
  public:
    virtual HRESULT WINAPI GetRelatedBehaviors(LONG lDirection,LPOLESTR pchCategory,IEnumUnknown **ppEnumerator) = 0;
  };
#else
  typedef struct IElementBehaviorSiteCategoryVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorSiteCategory *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorSiteCategory *This);
      ULONG (WINAPI *Release)(IElementBehaviorSiteCategory *This);
      HRESULT (WINAPI *GetRelatedBehaviors)(IElementBehaviorSiteCategory *This,LONG lDirection,LPOLESTR pchCategory,IEnumUnknown **ppEnumerator);
    END_INTERFACE
  } IElementBehaviorSiteCategoryVtbl;
  interface IElementBehaviorSiteCategory {
    CONST_VTBL struct IElementBehaviorSiteCategoryVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorSiteCategory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorSiteCategory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorSiteCategory_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorSiteCategory_GetRelatedBehaviors(This,lDirection,pchCategory,ppEnumerator) (This)->lpVtbl->GetRelatedBehaviors(This,lDirection,pchCategory,ppEnumerator)
#endif
#endif

  HRESULT WINAPI IElementBehaviorSiteCategory_GetRelatedBehaviors_Proxy(IElementBehaviorSiteCategory *This,LONG lDirection,LPOLESTR pchCategory,IEnumUnknown **ppEnumerator);
  void __RPC_STUB IElementBehaviorSiteCategory_GetRelatedBehaviors_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSubmit_INTERFACE_DEFINED__
#define __IElementBehaviorSubmit_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSubmit;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorSubmit : public IUnknown {
  public:
    virtual HRESULT WINAPI GetSubmitInfo(IHTMLSubmitData *pSubmitData) = 0;
    virtual HRESULT WINAPI Reset(void) = 0;
  };
#else
  typedef struct IElementBehaviorSubmitVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorSubmit *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorSubmit *This);
      ULONG (WINAPI *Release)(IElementBehaviorSubmit *This);
      HRESULT (WINAPI *GetSubmitInfo)(IElementBehaviorSubmit *This,IHTMLSubmitData *pSubmitData);
      HRESULT (WINAPI *Reset)(IElementBehaviorSubmit *This);
    END_INTERFACE
  } IElementBehaviorSubmitVtbl;
  interface IElementBehaviorSubmit {
    CONST_VTBL struct IElementBehaviorSubmitVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorSubmit_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorSubmit_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorSubmit_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorSubmit_GetSubmitInfo(This,pSubmitData) (This)->lpVtbl->GetSubmitInfo(This,pSubmitData)
#define IElementBehaviorSubmit_Reset(This) (This)->lpVtbl->Reset(This)
#endif
#endif

  HRESULT WINAPI IElementBehaviorSubmit_GetSubmitInfo_Proxy(IElementBehaviorSubmit *This,IHTMLSubmitData *pSubmitData);
  void __RPC_STUB IElementBehaviorSubmit_GetSubmitInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSubmit_Reset_Proxy(IElementBehaviorSubmit *This);
  void __RPC_STUB IElementBehaviorSubmit_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorFocus_INTERFACE_DEFINED__
#define __IElementBehaviorFocus_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorFocus;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorFocus : public IUnknown {
  public:
    virtual HRESULT WINAPI GetFocusRect(RECT *pRect) = 0;
  };
#else
  typedef struct IElementBehaviorFocusVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorFocus *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorFocus *This);
      ULONG (WINAPI *Release)(IElementBehaviorFocus *This);
      HRESULT (WINAPI *GetFocusRect)(IElementBehaviorFocus *This,RECT *pRect);
    END_INTERFACE
  } IElementBehaviorFocusVtbl;
  interface IElementBehaviorFocus {
    CONST_VTBL struct IElementBehaviorFocusVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorFocus_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorFocus_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorFocus_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorFocus_GetFocusRect(This,pRect) (This)->lpVtbl->GetFocusRect(This,pRect)
#endif
#endif

  HRESULT WINAPI IElementBehaviorFocus_GetFocusRect_Proxy(IElementBehaviorFocus *This,RECT *pRect);
  void __RPC_STUB IElementBehaviorFocus_GetFocusRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorLayout_INTERFACE_DEFINED__
#define __IElementBehaviorLayout_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorLayout;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorLayout : public IUnknown {
  public:
    virtual HRESULT WINAPI GetSize(LONG dwFlags,SIZE sizeContent,POINT *pptTranslateBy,POINT *pptTopLeft,SIZE *psizeProposed) = 0;
    virtual HRESULT WINAPI GetLayoutInfo(LONG *plLayoutInfo) = 0;
    virtual HRESULT WINAPI GetPosition(LONG lFlags,POINT *pptTopLeft) = 0;
    virtual HRESULT WINAPI MapSize(SIZE *psizeIn,RECT *prcOut) = 0;
  };
#else
  typedef struct IElementBehaviorLayoutVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorLayout *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorLayout *This);
      ULONG (WINAPI *Release)(IElementBehaviorLayout *This);
      HRESULT (WINAPI *GetSize)(IElementBehaviorLayout *This,LONG dwFlags,SIZE sizeContent,POINT *pptTranslateBy,POINT *pptTopLeft,SIZE *psizeProposed);
      HRESULT (WINAPI *GetLayoutInfo)(IElementBehaviorLayout *This,LONG *plLayoutInfo);
      HRESULT (WINAPI *GetPosition)(IElementBehaviorLayout *This,LONG lFlags,POINT *pptTopLeft);
      HRESULT (WINAPI *MapSize)(IElementBehaviorLayout *This,SIZE *psizeIn,RECT *prcOut);
    END_INTERFACE
  } IElementBehaviorLayoutVtbl;
  interface IElementBehaviorLayout {
    CONST_VTBL struct IElementBehaviorLayoutVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorLayout_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorLayout_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorLayout_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorLayout_GetSize(This,dwFlags,sizeContent,pptTranslateBy,pptTopLeft,psizeProposed) (This)->lpVtbl->GetSize(This,dwFlags,sizeContent,pptTranslateBy,pptTopLeft,psizeProposed)
#define IElementBehaviorLayout_GetLayoutInfo(This,plLayoutInfo) (This)->lpVtbl->GetLayoutInfo(This,plLayoutInfo)
#define IElementBehaviorLayout_GetPosition(This,lFlags,pptTopLeft) (This)->lpVtbl->GetPosition(This,lFlags,pptTopLeft)
#define IElementBehaviorLayout_MapSize(This,psizeIn,prcOut) (This)->lpVtbl->MapSize(This,psizeIn,prcOut)
#endif
#endif

  HRESULT WINAPI IElementBehaviorLayout_GetSize_Proxy(IElementBehaviorLayout *This,LONG dwFlags,SIZE sizeContent,POINT *pptTranslateBy,POINT *pptTopLeft,SIZE *psizeProposed);
  void __RPC_STUB IElementBehaviorLayout_GetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorLayout_GetLayoutInfo_Proxy(IElementBehaviorLayout *This,LONG *plLayoutInfo);
  void __RPC_STUB IElementBehaviorLayout_GetLayoutInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorLayout_GetPosition_Proxy(IElementBehaviorLayout *This,LONG lFlags,POINT *pptTopLeft);
  void __RPC_STUB IElementBehaviorLayout_GetPosition_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorLayout_MapSize_Proxy(IElementBehaviorLayout *This,SIZE *psizeIn,RECT *prcOut);
  void __RPC_STUB IElementBehaviorLayout_MapSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorLayout2_INTERFACE_DEFINED__
#define __IElementBehaviorLayout2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorLayout2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorLayout2 : public IUnknown {
  public:
    virtual HRESULT WINAPI GetTextDescent(LONG *plDescent) = 0;
  };
#else
  typedef struct IElementBehaviorLayout2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorLayout2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorLayout2 *This);
      ULONG (WINAPI *Release)(IElementBehaviorLayout2 *This);
      HRESULT (WINAPI *GetTextDescent)(IElementBehaviorLayout2 *This,LONG *plDescent);
    END_INTERFACE
  } IElementBehaviorLayout2Vtbl;
  interface IElementBehaviorLayout2 {
    CONST_VTBL struct IElementBehaviorLayout2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorLayout2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorLayout2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorLayout2_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorLayout2_GetTextDescent(This,plDescent) (This)->lpVtbl->GetTextDescent(This,plDescent)
#endif
#endif

  HRESULT WINAPI IElementBehaviorLayout2_GetTextDescent_Proxy(IElementBehaviorLayout2 *This,LONG *plDescent);
  void __RPC_STUB IElementBehaviorLayout2_GetTextDescent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteLayout_INTERFACE_DEFINED__
#define __IElementBehaviorSiteLayout_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteLayout;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorSiteLayout : public IUnknown {
  public:
    virtual HRESULT WINAPI InvalidateLayoutInfo(void) = 0;
    virtual HRESULT WINAPI InvalidateSize(void) = 0;
    virtual HRESULT WINAPI GetMediaResolution(SIZE *psizeResolution) = 0;
  };
#else
  typedef struct IElementBehaviorSiteLayoutVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorSiteLayout *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorSiteLayout *This);
      ULONG (WINAPI *Release)(IElementBehaviorSiteLayout *This);
      HRESULT (WINAPI *InvalidateLayoutInfo)(IElementBehaviorSiteLayout *This);
      HRESULT (WINAPI *InvalidateSize)(IElementBehaviorSiteLayout *This);
      HRESULT (WINAPI *GetMediaResolution)(IElementBehaviorSiteLayout *This,SIZE *psizeResolution);
    END_INTERFACE
  } IElementBehaviorSiteLayoutVtbl;
  interface IElementBehaviorSiteLayout {
    CONST_VTBL struct IElementBehaviorSiteLayoutVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorSiteLayout_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorSiteLayout_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorSiteLayout_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorSiteLayout_InvalidateLayoutInfo(This) (This)->lpVtbl->InvalidateLayoutInfo(This)
#define IElementBehaviorSiteLayout_InvalidateSize(This) (This)->lpVtbl->InvalidateSize(This)
#define IElementBehaviorSiteLayout_GetMediaResolution(This,psizeResolution) (This)->lpVtbl->GetMediaResolution(This,psizeResolution)
#endif
#endif

  HRESULT WINAPI IElementBehaviorSiteLayout_InvalidateLayoutInfo_Proxy(IElementBehaviorSiteLayout *This);
  void __RPC_STUB IElementBehaviorSiteLayout_InvalidateLayoutInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteLayout_InvalidateSize_Proxy(IElementBehaviorSiteLayout *This);
  void __RPC_STUB IElementBehaviorSiteLayout_InvalidateSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
  HRESULT WINAPI IElementBehaviorSiteLayout_GetMediaResolution_Proxy(IElementBehaviorSiteLayout *This,SIZE *psizeResolution);
  void __RPC_STUB IElementBehaviorSiteLayout_GetMediaResolution_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IElementBehaviorSiteLayout2_INTERFACE_DEFINED__
#define __IElementBehaviorSiteLayout2_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IElementBehaviorSiteLayout2;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IElementBehaviorSiteLayout2 : public IUnknown {
  public:
    virtual HRESULT WINAPI GetFontInfo(LOGFONTW *plf) = 0;
  };
#else
  typedef struct IElementBehaviorSiteLayout2Vtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IElementBehaviorSiteLayout2 *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IElementBehaviorSiteLayout2 *This);
      ULONG (WINAPI *Release)(IElementBehaviorSiteLayout2 *This);
      HRESULT (WINAPI *GetFontInfo)(IElementBehaviorSiteLayout2 *This,LOGFONTW *plf);
    END_INTERFACE
  } IElementBehaviorSiteLayout2Vtbl;
  interface IElementBehaviorSiteLayout2 {
    CONST_VTBL struct IElementBehaviorSiteLayout2Vtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IElementBehaviorSiteLayout2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IElementBehaviorSiteLayout2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IElementBehaviorSiteLayout2_Release(This) (This)->lpVtbl->Release(This)
#define IElementBehaviorSiteLayout2_GetFontInfo(This,plf) (This)->lpVtbl->GetFontInfo(This,plf)
#endif
#endif

  HRESULT WINAPI IElementBehaviorSiteLayout2_GetFontInfo_Proxy(IElementBehaviorSiteLayout2 *This,LOGFONTW *plf);
  void __RPC_STUB IElementBehaviorSiteLayout2_GetFontInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif

#ifndef __IHostBehaviorInit_INTERFACE_DEFINED__
#define __IHostBehaviorInit_INTERFACE_DEFINED__
  EXTERN_C const IID IID_IHostBehaviorInit;
#if defined(__cplusplus) && !defined(CINTERFACE)
  struct IHostBehaviorInit : public IUnknown {
  public:
    virtual HRESULT WINAPI PopulateNamespaceTable(void) = 0;
  };
#else
  typedef struct IHostBehaviorInitVtbl {
    BEGIN_INTERFACE
      HRESULT (WINAPI *QueryInterface)(IHostBehaviorInit *This,REFIID riid,void **ppvObject);
      ULONG (WINAPI *AddRef)(IHostBehaviorInit *This);
      ULONG (WINAPI *Release)(IHostBehaviorInit *This);
      HRESULT (WINAPI *PopulateNamespaceTable)(IHostBehaviorInit *This);
    END_INTERFACE
  } IHostBehaviorInitVtbl;
  interface IHostBehaviorInit {
    CONST_VTBL struct IHostBehaviorInitVtbl *lpVtbl;
  };
#ifdef COBJMACROS
#define IHostBehaviorInit_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHostBehaviorInit_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHostBehaviorInit_Release(This) (This)->lpVtbl->Release(This)
#define IHostBehaviorInit_PopulateNamespaceTable(This) (This)->lpVtbl->PopulateNamespaceTable(This)
#endif
#endif
  HRESULT WINAPI IHostBehaviorInit_PopulateNamespaceTable_Proxy(IHostBehaviorInit *This);
  void __RPC_STUB IHostBehaviorInit_PopulateNamespaceTable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);
#endif
#endif

  unsigned long __RPC_API VARIANT_UserSize(unsigned long *,unsigned long,VARIANT *);
  unsigned char *__RPC_API VARIANT_UserMarshal(unsigned long *,unsigned char *,VARIANT *);
  unsigned char *__RPC_API VARIANT_UserUnmarshal(unsigned long *,unsigned char *,VARIANT *);
  void __RPC_API VARIANT_UserFree(unsigned long *,VARIANT *);

#ifdef __cplusplus
}
#endif
#endif
