/**
 * 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.PD 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 struct IHTMLFiltersCollection IHTMLFiltersCollection;
#endif

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#ifndef __DispHTMLStyle_FWD_DEFINED__
#define __DispHTMLStyle_FWD_DEFINED__
typedef struct 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 struct 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 struct IHTMLRenderStyle IHTMLRenderStyle;
#endif

#ifndef __DispHTMLRenderStyle_FWD_DEFINED__
#define __DispHTMLRenderStyle_FWD_DEFINED__
typedef struct 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 struct IHTMLCurrentStyle IHTMLCurrentStyle;
#endif

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

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

#ifndef __DispHTMLCurrentStyle_FWD_DEFINED__
#define __DispHTMLCurrentStyle_FWD_DEFINED__
typedef struct 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 struct IHTMLElement IHTMLElement;
#endif

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

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

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

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

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

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

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

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

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

#ifndef __DispHTMLDOMAttribute_FWD_DEFINED__
#define __DispHTMLDOMAttribute_FWD_DEFINED__
typedef struct 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 struct 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 struct 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 struct IHTMLAttributeCollection IHTMLAttributeCollection;
#endif

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

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

#ifndef __DispHTMLAttributeCollection_FWD_DEFINED__
#define __DispHTMLAttributeCollection_FWD_DEFINED__
typedef struct 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 struct 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 struct HTMLElementEvents2 HTMLElementEvents2;
#endif

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

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

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

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

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

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

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

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

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

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

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

#ifndef __DispHTMLDefaults_FWD_DEFINED__
#define __DispHTMLDefaults_FWD_DEFINED__
typedef struct 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 struct IHTCDefaultDispatch IHTCDefaultDispatch;
#endif

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

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

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

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

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

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

#ifndef __DispHTCDefaultDispatch_FWD_DEFINED__
#define __DispHTCDefaultDispatch_FWD_DEFINED__
typedef struct 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 struct 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 struct 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 struct 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 struct 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 struct 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 struct 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 struct IHTMLGenericElement IHTMLGenericElement;
#endif

#ifndef __DispHTMLGenericElement_FWD_DEFINED__
#define __DispHTMLGenericElement_FWD_DEFINED__
typedef struct 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 struct IHTMLStyleSheetRule IHTMLStyleSheetRule;
#endif

#ifndef __IHTMLStyleSheetRulesCollection_FWD_DEFINED__
#define __IHTMLStyleSheetRulesCollection_FWD_DEFINED__
typedef struct 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 struct IHTMLStyleSheetPage IHTMLStyleSheetPage;
#endif

#ifndef __IHTMLStyleSheetPagesCollection_FWD_DEFINED__
#define __IHTMLStyleSheetPagesCollection_FWD_DEFINED__
typedef struct 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 struct IHTMLStyleSheetsCollection IHTMLStyleSheetsCollection;
#endif

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

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

#ifndef __DispHTMLStyleSheet_FWD_DEFINED__
#define __DispHTMLStyleSheet_FWD_DEFINED__
typedef struct 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 struct HTMLLinkElementEvents2 HTMLLinkElementEvents2;
#endif

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

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

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

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

#ifndef __DispHTMLLinkElement_FWD_DEFINED__
#define __DispHTMLLinkElement_FWD_DEFINED__
typedef struct 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 struct IHTMLTxtRange IHTMLTxtRange;
#endif

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

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

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

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

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

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

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

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

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

#ifndef __DispHTMLFormElement_FWD_DEFINED__
#define __DispHTMLFormElement_FWD_DEFINED__
typedef struct 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 struct HTMLControlElementEvents2 HTMLControlElementEvents2;
#endif

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

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

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

#ifndef __DispHTMLTextElement_FWD_DEFINED__
#define __DispHTMLTextElement_FWD_DEFINED__
typedef struct 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 struct HTMLTextContainerEvents2 HTMLTextContainerEvents2;
#endif

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

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

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

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

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

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

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

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

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

#ifndef __DispHTMLImg_FWD_DEFINED__
#define __DispHTMLImg_FWD_DEFINED__
typedef struct 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 struct IHTMLBodyElement IHTMLBodyElement;
#endif

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

#ifndef __DispHTMLBody_FWD_DEFINED__
#define __DispHTMLBody_FWD_DEFINED__
typedef struct 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 struct IHTMLFontElement IHTMLFontElement;
#endif

#ifndef __DispHTMLFontElement_FWD_DEFINED__
#define __DispHTMLFontElement_FWD_DEFINED__
typedef struct 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 struct HTMLAnchorEvents2 HTMLAnchorEvents2;
#endif

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

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

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

#ifndef __DispHTMLAnchorElement_FWD_DEFINED__
#define __DispHTMLAnchorElement_FWD_DEFINED__
typedef struct 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 struct HTMLLabelEvents2 HTMLLabelEvents2;
#endif

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

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

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

#ifndef __DispHTMLLabelElement_FWD_DEFINED__
#define __DispHTMLLabelElement_FWD_DEFINED__
typedef struct 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 struct IHTMLListElement IHTMLListElement;
#endif

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

#ifndef __DispHTMLListElement_FWD_DEFINED__
#define __DispHTMLListElement_FWD_DEFINED__
typedef struct 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 struct IHTMLUListElement IHTMLUListElement;
#endif

#ifndef __DispHTMLUListElement_FWD_DEFINED__
#define __DispHTMLUListElement_FWD_DEFINED__
typedef struct 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 struct IHTMLOListElement IHTMLOListElement;
#endif

#ifndef __DispHTMLOListElement_FWD_DEFINED__
#define __DispHTMLOListElement_FWD_DEFINED__
typedef struct 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 struct IHTMLLIElement IHTMLLIElement;
#endif

#ifndef __DispHTMLLIElement_FWD_DEFINED__
#define __DispHTMLLIElement_FWD_DEFINED__
typedef struct 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 struct IHTMLBlockElement IHTMLBlockElement;
#endif

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

#ifndef __DispHTMLBlockElement_FWD_DEFINED__
#define __DispHTMLBlockElement_FWD_DEFINED__
typedef struct 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 struct IHTMLDivElement IHTMLDivElement;
#endif

#ifndef __DispHTMLDivElement_FWD_DEFINED__
#define __DispHTMLDivElement_FWD_DEFINED__
typedef struct 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 struct IHTMLDDElement IHTMLDDElement;
#endif

#ifndef __DispHTMLDDElement_FWD_DEFINED__
#define __DispHTMLDDElement_FWD_DEFINED__
typedef struct 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 struct IHTMLDTElement IHTMLDTElement;
#endif

#ifndef __DispHTMLDTElement_FWD_DEFINED__
#define __DispHTMLDTElement_FWD_DEFINED__
typedef struct 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 struct IHTMLBRElement IHTMLBRElement;
#endif

#ifndef __DispHTMLBRElement_FWD_DEFINED__
#define __DispHTMLBRElement_FWD_DEFINED__
typedef struct 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 struct IHTMLDListElement IHTMLDListElement;
#endif

#ifndef __DispHTMLDListElement_FWD_DEFINED__
#define __DispHTMLDListElement_FWD_DEFINED__
typedef struct 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 struct IHTMLHRElement IHTMLHRElement;
#endif

#ifndef __DispHTMLHRElement_FWD_DEFINED__
#define __DispHTMLHRElement_FWD_DEFINED__
typedef struct 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 struct IHTMLParaElement IHTMLParaElement;
#endif

#ifndef __DispHTMLParaElement_FWD_DEFINED__
#define __DispHTMLParaElement_FWD_DEFINED__
typedef struct 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 struct IHTMLElementCollection2 IHTMLElementCollection2;
#endif

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

#ifndef __DispHTMLElementCollection_FWD_DEFINED__
#define __DispHTMLElementCollection_FWD_DEFINED__
typedef struct 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 struct IHTMLHeaderElement IHTMLHeaderElement;
#endif

#ifndef __DispHTMLHeaderElement_FWD_DEFINED__
#define __DispHTMLHeaderElement_FWD_DEFINED__
typedef struct 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 struct HTMLSelectElementEvents2 HTMLSelectElementEvents2;
#endif

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

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

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

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

#ifndef __DispHTMLSelectElement_FWD_DEFINED__
#define __DispHTMLSelectElement_FWD_DEFINED__
typedef struct 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 struct IHTMLSelectionObject IHTMLSelectionObject;
#endif

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

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

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

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

#ifndef __DispHTMLOptionElement_FWD_DEFINED__
#define __DispHTMLOptionElement_FWD_DEFINED__
typedef struct 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 struct HTMLButtonElementEvents2 HTMLButtonElementEvents2;
#endif

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#ifndef __DispHTMLInputElement_FWD_DEFINED__
#define __DispHTMLInputElement_FWD_DEFINED__
typedef struct 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 struct IHTMLTextAreaElement IHTMLTextAreaElement;
#endif

#ifndef __DispHTMLTextAreaElement_FWD_DEFINED__
#define __DispHTMLTextAreaElement_FWD_DEFINED__
typedef struct 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 struct 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 struct IHTMLButtonElement IHTMLButtonElement;
#endif

#ifndef __DispHTMLButtonElement_FWD_DEFINED__
#define __DispHTMLButtonElement_FWD_DEFINED__
typedef struct 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 struct HTMLMarqueeElementEvents2 HTMLMarqueeElementEvents2;
#endif

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

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

#ifndef __DispHTMLMarqueeElement_FWD_DEFINED__
#define __DispHTMLMarqueeElement_FWD_DEFINED__
typedef struct 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 struct IHTMLHtmlElement IHTMLHtmlElement;
#endif

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

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

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

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

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

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

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

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

#ifndef __DispHTMLHtmlElement_FWD_DEFINED__
#define __DispHTMLHtmlElement_FWD_DEFINED__
typedef struct 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 struct 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 struct 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 struct 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 struct 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 struct 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 struct 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 struct IHTMLBaseFontElement IHTMLBaseFontElement;
#endif

#ifndef __DispHTMLBaseFontElement_FWD_DEFINED__
#define __DispHTMLBaseFontElement_FWD_DEFINED__
typedef struct 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 struct IHTMLUnknownElement IHTMLUnknownElement;
#endif

#ifndef __DispHTMLUnknownElement_FWD_DEFINED__
#define __DispHTMLUnknownElement_FWD_DEFINED__
typedef struct 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 struct IOmHistory IOmHistory;
#endif

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

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

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

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

#ifndef __IHTMLLocation_FWD_DEFINED__
#define __IHTMLLocation_FWD_DEFINED__
typedef struct 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 struct IHTMLBookmarkCollection IHTMLBookmarkCollection;
#endif

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

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

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

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

#ifndef __DispCEventObj_FWD_DEFINED__
#define __DispCEventObj_FWD_DEFINED__
typedef struct 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 struct HTMLWindowEvents2 HTMLWindowEvents2;
#endif

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

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

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

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

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

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

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

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

#ifndef __IHTMLWindow4_FWD_DEFINED__
#define __IHTMLWindow4_FWD_DEFINED__
typedef struct 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 struct 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 struct 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 struct 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 struct HTMLDocumentEvents2 HTMLDocumentEvents2;
#endif

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

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

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

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

#ifndef __DispHTMLDocument_FWD_DEFINED__
#define __DispHTMLDocument_FWD_DEFINED__
typedef struct 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 struct DWebBridgeEvents DWebBridgeEvents;
#endif

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

#ifndef __IWBScriptControl_FWD_DEFINED__
#define __IWBScriptControl_FWD_DEFINED__
typedef struct 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 struct IHTMLEmbedElement IHTMLEmbedElement;
#endif

#ifndef __DispHTMLEmbed_FWD_DEFINED__
#define __DispHTMLEmbed_FWD_DEFINED__
typedef struct 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 struct HTMLMapEvents2 HTMLMapEvents2;
#endif

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

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

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

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

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

#ifndef __DispHTMLAreasCollection_FWD_DEFINED__
#define __DispHTMLAreasCollection_FWD_DEFINED__
typedef struct 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 struct 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 struct HTMLAreaEvents2 HTMLAreaEvents2;
#endif

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

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

#ifndef __DispHTMLAreaElement_FWD_DEFINED__
#define __DispHTMLAreaElement_FWD_DEFINED__
typedef struct 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 struct IHTMLTableCaption IHTMLTableCaption;
#endif

#ifndef __DispHTMLTableCaption_FWD_DEFINED__
#define __DispHTMLTableCaption_FWD_DEFINED__
typedef struct 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 struct IHTMLCommentElement IHTMLCommentElement;
#endif

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

#ifndef __DispHTMLCommentElement_FWD_DEFINED__
#define __DispHTMLCommentElement_FWD_DEFINED__
typedef struct 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 struct IHTMLPhraseElement IHTMLPhraseElement;
#endif

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

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

#ifndef __DispHTMLPhraseElement_FWD_DEFINED__
#define __DispHTMLPhraseElement_FWD_DEFINED__
typedef struct 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 struct 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 struct HTMLTableEvents2 HTMLTableEvents2;
#endif

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#ifndef __DispHTMLTable_FWD_DEFINED__
#define __DispHTMLTable_FWD_DEFINED__
typedef struct 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 struct 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 struct 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 struct 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 struct 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 struct HTMLScriptEvents2 HTMLScriptEvents2;
#endif

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

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

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

#ifndef __DispHTMLScriptElement_FWD_DEFINED__
#define __DispHTMLScriptElement_FWD_DEFINED__
typedef struct 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 struct IHTMLNoShowElement IHTMLNoShowElement;
#endif

#ifndef __DispHTMLNoShowElement_FWD_DEFINED__
#define __DispHTMLNoShowElement_FWD_DEFINED__
typedef struct 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 struct HTMLObjectElementEvents2 HTMLObjectElementEvents2;
#endif

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

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

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

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

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

#ifndef __DispHTMLObjectElement_FWD_DEFINED__
#define __DispHTMLObjectElement_FWD_DEFINED__
typedef struct 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 struct 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 struct HTMLFrameSiteEvents2 HTMLFrameSiteEvents2;
#endif

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

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

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

#ifndef __DispHTMLFrameBase_FWD_DEFINED__
#define __DispHTMLFrameBase_FWD_DEFINED__
typedef struct 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 struct IHTMLFrameElement IHTMLFrameElement;
#endif

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

#ifndef __DispHTMLFrameElement_FWD_DEFINED__
#define __DispHTMLFrameElement_FWD_DEFINED__
typedef struct 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 struct IHTMLIFrameElement IHTMLIFrameElement;
#endif

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

#ifndef __DispHTMLIFrame_FWD_DEFINED__
#define __DispHTMLIFrame_FWD_DEFINED__
typedef struct 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 struct IHTMLDivPosition IHTMLDivPosition;
#endif

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

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

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

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

#ifndef __DispHTMLDivPosition_FWD_DEFINED__
#define __DispHTMLDivPosition_FWD_DEFINED__
typedef struct 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 struct 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 struct 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 struct IHTMLSpanFlow IHTMLSpanFlow;
#endif

#ifndef __DispHTMLSpanFlow_FWD_DEFINED__
#define __DispHTMLSpanFlow_FWD_DEFINED__
typedef struct 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 struct IHTMLFrameSetElement IHTMLFrameSetElement;
#endif

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

#ifndef __DispHTMLFrameSetSite_FWD_DEFINED__
#define __DispHTMLFrameSetSite_FWD_DEFINED__
typedef struct 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 struct IHTMLBGsound IHTMLBGsound;
#endif

#ifndef __DispHTMLBGsound_FWD_DEFINED__
#define __DispHTMLBGsound_FWD_DEFINED__
typedef struct 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 struct IHTMLFontNamesCollection IHTMLFontNamesCollection;
#endif

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

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

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

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

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

#ifndef __DispHTMLStyleElement_FWD_DEFINED__
#define __DispHTMLStyleElement_FWD_DEFINED__
typedef struct 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 struct 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 struct ICSSFilterSite ICSSFilterSite;
#endif

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#ifndef __IHTMLComputedStyle_FWD_DEFINED__
#define __IHTMLComputedStyle_FWD_DEFINED__
typedef struct 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 struct HTMLNamespaceEvents HTMLNamespaceEvents;
#endif

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

#ifndef __IHTMLNamespaceCollection_FWD_DEFINED__
#define __IHTMLNamespaceCollection_FWD_DEFINED__
typedef struct 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 struct IHTMLPainter IHTMLPainter;
#endif

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

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

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

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

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

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

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

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

#ifndef __IHTMLModelessInit_FWD_DEFINED__
#define __IHTMLModelessInit_FWD_DEFINED__
typedef struct 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 struct IHTMLPopup IHTMLPopup;
#endif

#ifndef __DispHTMLPopup_FWD_DEFINED__
#define __DispHTMLPopup_FWD_DEFINED__
typedef struct 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 struct IHTMLAppBehavior IHTMLAppBehavior;
#endif

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

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

#ifndef __DispHTMLAppBehavior_FWD_DEFINED__
#define __DispHTMLAppBehavior_FWD_DEFINED__
typedef struct 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 struct 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 struct 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 struct 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 struct 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 struct 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 struct IElementNamespace IElementNamespace;
#endif

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#ifdef __cplusplus
extern "C"{
#endif

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

#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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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;
  struct 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
