/**
 * 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.
 */

import "oaidl.idl";
import "oleidl.idl";
// import "servprov.idl";
import "urlmon.idl";

cpp_quote("#ifndef __IEnumConnections_FWD_DEFINED__")
cpp_quote("#define __IEnumConnections_FWD_DEFINED__")
cpp_quote("typedef struct IEnumConnections IEnumConnections;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IConnectionPoint_FWD_DEFINED__")
cpp_quote("#define __IConnectionPoint_FWD_DEFINED__")
cpp_quote("typedef struct IConnectionPoint IConnectionPoint;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IEnumConnectionPoints_FWD_DEFINED__")
cpp_quote("#define __IEnumConnectionPoints_FWD_DEFINED__")
cpp_quote("typedef struct IEnumConnectionPoints IEnumConnectionPoints;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IConnectionPointContainer_FWD_DEFINED__")
cpp_quote("#define __IConnectionPointContainer_FWD_DEFINED__")
cpp_quote("typedef struct IConnectionPointContainer IConnectionPointContainer;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IClassFactory2_FWD_DEFINED__")
cpp_quote("#define __IClassFactory2_FWD_DEFINED__")
cpp_quote("typedef struct IClassFactory2 IClassFactory2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IProvideClassInfo_FWD_DEFINED__")
cpp_quote("#define __IProvideClassInfo_FWD_DEFINED__")
cpp_quote("typedef struct IProvideClassInfo IProvideClassInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IProvideClassInfo2_FWD_DEFINED__")
cpp_quote("#define __IProvideClassInfo2_FWD_DEFINED__")
cpp_quote("typedef struct IProvideClassInfo2 IProvideClassInfo2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IProvideMultipleClassInfo_FWD_DEFINED__")
cpp_quote("#define __IProvideMultipleClassInfo_FWD_DEFINED__")
cpp_quote("typedef struct IProvideMultipleClassInfo IProvideMultipleClassInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleControl_FWD_DEFINED__")
cpp_quote("#define __IOleControl_FWD_DEFINED__")
cpp_quote("typedef struct IOleControl IOleControl;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleControlSite_FWD_DEFINED__")
cpp_quote("#define __IOleControlSite_FWD_DEFINED__")
cpp_quote("typedef struct IOleControlSite IOleControlSite;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPropertyPage_FWD_DEFINED__")
cpp_quote("#define __IPropertyPage_FWD_DEFINED__")
cpp_quote("typedef struct IPropertyPage IPropertyPage;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPropertyPage2_FWD_DEFINED__")
cpp_quote("#define __IPropertyPage2_FWD_DEFINED__")
cpp_quote("typedef struct IPropertyPage2 IPropertyPage2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPropertyPageSite_FWD_DEFINED__")
cpp_quote("#define __IPropertyPageSite_FWD_DEFINED__")
cpp_quote("typedef struct IPropertyPageSite IPropertyPageSite;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPropertyNotifySink_FWD_DEFINED__")
cpp_quote("#define __IPropertyNotifySink_FWD_DEFINED__")
cpp_quote("typedef struct IPropertyNotifySink IPropertyNotifySink;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISpecifyPropertyPages_FWD_DEFINED__")
cpp_quote("#define __ISpecifyPropertyPages_FWD_DEFINED__")
cpp_quote("typedef struct ISpecifyPropertyPages ISpecifyPropertyPages;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPersistMemory_FWD_DEFINED__")
cpp_quote("#define __IPersistMemory_FWD_DEFINED__")
cpp_quote("typedef struct IPersistMemory IPersistMemory;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPersistStreamInit_FWD_DEFINED__")
cpp_quote("#define __IPersistStreamInit_FWD_DEFINED__")
cpp_quote("typedef struct IPersistStreamInit IPersistStreamInit;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPersistPropertyBag_FWD_DEFINED__")
cpp_quote("#define __IPersistPropertyBag_FWD_DEFINED__")
cpp_quote("typedef struct IPersistPropertyBag IPersistPropertyBag;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISimpleFrameSite_FWD_DEFINED__")
cpp_quote("#define __ISimpleFrameSite_FWD_DEFINED__")
cpp_quote("typedef struct ISimpleFrameSite ISimpleFrameSite;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IFont_FWD_DEFINED__")
cpp_quote("#define __IFont_FWD_DEFINED__")
cpp_quote("typedef struct IFont IFont;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPicture_FWD_DEFINED__")
cpp_quote("#define __IPicture_FWD_DEFINED__")
cpp_quote("typedef struct IPicture IPicture;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IFontEventsDisp_FWD_DEFINED__")
cpp_quote("#define __IFontEventsDisp_FWD_DEFINED__")
cpp_quote("typedef struct IFontEventsDisp IFontEventsDisp;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IFontDisp_FWD_DEFINED__")
cpp_quote("#define __IFontDisp_FWD_DEFINED__")
cpp_quote("typedef struct IFontDisp IFontDisp;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPictureDisp_FWD_DEFINED__")
cpp_quote("#define __IPictureDisp_FWD_DEFINED__")
cpp_quote("typedef struct IPictureDisp IPictureDisp;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceObjectWindowless_FWD_DEFINED__")
cpp_quote("#define __IOleInPlaceObjectWindowless_FWD_DEFINED__")
cpp_quote("typedef struct IOleInPlaceObjectWindowless IOleInPlaceObjectWindowless;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceSiteEx_FWD_DEFINED__")
cpp_quote("#define __IOleInPlaceSiteEx_FWD_DEFINED__")
cpp_quote("typedef struct IOleInPlaceSiteEx IOleInPlaceSiteEx;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceSiteWindowless_FWD_DEFINED__")
cpp_quote("#define __IOleInPlaceSiteWindowless_FWD_DEFINED__")
cpp_quote("typedef struct IOleInPlaceSiteWindowless IOleInPlaceSiteWindowless;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IViewObjectEx_FWD_DEFINED__")
cpp_quote("#define __IViewObjectEx_FWD_DEFINED__")
cpp_quote("typedef struct IViewObjectEx IViewObjectEx;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleUndoUnit_FWD_DEFINED__")
cpp_quote("#define __IOleUndoUnit_FWD_DEFINED__")
cpp_quote("typedef struct IOleUndoUnit IOleUndoUnit;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleParentUndoUnit_FWD_DEFINED__")
cpp_quote("#define __IOleParentUndoUnit_FWD_DEFINED__")
cpp_quote("typedef struct IOleParentUndoUnit IOleParentUndoUnit;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IEnumOleUndoUnits_FWD_DEFINED__")
cpp_quote("#define __IEnumOleUndoUnits_FWD_DEFINED__")
cpp_quote("typedef struct IEnumOleUndoUnits IEnumOleUndoUnits;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleUndoManager_FWD_DEFINED__")
cpp_quote("#define __IOleUndoManager_FWD_DEFINED__")
cpp_quote("typedef struct IOleUndoManager IOleUndoManager;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPointerInactive_FWD_DEFINED__")
cpp_quote("#define __IPointerInactive_FWD_DEFINED__")
cpp_quote("typedef struct IPointerInactive IPointerInactive;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IObjectWithSite_FWD_DEFINED__")
cpp_quote("#define __IObjectWithSite_FWD_DEFINED__")
cpp_quote("typedef struct IObjectWithSite IObjectWithSite;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPerPropertyBrowsing_FWD_DEFINED__")
cpp_quote("#define __IPerPropertyBrowsing_FWD_DEFINED__")
cpp_quote("typedef struct IPerPropertyBrowsing IPerPropertyBrowsing;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPersistPropertyBag2_FWD_DEFINED__")
cpp_quote("#define __IPersistPropertyBag2_FWD_DEFINED__")
cpp_quote("typedef struct IPersistPropertyBag2 IPersistPropertyBag2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAdviseSinkEx_FWD_DEFINED__")
cpp_quote("#define __IAdviseSinkEx_FWD_DEFINED__")
cpp_quote("typedef struct IAdviseSinkEx IAdviseSinkEx;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IQuickActivate_FWD_DEFINED__")
cpp_quote("#define __IQuickActivate_FWD_DEFINED__")
cpp_quote("typedef struct IQuickActivate IQuickActivate;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#include \"servprov.h\"")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_ocidl_0000_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_ocidl_0000_v0_0_s_ifspec;")
cpp_quote("#ifndef __IOleControlTypes_INTERFACE_DEFINED__")
cpp_quote("#define __IOleControlTypes_INTERFACE_DEFINED__")
cpp_quote("  typedef enum tagUASFLAGS {")
cpp_quote("    UAS_NORMAL = 0,UAS_BLOCKED = 0x1,UAS_NOPARENTENABLE = 0x2,UAS_MASK = 0x3")
cpp_quote("  } UASFLAGS;")
cpp_quote("")
cpp_quote("  typedef enum tagREADYSTATE {")
cpp_quote("    READYSTATE_UNINITIALIZED = 0,READYSTATE_LOADING = 1,READYSTATE_LOADED = 2,READYSTATE_INTERACTIVE = 3,READYSTATE_COMPLETE = 4")
cpp_quote("  } READYSTATE;")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE IOleControlTypes_v1_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE IOleControlTypes_v1_0_s_ifspec;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IEnumConnections_INTERFACE_DEFINED__")
cpp_quote("#define __IEnumConnections_INTERFACE_DEFINED__")
cpp_quote("  typedef IEnumConnections *PENUMCONNECTIONS;")
cpp_quote("  typedef IEnumConnections *LPENUMCONNECTIONS;")
cpp_quote("")
cpp_quote("  typedef struct tagCONNECTDATA {")
cpp_quote("    IUnknown *pUnk;")
cpp_quote("    DWORD dwCookie;")
cpp_quote("  } CONNECTDATA;")
cpp_quote("")
cpp_quote("  typedef struct tagCONNECTDATA *PCONNECTDATA;")
cpp_quote("  typedef struct tagCONNECTDATA *LPCONNECTDATA;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IEnumConnections;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IEnumConnections : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Next(ULONG cConnections,LPCONNECTDATA rgcd,ULONG *pcFetched) = 0;")
cpp_quote("    virtual HRESULT WINAPI Skip(ULONG cConnections) = 0;")
cpp_quote("    virtual HRESULT WINAPI Reset(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Clone(IEnumConnections **ppEnum) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IEnumConnectionsVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IEnumConnections *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IEnumConnections *This);")
cpp_quote("      ULONG (WINAPI *Release)(IEnumConnections *This);")
cpp_quote("      HRESULT (WINAPI *Next)(IEnumConnections *This,ULONG cConnections,LPCONNECTDATA rgcd,ULONG *pcFetched);")
cpp_quote("      HRESULT (WINAPI *Skip)(IEnumConnections *This,ULONG cConnections);")
cpp_quote("      HRESULT (WINAPI *Reset)(IEnumConnections *This);")
cpp_quote("      HRESULT (WINAPI *Clone)(IEnumConnections *This,IEnumConnections **ppEnum);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IEnumConnectionsVtbl;")
cpp_quote("  struct IEnumConnections {")
cpp_quote("    CONST_VTBL struct IEnumConnectionsVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IEnumConnections_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IEnumConnections_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IEnumConnections_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IEnumConnections_Next(This,cConnections,rgcd,pcFetched) (This)->lpVtbl->Next(This,cConnections,rgcd,pcFetched)")
cpp_quote("#define IEnumConnections_Skip(This,cConnections) (This)->lpVtbl->Skip(This,cConnections)")
cpp_quote("#define IEnumConnections_Reset(This) (This)->lpVtbl->Reset(This)")
cpp_quote("#define IEnumConnections_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IEnumConnections_RemoteNext_Proxy(IEnumConnections *This,ULONG cConnections,LPCONNECTDATA rgcd,ULONG *pcFetched);")
cpp_quote("  void __RPC_STUB IEnumConnections_RemoteNext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumConnections_Skip_Proxy(IEnumConnections *This,ULONG cConnections);")
cpp_quote("  void __RPC_STUB IEnumConnections_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumConnections_Reset_Proxy(IEnumConnections *This);")
cpp_quote("  void __RPC_STUB IEnumConnections_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumConnections_Clone_Proxy(IEnumConnections *This,IEnumConnections **ppEnum);")
cpp_quote("  void __RPC_STUB IEnumConnections_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IConnectionPoint_INTERFACE_DEFINED__")
cpp_quote("#define __IConnectionPoint_INTERFACE_DEFINED__")
cpp_quote("  typedef IConnectionPoint *PCONNECTIONPOINT;")
cpp_quote("  typedef IConnectionPoint *LPCONNECTIONPOINT;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IConnectionPoint;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IConnectionPoint : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetConnectionInterface(IID *pIID) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetConnectionPointContainer(IConnectionPointContainer **ppCPC) = 0;")
cpp_quote("    virtual HRESULT WINAPI Advise(IUnknown *pUnkSink,DWORD *pdwCookie) = 0;")
cpp_quote("    virtual HRESULT WINAPI Unadvise(DWORD dwCookie) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnumConnections(IEnumConnections **ppEnum) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IConnectionPointVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IConnectionPoint *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IConnectionPoint *This);")
cpp_quote("      ULONG (WINAPI *Release)(IConnectionPoint *This);")
cpp_quote("      HRESULT (WINAPI *GetConnectionInterface)(IConnectionPoint *This,IID *pIID);")
cpp_quote("      HRESULT (WINAPI *GetConnectionPointContainer)(IConnectionPoint *This,IConnectionPointContainer **ppCPC);")
cpp_quote("      HRESULT (WINAPI *Advise)(IConnectionPoint *This,IUnknown *pUnkSink,DWORD *pdwCookie);")
cpp_quote("      HRESULT (WINAPI *Unadvise)(IConnectionPoint *This,DWORD dwCookie);")
cpp_quote("      HRESULT (WINAPI *EnumConnections)(IConnectionPoint *This,IEnumConnections **ppEnum);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IConnectionPointVtbl;")
cpp_quote("  struct IConnectionPoint {")
cpp_quote("    CONST_VTBL struct IConnectionPointVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IConnectionPoint_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IConnectionPoint_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IConnectionPoint_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IConnectionPoint_GetConnectionInterface(This,pIID) (This)->lpVtbl->GetConnectionInterface(This,pIID)")
cpp_quote("#define IConnectionPoint_GetConnectionPointContainer(This,ppCPC) (This)->lpVtbl->GetConnectionPointContainer(This,ppCPC)")
cpp_quote("#define IConnectionPoint_Advise(This,pUnkSink,pdwCookie) (This)->lpVtbl->Advise(This,pUnkSink,pdwCookie)")
cpp_quote("#define IConnectionPoint_Unadvise(This,dwCookie) (This)->lpVtbl->Unadvise(This,dwCookie)")
cpp_quote("#define IConnectionPoint_EnumConnections(This,ppEnum) (This)->lpVtbl->EnumConnections(This,ppEnum)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IConnectionPoint_GetConnectionInterface_Proxy(IConnectionPoint *This,IID *pIID);")
cpp_quote("  void __RPC_STUB IConnectionPoint_GetConnectionInterface_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IConnectionPoint_GetConnectionPointContainer_Proxy(IConnectionPoint *This,IConnectionPointContainer **ppCPC);")
cpp_quote("  void __RPC_STUB IConnectionPoint_GetConnectionPointContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IConnectionPoint_Advise_Proxy(IConnectionPoint *This,IUnknown *pUnkSink,DWORD *pdwCookie);")
cpp_quote("  void __RPC_STUB IConnectionPoint_Advise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IConnectionPoint_Unadvise_Proxy(IConnectionPoint *This,DWORD dwCookie);")
cpp_quote("  void __RPC_STUB IConnectionPoint_Unadvise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IConnectionPoint_EnumConnections_Proxy(IConnectionPoint *This,IEnumConnections **ppEnum);")
cpp_quote("  void __RPC_STUB IConnectionPoint_EnumConnections_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IEnumConnectionPoints_INTERFACE_DEFINED__")
cpp_quote("#define __IEnumConnectionPoints_INTERFACE_DEFINED__")
cpp_quote("  typedef IEnumConnectionPoints *PENUMCONNECTIONPOINTS;")
cpp_quote("  typedef IEnumConnectionPoints *LPENUMCONNECTIONPOINTS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IEnumConnectionPoints;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IEnumConnectionPoints : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Next(ULONG cConnections,LPCONNECTIONPOINT *ppCP,ULONG *pcFetched) = 0;")
cpp_quote("    virtual HRESULT WINAPI Skip(ULONG cConnections) = 0;")
cpp_quote("    virtual HRESULT WINAPI Reset(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Clone(IEnumConnectionPoints **ppEnum) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IEnumConnectionPointsVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IEnumConnectionPoints *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IEnumConnectionPoints *This);")
cpp_quote("      ULONG (WINAPI *Release)(IEnumConnectionPoints *This);")
cpp_quote("      HRESULT (WINAPI *Next)(IEnumConnectionPoints *This,ULONG cConnections,LPCONNECTIONPOINT *ppCP,ULONG *pcFetched);")
cpp_quote("      HRESULT (WINAPI *Skip)(IEnumConnectionPoints *This,ULONG cConnections);")
cpp_quote("      HRESULT (WINAPI *Reset)(IEnumConnectionPoints *This);")
cpp_quote("      HRESULT (WINAPI *Clone)(IEnumConnectionPoints *This,IEnumConnectionPoints **ppEnum);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IEnumConnectionPointsVtbl;")
cpp_quote("  struct IEnumConnectionPoints {")
cpp_quote("    CONST_VTBL struct IEnumConnectionPointsVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IEnumConnectionPoints_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IEnumConnectionPoints_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IEnumConnectionPoints_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IEnumConnectionPoints_Next(This,cConnections,ppCP,pcFetched) (This)->lpVtbl->Next(This,cConnections,ppCP,pcFetched)")
cpp_quote("#define IEnumConnectionPoints_Skip(This,cConnections) (This)->lpVtbl->Skip(This,cConnections)")
cpp_quote("#define IEnumConnectionPoints_Reset(This) (This)->lpVtbl->Reset(This)")
cpp_quote("#define IEnumConnectionPoints_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IEnumConnectionPoints_RemoteNext_Proxy(IEnumConnectionPoints *This,ULONG cConnections,LPCONNECTIONPOINT *ppCP,ULONG *pcFetched);")
cpp_quote("  void __RPC_STUB IEnumConnectionPoints_RemoteNext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumConnectionPoints_Skip_Proxy(IEnumConnectionPoints *This,ULONG cConnections);")
cpp_quote("  void __RPC_STUB IEnumConnectionPoints_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumConnectionPoints_Reset_Proxy(IEnumConnectionPoints *This);")
cpp_quote("  void __RPC_STUB IEnumConnectionPoints_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumConnectionPoints_Clone_Proxy(IEnumConnectionPoints *This,IEnumConnectionPoints **ppEnum);")
cpp_quote("  void __RPC_STUB IEnumConnectionPoints_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IConnectionPointContainer_INTERFACE_DEFINED__")
cpp_quote("#define __IConnectionPointContainer_INTERFACE_DEFINED__")
cpp_quote("  typedef IConnectionPointContainer *PCONNECTIONPOINTCONTAINER;")
cpp_quote("  typedef IConnectionPointContainer *LPCONNECTIONPOINTCONTAINER;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IConnectionPointContainer;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IConnectionPointContainer : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI EnumConnectionPoints(IEnumConnectionPoints **ppEnum) = 0;")
cpp_quote("    virtual HRESULT WINAPI FindConnectionPoint(REFIID riid,IConnectionPoint **ppCP) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IConnectionPointContainerVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IConnectionPointContainer *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IConnectionPointContainer *This);")
cpp_quote("      ULONG (WINAPI *Release)(IConnectionPointContainer *This);")
cpp_quote("      HRESULT (WINAPI *EnumConnectionPoints)(IConnectionPointContainer *This,IEnumConnectionPoints **ppEnum);")
cpp_quote("      HRESULT (WINAPI *FindConnectionPoint)(IConnectionPointContainer *This,REFIID riid,IConnectionPoint **ppCP);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IConnectionPointContainerVtbl;")
cpp_quote("  struct IConnectionPointContainer {")
cpp_quote("    CONST_VTBL struct IConnectionPointContainerVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IConnectionPointContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IConnectionPointContainer_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IConnectionPointContainer_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IConnectionPointContainer_EnumConnectionPoints(This,ppEnum) (This)->lpVtbl->EnumConnectionPoints(This,ppEnum)")
cpp_quote("#define IConnectionPointContainer_FindConnectionPoint(This,riid,ppCP) (This)->lpVtbl->FindConnectionPoint(This,riid,ppCP)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IConnectionPointContainer_EnumConnectionPoints_Proxy(IConnectionPointContainer *This,IEnumConnectionPoints **ppEnum);")
cpp_quote("  void __RPC_STUB IConnectionPointContainer_EnumConnectionPoints_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IConnectionPointContainer_FindConnectionPoint_Proxy(IConnectionPointContainer *This,REFIID riid,IConnectionPoint **ppCP);")
cpp_quote("  void __RPC_STUB IConnectionPointContainer_FindConnectionPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IClassFactory2_INTERFACE_DEFINED__")
cpp_quote("#define __IClassFactory2_INTERFACE_DEFINED__")
cpp_quote("  typedef IClassFactory2 *LPCLASSFACTORY2;")
cpp_quote("")
cpp_quote("  typedef struct tagLICINFO {")
cpp_quote("    LONG cbLicInfo;")
cpp_quote("    WINBOOL fRuntimeKeyAvail;")
cpp_quote("    WINBOOL fLicVerified;")
cpp_quote("  } LICINFO;")
cpp_quote("")
cpp_quote("  typedef struct tagLICINFO *LPLICINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IClassFactory2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IClassFactory2 : public IClassFactory {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetLicInfo(LICINFO *pLicInfo) = 0;")
cpp_quote("    virtual HRESULT WINAPI RequestLicKey(DWORD dwReserved,BSTR *pBstrKey) = 0;")
cpp_quote("    virtual HRESULT WINAPI CreateInstanceLic(IUnknown *pUnkOuter,IUnknown *pUnkReserved,REFIID riid,BSTR bstrKey,PVOID *ppvObj) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IClassFactory2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IClassFactory2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IClassFactory2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(IClassFactory2 *This);")
cpp_quote("      HRESULT (WINAPI *CreateInstance)(IClassFactory2 *This,IUnknown *pUnkOuter,REFIID riid,void **ppvObject);")
cpp_quote("      HRESULT (WINAPI *LockServer)(IClassFactory2 *This,WINBOOL fLock);")
cpp_quote("      HRESULT (WINAPI *GetLicInfo)(IClassFactory2 *This,LICINFO *pLicInfo);")
cpp_quote("      HRESULT (WINAPI *RequestLicKey)(IClassFactory2 *This,DWORD dwReserved,BSTR *pBstrKey);")
cpp_quote("      HRESULT (WINAPI *CreateInstanceLic)(IClassFactory2 *This,IUnknown *pUnkOuter,IUnknown *pUnkReserved,REFIID riid,BSTR bstrKey,PVOID *ppvObj);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IClassFactory2Vtbl;")
cpp_quote("  struct IClassFactory2 {")
cpp_quote("    CONST_VTBL struct IClassFactory2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IClassFactory2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IClassFactory2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IClassFactory2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IClassFactory2_CreateInstance(This,pUnkOuter,riid,ppvObject) (This)->lpVtbl->CreateInstance(This,pUnkOuter,riid,ppvObject)")
cpp_quote("#define IClassFactory2_LockServer(This,fLock) (This)->lpVtbl->LockServer(This,fLock)")
cpp_quote("#define IClassFactory2_GetLicInfo(This,pLicInfo) (This)->lpVtbl->GetLicInfo(This,pLicInfo)")
cpp_quote("#define IClassFactory2_RequestLicKey(This,dwReserved,pBstrKey) (This)->lpVtbl->RequestLicKey(This,dwReserved,pBstrKey)")
cpp_quote("#define IClassFactory2_CreateInstanceLic(This,pUnkOuter,pUnkReserved,riid,bstrKey,ppvObj) (This)->lpVtbl->CreateInstanceLic(This,pUnkOuter,pUnkReserved,riid,bstrKey,ppvObj)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IClassFactory2_GetLicInfo_Proxy(IClassFactory2 *This,LICINFO *pLicInfo);")
cpp_quote("  void __RPC_STUB IClassFactory2_GetLicInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IClassFactory2_RequestLicKey_Proxy(IClassFactory2 *This,DWORD dwReserved,BSTR *pBstrKey);")
cpp_quote("  void __RPC_STUB IClassFactory2_RequestLicKey_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IClassFactory2_RemoteCreateInstanceLic_Proxy(IClassFactory2 *This,REFIID riid,BSTR bstrKey,IUnknown **ppvObj);")
cpp_quote("  void __RPC_STUB IClassFactory2_RemoteCreateInstanceLic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IProvideClassInfo_INTERFACE_DEFINED__")
cpp_quote("#define __IProvideClassInfo_INTERFACE_DEFINED__")
cpp_quote("  typedef IProvideClassInfo *LPPROVIDECLASSINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IProvideClassInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IProvideClassInfo : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetClassInfo(ITypeInfo **ppTI) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IProvideClassInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IProvideClassInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IProvideClassInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(IProvideClassInfo *This);")
cpp_quote("      HRESULT (WINAPI *GetClassInfo)(IProvideClassInfo *This,ITypeInfo **ppTI);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IProvideClassInfoVtbl;")
cpp_quote("  struct IProvideClassInfo {")
cpp_quote("    CONST_VTBL struct IProvideClassInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IProvideClassInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IProvideClassInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IProvideClassInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IProvideClassInfo_GetClassInfo(This,ppTI) (This)->lpVtbl->GetClassInfo(This,ppTI)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IProvideClassInfo_GetClassInfo_Proxy(IProvideClassInfo *This,ITypeInfo **ppTI);")
cpp_quote("  void __RPC_STUB IProvideClassInfo_GetClassInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IProvideClassInfo2_INTERFACE_DEFINED__")
cpp_quote("#define __IProvideClassInfo2_INTERFACE_DEFINED__")
cpp_quote("  typedef IProvideClassInfo2 *LPPROVIDECLASSINFO2;")
cpp_quote("")
cpp_quote("  typedef enum tagGUIDKIND {")
cpp_quote("    GUIDKIND_DEFAULT_SOURCE_DISP_IID = 1")
cpp_quote("  } GUIDKIND;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IProvideClassInfo2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IProvideClassInfo2 : public IProvideClassInfo {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetGUID(DWORD dwGuidKind,GUID *pGUID) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IProvideClassInfo2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IProvideClassInfo2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IProvideClassInfo2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(IProvideClassInfo2 *This);")
cpp_quote("      HRESULT (WINAPI *GetClassInfo)(IProvideClassInfo2 *This,ITypeInfo **ppTI);")
cpp_quote("      HRESULT (WINAPI *GetGUID)(IProvideClassInfo2 *This,DWORD dwGuidKind,GUID *pGUID);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IProvideClassInfo2Vtbl;")
cpp_quote("  struct IProvideClassInfo2 {")
cpp_quote("    CONST_VTBL struct IProvideClassInfo2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IProvideClassInfo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IProvideClassInfo2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IProvideClassInfo2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IProvideClassInfo2_GetClassInfo(This,ppTI) (This)->lpVtbl->GetClassInfo(This,ppTI)")
cpp_quote("#define IProvideClassInfo2_GetGUID(This,dwGuidKind,pGUID) (This)->lpVtbl->GetGUID(This,dwGuidKind,pGUID)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IProvideClassInfo2_GetGUID_Proxy(IProvideClassInfo2 *This,DWORD dwGuidKind,GUID *pGUID);")
cpp_quote("  void __RPC_STUB IProvideClassInfo2_GetGUID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IProvideMultipleClassInfo_INTERFACE_DEFINED__")
cpp_quote("#define __IProvideMultipleClassInfo_INTERFACE_DEFINED__")
cpp_quote("")
cpp_quote("#define MULTICLASSINFO_GETTYPEINFO 0x00000001")
cpp_quote("#define MULTICLASSINFO_GETNUMRESERVEDDISPIDS 0x00000002")
cpp_quote("#define MULTICLASSINFO_GETIIDPRIMARY 0x00000004")
cpp_quote("#define MULTICLASSINFO_GETIIDSOURCE 0x00000008")
cpp_quote("#define TIFLAGS_EXTENDDISPATCHONLY 0x00000001")
cpp_quote("  typedef IProvideMultipleClassInfo *LPPROVIDEMULTIPLECLASSINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IProvideMultipleClassInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IProvideMultipleClassInfo : public IProvideClassInfo2 {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetMultiTypeInfoCount(ULONG *pcti) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetInfoOfIndex(ULONG iti,DWORD dwFlags,ITypeInfo **pptiCoClass,DWORD *pdwTIFlags,ULONG *pcdispidReserved,IID *piidPrimary,IID *piidSource) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IProvideMultipleClassInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IProvideMultipleClassInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IProvideMultipleClassInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(IProvideMultipleClassInfo *This);")
cpp_quote("      HRESULT (WINAPI *GetClassInfo)(IProvideMultipleClassInfo *This,ITypeInfo **ppTI);")
cpp_quote("      HRESULT (WINAPI *GetGUID)(IProvideMultipleClassInfo *This,DWORD dwGuidKind,GUID *pGUID);")
cpp_quote("      HRESULT (WINAPI *GetMultiTypeInfoCount)(IProvideMultipleClassInfo *This,ULONG *pcti);")
cpp_quote("      HRESULT (WINAPI *GetInfoOfIndex)(IProvideMultipleClassInfo *This,ULONG iti,DWORD dwFlags,ITypeInfo **pptiCoClass,DWORD *pdwTIFlags,ULONG *pcdispidReserved,IID *piidPrimary,IID *piidSource);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IProvideMultipleClassInfoVtbl;")
cpp_quote("  struct IProvideMultipleClassInfo {")
cpp_quote("    CONST_VTBL struct IProvideMultipleClassInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IProvideMultipleClassInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IProvideMultipleClassInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IProvideMultipleClassInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IProvideMultipleClassInfo_GetClassInfo(This,ppTI) (This)->lpVtbl->GetClassInfo(This,ppTI)")
cpp_quote("#define IProvideMultipleClassInfo_GetGUID(This,dwGuidKind,pGUID) (This)->lpVtbl->GetGUID(This,dwGuidKind,pGUID)")
cpp_quote("#define IProvideMultipleClassInfo_GetMultiTypeInfoCount(This,pcti) (This)->lpVtbl->GetMultiTypeInfoCount(This,pcti)")
cpp_quote("#define IProvideMultipleClassInfo_GetInfoOfIndex(This,iti,dwFlags,pptiCoClass,pdwTIFlags,pcdispidReserved,piidPrimary,piidSource) (This)->lpVtbl->GetInfoOfIndex(This,iti,dwFlags,pptiCoClass,pdwTIFlags,pcdispidReserved,piidPrimary,piidSource)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IProvideMultipleClassInfo_GetMultiTypeInfoCount_Proxy(IProvideMultipleClassInfo *This,ULONG *pcti);")
cpp_quote("  void __RPC_STUB IProvideMultipleClassInfo_GetMultiTypeInfoCount_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IProvideMultipleClassInfo_GetInfoOfIndex_Proxy(IProvideMultipleClassInfo *This,ULONG iti,DWORD dwFlags,ITypeInfo **pptiCoClass,DWORD *pdwTIFlags,ULONG *pcdispidReserved,IID *piidPrimary,IID *piidSource);")
cpp_quote("  void __RPC_STUB IProvideMultipleClassInfo_GetInfoOfIndex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleControl_INTERFACE_DEFINED__")
cpp_quote("#define __IOleControl_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleControl *LPOLECONTROL;")
cpp_quote("")
cpp_quote("  typedef struct tagCONTROLINFO {")
cpp_quote("    ULONG cb;")
cpp_quote("    HACCEL hAccel;")
cpp_quote("    USHORT cAccel;")
cpp_quote("    DWORD dwFlags;")
cpp_quote("  } CONTROLINFO;")
cpp_quote("")
cpp_quote("  typedef struct tagCONTROLINFO *LPCONTROLINFO;")
cpp_quote("  typedef enum tagCTRLINFO {")
cpp_quote("    CTRLINFO_EATS_RETURN = 1,CTRLINFO_EATS_ESCAPE = 2")
cpp_quote("  } CTRLINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleControl;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleControl : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetControlInfo(CONTROLINFO *pCI) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnMnemonic(MSG *pMsg) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnAmbientPropertyChange(DISPID dispID) = 0;")
cpp_quote("    virtual HRESULT WINAPI FreezeEvents(WINBOOL bFreeze) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleControlVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleControl *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleControl *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleControl *This);")
cpp_quote("      HRESULT (WINAPI *GetControlInfo)(IOleControl *This,CONTROLINFO *pCI);")
cpp_quote("      HRESULT (WINAPI *OnMnemonic)(IOleControl *This,MSG *pMsg);")
cpp_quote("      HRESULT (WINAPI *OnAmbientPropertyChange)(IOleControl *This,DISPID dispID);")
cpp_quote("      HRESULT (WINAPI *FreezeEvents)(IOleControl *This,WINBOOL bFreeze);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleControlVtbl;")
cpp_quote("  struct IOleControl {")
cpp_quote("    CONST_VTBL struct IOleControlVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleControl_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleControl_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleControl_GetControlInfo(This,pCI) (This)->lpVtbl->GetControlInfo(This,pCI)")
cpp_quote("#define IOleControl_OnMnemonic(This,pMsg) (This)->lpVtbl->OnMnemonic(This,pMsg)")
cpp_quote("#define IOleControl_OnAmbientPropertyChange(This,dispID) (This)->lpVtbl->OnAmbientPropertyChange(This,dispID)")
cpp_quote("#define IOleControl_FreezeEvents(This,bFreeze) (This)->lpVtbl->FreezeEvents(This,bFreeze)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleControl_GetControlInfo_Proxy(IOleControl *This,CONTROLINFO *pCI);")
cpp_quote("  void __RPC_STUB IOleControl_GetControlInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleControl_OnMnemonic_Proxy(IOleControl *This,MSG *pMsg);")
cpp_quote("  void __RPC_STUB IOleControl_OnMnemonic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleControl_OnAmbientPropertyChange_Proxy(IOleControl *This,DISPID dispID);")
cpp_quote("  void __RPC_STUB IOleControl_OnAmbientPropertyChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleControl_FreezeEvents_Proxy(IOleControl *This,WINBOOL bFreeze);")
cpp_quote("  void __RPC_STUB IOleControl_FreezeEvents_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleControlSite_INTERFACE_DEFINED__")
cpp_quote("#define __IOleControlSite_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleControlSite *LPOLECONTROLSITE;")
cpp_quote("")
cpp_quote("  typedef struct tagPOINTF {")
cpp_quote("    FLOAT x;")
cpp_quote("    FLOAT y;")
cpp_quote("  } POINTF;")
cpp_quote("")
cpp_quote("  typedef struct tagPOINTF *LPPOINTF;")
cpp_quote("")
cpp_quote("  typedef enum tagXFORMCOORDS {")
cpp_quote("    XFORMCOORDS_POSITION = 0x1,XFORMCOORDS_SIZE = 0x2,XFORMCOORDS_HIMETRICTOCONTAINER = 0x4,XFORMCOORDS_CONTAINERTOHIMETRIC = 0x8,")
cpp_quote("    XFORMCOORDS_EVENTCOMPAT = 0x10")
cpp_quote("  } XFORMCOORDS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleControlSite;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleControlSite : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI OnControlInfoChanged(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI LockInPlaceActive(WINBOOL fLock) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetExtendedControl(IDispatch **ppDisp) = 0;")
cpp_quote("    virtual HRESULT WINAPI TransformCoords(POINTL *pPtlHimetric,POINTF *pPtfContainer,DWORD dwFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI TranslateAccelerator(MSG *pMsg,DWORD grfModifiers) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnFocus(WINBOOL fGotFocus) = 0;")
cpp_quote("    virtual HRESULT WINAPI ShowPropertyFrame(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleControlSiteVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleControlSite *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleControlSite *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleControlSite *This);")
cpp_quote("      HRESULT (WINAPI *OnControlInfoChanged)(IOleControlSite *This);")
cpp_quote("      HRESULT (WINAPI *LockInPlaceActive)(IOleControlSite *This,WINBOOL fLock);")
cpp_quote("      HRESULT (WINAPI *GetExtendedControl)(IOleControlSite *This,IDispatch **ppDisp);")
cpp_quote("      HRESULT (WINAPI *TransformCoords)(IOleControlSite *This,POINTL *pPtlHimetric,POINTF *pPtfContainer,DWORD dwFlags);")
cpp_quote("      HRESULT (WINAPI *TranslateAccelerator)(IOleControlSite *This,MSG *pMsg,DWORD grfModifiers);")
cpp_quote("      HRESULT (WINAPI *OnFocus)(IOleControlSite *This,WINBOOL fGotFocus);")
cpp_quote("      HRESULT (WINAPI *ShowPropertyFrame)(IOleControlSite *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleControlSiteVtbl;")
cpp_quote("  struct IOleControlSite {")
cpp_quote("    CONST_VTBL struct IOleControlSiteVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleControlSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleControlSite_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleControlSite_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleControlSite_OnControlInfoChanged(This) (This)->lpVtbl->OnControlInfoChanged(This)")
cpp_quote("#define IOleControlSite_LockInPlaceActive(This,fLock) (This)->lpVtbl->LockInPlaceActive(This,fLock)")
cpp_quote("#define IOleControlSite_GetExtendedControl(This,ppDisp) (This)->lpVtbl->GetExtendedControl(This,ppDisp)")
cpp_quote("#define IOleControlSite_TransformCoords(This,pPtlHimetric,pPtfContainer,dwFlags) (This)->lpVtbl->TransformCoords(This,pPtlHimetric,pPtfContainer,dwFlags)")
cpp_quote("#define IOleControlSite_TranslateAccelerator(This,pMsg,grfModifiers) (This)->lpVtbl->TranslateAccelerator(This,pMsg,grfModifiers)")
cpp_quote("#define IOleControlSite_OnFocus(This,fGotFocus) (This)->lpVtbl->OnFocus(This,fGotFocus)")
cpp_quote("#define IOleControlSite_ShowPropertyFrame(This) (This)->lpVtbl->ShowPropertyFrame(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleControlSite_OnControlInfoChanged_Proxy(IOleControlSite *This);")
cpp_quote("  void __RPC_STUB IOleControlSite_OnControlInfoChanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleControlSite_LockInPlaceActive_Proxy(IOleControlSite *This,WINBOOL fLock);")
cpp_quote("  void __RPC_STUB IOleControlSite_LockInPlaceActive_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleControlSite_GetExtendedControl_Proxy(IOleControlSite *This,IDispatch **ppDisp);")
cpp_quote("  void __RPC_STUB IOleControlSite_GetExtendedControl_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleControlSite_TransformCoords_Proxy(IOleControlSite *This,POINTL *pPtlHimetric,POINTF *pPtfContainer,DWORD dwFlags);")
cpp_quote("  void __RPC_STUB IOleControlSite_TransformCoords_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleControlSite_TranslateAccelerator_Proxy(IOleControlSite *This,MSG *pMsg,DWORD grfModifiers);")
cpp_quote("  void __RPC_STUB IOleControlSite_TranslateAccelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleControlSite_OnFocus_Proxy(IOleControlSite *This,WINBOOL fGotFocus);")
cpp_quote("  void __RPC_STUB IOleControlSite_OnFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleControlSite_ShowPropertyFrame_Proxy(IOleControlSite *This);")
cpp_quote("  void __RPC_STUB IOleControlSite_ShowPropertyFrame_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPropertyPage_INTERFACE_DEFINED__")
cpp_quote("#define __IPropertyPage_INTERFACE_DEFINED__")
cpp_quote("  typedef IPropertyPage *LPPROPERTYPAGE;")
cpp_quote("")
cpp_quote("  typedef struct tagPROPPAGEINFO {")
cpp_quote("    ULONG cb;")
cpp_quote("    LPOLESTR pszTitle;")
cpp_quote("    SIZE size;")
cpp_quote("    LPOLESTR pszDocString;")
cpp_quote("    LPOLESTR pszHelpFile;")
cpp_quote("    DWORD dwHelpContext;")
cpp_quote("  } PROPPAGEINFO;")
cpp_quote("")
cpp_quote("  typedef struct tagPROPPAGEINFO *LPPROPPAGEINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPropertyPage;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPropertyPage : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetPageSite(IPropertyPageSite *pPageSite) = 0;")
cpp_quote("    virtual HRESULT WINAPI Activate(HWND hWndParent,LPCRECT pRect,WINBOOL bModal) = 0;")
cpp_quote("    virtual HRESULT WINAPI Deactivate(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetPageInfo(PROPPAGEINFO *pPageInfo) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetObjects(ULONG cObjects,IUnknown **ppUnk) = 0;")
cpp_quote("    virtual HRESULT WINAPI Show(UINT nCmdShow) = 0;")
cpp_quote("    virtual HRESULT WINAPI Move(LPCRECT pRect) = 0;")
cpp_quote("    virtual HRESULT WINAPI IsPageDirty(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Apply(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Help(LPCOLESTR pszHelpDir) = 0;")
cpp_quote("    virtual HRESULT WINAPI TranslateAccelerator(MSG *pMsg) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPropertyPageVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPropertyPage *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPropertyPage *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPropertyPage *This);")
cpp_quote("      HRESULT (WINAPI *SetPageSite)(IPropertyPage *This,IPropertyPageSite *pPageSite);")
cpp_quote("      HRESULT (WINAPI *Activate)(IPropertyPage *This,HWND hWndParent,LPCRECT pRect,WINBOOL bModal);")
cpp_quote("      HRESULT (WINAPI *Deactivate)(IPropertyPage *This);")
cpp_quote("      HRESULT (WINAPI *GetPageInfo)(IPropertyPage *This,PROPPAGEINFO *pPageInfo);")
cpp_quote("      HRESULT (WINAPI *SetObjects)(IPropertyPage *This,ULONG cObjects,IUnknown **ppUnk);")
cpp_quote("      HRESULT (WINAPI *Show)(IPropertyPage *This,UINT nCmdShow);")
cpp_quote("      HRESULT (WINAPI *Move)(IPropertyPage *This,LPCRECT pRect);")
cpp_quote("      HRESULT (WINAPI *IsPageDirty)(IPropertyPage *This);")
cpp_quote("      HRESULT (WINAPI *Apply)(IPropertyPage *This);")
cpp_quote("      HRESULT (WINAPI *Help)(IPropertyPage *This,LPCOLESTR pszHelpDir);")
cpp_quote("      HRESULT (WINAPI *TranslateAccelerator)(IPropertyPage *This,MSG *pMsg);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPropertyPageVtbl;")
cpp_quote("  struct IPropertyPage {")
cpp_quote("    CONST_VTBL struct IPropertyPageVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPropertyPage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPropertyPage_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPropertyPage_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPropertyPage_SetPageSite(This,pPageSite) (This)->lpVtbl->SetPageSite(This,pPageSite)")
cpp_quote("#define IPropertyPage_Activate(This,hWndParent,pRect,bModal) (This)->lpVtbl->Activate(This,hWndParent,pRect,bModal)")
cpp_quote("#define IPropertyPage_Deactivate(This) (This)->lpVtbl->Deactivate(This)")
cpp_quote("#define IPropertyPage_GetPageInfo(This,pPageInfo) (This)->lpVtbl->GetPageInfo(This,pPageInfo)")
cpp_quote("#define IPropertyPage_SetObjects(This,cObjects,ppUnk) (This)->lpVtbl->SetObjects(This,cObjects,ppUnk)")
cpp_quote("#define IPropertyPage_Show(This,nCmdShow) (This)->lpVtbl->Show(This,nCmdShow)")
cpp_quote("#define IPropertyPage_Move(This,pRect) (This)->lpVtbl->Move(This,pRect)")
cpp_quote("#define IPropertyPage_IsPageDirty(This) (This)->lpVtbl->IsPageDirty(This)")
cpp_quote("#define IPropertyPage_Apply(This) (This)->lpVtbl->Apply(This)")
cpp_quote("#define IPropertyPage_Help(This,pszHelpDir) (This)->lpVtbl->Help(This,pszHelpDir)")
cpp_quote("#define IPropertyPage_TranslateAccelerator(This,pMsg) (This)->lpVtbl->TranslateAccelerator(This,pMsg)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPropertyPage_SetPageSite_Proxy(IPropertyPage *This,IPropertyPageSite *pPageSite);")
cpp_quote("  void __RPC_STUB IPropertyPage_SetPageSite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPage_Activate_Proxy(IPropertyPage *This,HWND hWndParent,LPCRECT pRect,WINBOOL bModal);")
cpp_quote("  void __RPC_STUB IPropertyPage_Activate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPage_Deactivate_Proxy(IPropertyPage *This);")
cpp_quote("  void __RPC_STUB IPropertyPage_Deactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPage_GetPageInfo_Proxy(IPropertyPage *This,PROPPAGEINFO *pPageInfo);")
cpp_quote("  void __RPC_STUB IPropertyPage_GetPageInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPage_SetObjects_Proxy(IPropertyPage *This,ULONG cObjects,IUnknown **ppUnk);")
cpp_quote("  void __RPC_STUB IPropertyPage_SetObjects_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPage_Show_Proxy(IPropertyPage *This,UINT nCmdShow);")
cpp_quote("  void __RPC_STUB IPropertyPage_Show_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPage_Move_Proxy(IPropertyPage *This,LPCRECT pRect);")
cpp_quote("  void __RPC_STUB IPropertyPage_Move_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPage_IsPageDirty_Proxy(IPropertyPage *This);")
cpp_quote("  void __RPC_STUB IPropertyPage_IsPageDirty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPage_Apply_Proxy(IPropertyPage *This);")
cpp_quote("  void __RPC_STUB IPropertyPage_Apply_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPage_Help_Proxy(IPropertyPage *This,LPCOLESTR pszHelpDir);")
cpp_quote("  void __RPC_STUB IPropertyPage_Help_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPage_TranslateAccelerator_Proxy(IPropertyPage *This,MSG *pMsg);")
cpp_quote("  void __RPC_STUB IPropertyPage_TranslateAccelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPropertyPage2_INTERFACE_DEFINED__")
cpp_quote("#define __IPropertyPage2_INTERFACE_DEFINED__")
cpp_quote("  typedef IPropertyPage2 *LPPROPERTYPAGE2;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPropertyPage2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPropertyPage2 : public IPropertyPage {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI EditProperty(DISPID dispID) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPropertyPage2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPropertyPage2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPropertyPage2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPropertyPage2 *This);")
cpp_quote("      HRESULT (WINAPI *SetPageSite)(IPropertyPage2 *This,IPropertyPageSite *pPageSite);")
cpp_quote("      HRESULT (WINAPI *Activate)(IPropertyPage2 *This,HWND hWndParent,LPCRECT pRect,WINBOOL bModal);")
cpp_quote("      HRESULT (WINAPI *Deactivate)(IPropertyPage2 *This);")
cpp_quote("      HRESULT (WINAPI *GetPageInfo)(IPropertyPage2 *This,PROPPAGEINFO *pPageInfo);")
cpp_quote("      HRESULT (WINAPI *SetObjects)(IPropertyPage2 *This,ULONG cObjects,IUnknown **ppUnk);")
cpp_quote("      HRESULT (WINAPI *Show)(IPropertyPage2 *This,UINT nCmdShow);")
cpp_quote("      HRESULT (WINAPI *Move)(IPropertyPage2 *This,LPCRECT pRect);")
cpp_quote("      HRESULT (WINAPI *IsPageDirty)(IPropertyPage2 *This);")
cpp_quote("      HRESULT (WINAPI *Apply)(IPropertyPage2 *This);")
cpp_quote("      HRESULT (WINAPI *Help)(IPropertyPage2 *This,LPCOLESTR pszHelpDir);")
cpp_quote("      HRESULT (WINAPI *TranslateAccelerator)(IPropertyPage2 *This,MSG *pMsg);")
cpp_quote("      HRESULT (WINAPI *EditProperty)(IPropertyPage2 *This,DISPID dispID);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPropertyPage2Vtbl;")
cpp_quote("  struct IPropertyPage2 {")
cpp_quote("    CONST_VTBL struct IPropertyPage2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPropertyPage2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPropertyPage2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPropertyPage2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPropertyPage2_SetPageSite(This,pPageSite) (This)->lpVtbl->SetPageSite(This,pPageSite)")
cpp_quote("#define IPropertyPage2_Activate(This,hWndParent,pRect,bModal) (This)->lpVtbl->Activate(This,hWndParent,pRect,bModal)")
cpp_quote("#define IPropertyPage2_Deactivate(This) (This)->lpVtbl->Deactivate(This)")
cpp_quote("#define IPropertyPage2_GetPageInfo(This,pPageInfo) (This)->lpVtbl->GetPageInfo(This,pPageInfo)")
cpp_quote("#define IPropertyPage2_SetObjects(This,cObjects,ppUnk) (This)->lpVtbl->SetObjects(This,cObjects,ppUnk)")
cpp_quote("#define IPropertyPage2_Show(This,nCmdShow) (This)->lpVtbl->Show(This,nCmdShow)")
cpp_quote("#define IPropertyPage2_Move(This,pRect) (This)->lpVtbl->Move(This,pRect)")
cpp_quote("#define IPropertyPage2_IsPageDirty(This) (This)->lpVtbl->IsPageDirty(This)")
cpp_quote("#define IPropertyPage2_Apply(This) (This)->lpVtbl->Apply(This)")
cpp_quote("#define IPropertyPage2_Help(This,pszHelpDir) (This)->lpVtbl->Help(This,pszHelpDir)")
cpp_quote("#define IPropertyPage2_TranslateAccelerator(This,pMsg) (This)->lpVtbl->TranslateAccelerator(This,pMsg)")
cpp_quote("#define IPropertyPage2_EditProperty(This,dispID) (This)->lpVtbl->EditProperty(This,dispID)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPropertyPage2_EditProperty_Proxy(IPropertyPage2 *This,DISPID dispID);")
cpp_quote("  void __RPC_STUB IPropertyPage2_EditProperty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPropertyPageSite_INTERFACE_DEFINED__")
cpp_quote("#define __IPropertyPageSite_INTERFACE_DEFINED__")
cpp_quote("  typedef IPropertyPageSite *LPPROPERTYPAGESITE;")
cpp_quote("")
cpp_quote("  typedef enum tagPROPPAGESTATUS {")
cpp_quote("    PROPPAGESTATUS_DIRTY = 0x1,PROPPAGESTATUS_VALIDATE = 0x2,PROPPAGESTATUS_CLEAN = 0x4")
cpp_quote("  } PROPPAGESTATUS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPropertyPageSite;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPropertyPageSite : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI OnStatusChange(DWORD dwFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetLocaleID(LCID *pLocaleID) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetPageContainer(IUnknown **ppUnk) = 0;")
cpp_quote("    virtual HRESULT WINAPI TranslateAccelerator(MSG *pMsg) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPropertyPageSiteVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPropertyPageSite *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPropertyPageSite *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPropertyPageSite *This);")
cpp_quote("      HRESULT (WINAPI *OnStatusChange)(IPropertyPageSite *This,DWORD dwFlags);")
cpp_quote("      HRESULT (WINAPI *GetLocaleID)(IPropertyPageSite *This,LCID *pLocaleID);")
cpp_quote("      HRESULT (WINAPI *GetPageContainer)(IPropertyPageSite *This,IUnknown **ppUnk);")
cpp_quote("      HRESULT (WINAPI *TranslateAccelerator)(IPropertyPageSite *This,MSG *pMsg);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPropertyPageSiteVtbl;")
cpp_quote("  struct IPropertyPageSite {")
cpp_quote("    CONST_VTBL struct IPropertyPageSiteVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPropertyPageSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPropertyPageSite_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPropertyPageSite_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPropertyPageSite_OnStatusChange(This,dwFlags) (This)->lpVtbl->OnStatusChange(This,dwFlags)")
cpp_quote("#define IPropertyPageSite_GetLocaleID(This,pLocaleID) (This)->lpVtbl->GetLocaleID(This,pLocaleID)")
cpp_quote("#define IPropertyPageSite_GetPageContainer(This,ppUnk) (This)->lpVtbl->GetPageContainer(This,ppUnk)")
cpp_quote("#define IPropertyPageSite_TranslateAccelerator(This,pMsg) (This)->lpVtbl->TranslateAccelerator(This,pMsg)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPropertyPageSite_OnStatusChange_Proxy(IPropertyPageSite *This,DWORD dwFlags);")
cpp_quote("  void __RPC_STUB IPropertyPageSite_OnStatusChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPageSite_GetLocaleID_Proxy(IPropertyPageSite *This,LCID *pLocaleID);")
cpp_quote("  void __RPC_STUB IPropertyPageSite_GetLocaleID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPageSite_GetPageContainer_Proxy(IPropertyPageSite *This,IUnknown **ppUnk);")
cpp_quote("  void __RPC_STUB IPropertyPageSite_GetPageContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyPageSite_TranslateAccelerator_Proxy(IPropertyPageSite *This,MSG *pMsg);")
cpp_quote("  void __RPC_STUB IPropertyPageSite_TranslateAccelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPropertyNotifySink_INTERFACE_DEFINED__")
cpp_quote("#define __IPropertyNotifySink_INTERFACE_DEFINED__")
cpp_quote("  typedef IPropertyNotifySink *LPPROPERTYNOTIFYSINK;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPropertyNotifySink;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPropertyNotifySink : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI OnChanged(DISPID dispID) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnRequestEdit(DISPID dispID) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPropertyNotifySinkVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPropertyNotifySink *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPropertyNotifySink *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPropertyNotifySink *This);")
cpp_quote("      HRESULT (WINAPI *OnChanged)(IPropertyNotifySink *This,DISPID dispID);")
cpp_quote("      HRESULT (WINAPI *OnRequestEdit)(IPropertyNotifySink *This,DISPID dispID);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPropertyNotifySinkVtbl;")
cpp_quote("  struct IPropertyNotifySink {")
cpp_quote("    CONST_VTBL struct IPropertyNotifySinkVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPropertyNotifySink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPropertyNotifySink_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPropertyNotifySink_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPropertyNotifySink_OnChanged(This,dispID) (This)->lpVtbl->OnChanged(This,dispID)")
cpp_quote("#define IPropertyNotifySink_OnRequestEdit(This,dispID) (This)->lpVtbl->OnRequestEdit(This,dispID)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPropertyNotifySink_OnChanged_Proxy(IPropertyNotifySink *This,DISPID dispID);")
cpp_quote("  void __RPC_STUB IPropertyNotifySink_OnChanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyNotifySink_OnRequestEdit_Proxy(IPropertyNotifySink *This,DISPID dispID);")
cpp_quote("  void __RPC_STUB IPropertyNotifySink_OnRequestEdit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISpecifyPropertyPages_INTERFACE_DEFINED__")
cpp_quote("#define __ISpecifyPropertyPages_INTERFACE_DEFINED__")
cpp_quote("  typedef ISpecifyPropertyPages *LPSPECIFYPROPERTYPAGES;")
cpp_quote("")
cpp_quote("  typedef struct tagCAUUID {")
cpp_quote("    ULONG cElems;")
cpp_quote("    GUID *pElems;")
cpp_quote("  } CAUUID;")
cpp_quote("")
cpp_quote("  typedef struct tagCAUUID *LPCAUUID;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ISpecifyPropertyPages;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ISpecifyPropertyPages : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetPages(CAUUID *pPages) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ISpecifyPropertyPagesVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ISpecifyPropertyPages *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ISpecifyPropertyPages *This);")
cpp_quote("      ULONG (WINAPI *Release)(ISpecifyPropertyPages *This);")
cpp_quote("      HRESULT (WINAPI *GetPages)(ISpecifyPropertyPages *This,CAUUID *pPages);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ISpecifyPropertyPagesVtbl;")
cpp_quote("  struct ISpecifyPropertyPages {")
cpp_quote("    CONST_VTBL struct ISpecifyPropertyPagesVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ISpecifyPropertyPages_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ISpecifyPropertyPages_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ISpecifyPropertyPages_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ISpecifyPropertyPages_GetPages(This,pPages) (This)->lpVtbl->GetPages(This,pPages)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ISpecifyPropertyPages_GetPages_Proxy(ISpecifyPropertyPages *This,CAUUID *pPages);")
cpp_quote("  void __RPC_STUB ISpecifyPropertyPages_GetPages_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPersistMemory_INTERFACE_DEFINED__")
cpp_quote("#define __IPersistMemory_INTERFACE_DEFINED__")
cpp_quote("  typedef IPersistMemory *LPPERSISTMEMORY;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPersistMemory;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPersistMemory : public IPersist {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI IsDirty(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Load(LPVOID pMem,ULONG cbSize) = 0;")
cpp_quote("    virtual HRESULT WINAPI Save(LPVOID pMem,WINBOOL fClearDirty,ULONG cbSize) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetSizeMax(ULONG *pCbSize) = 0;")
cpp_quote("    virtual HRESULT WINAPI InitNew(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPersistMemoryVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPersistMemory *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPersistMemory *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPersistMemory *This);")
cpp_quote("      HRESULT (WINAPI *GetClassID)(IPersistMemory *This,CLSID *pClassID);")
cpp_quote("      HRESULT (WINAPI *IsDirty)(IPersistMemory *This);")
cpp_quote("      HRESULT (WINAPI *Load)(IPersistMemory *This,LPVOID pMem,ULONG cbSize);")
cpp_quote("      HRESULT (WINAPI *Save)(IPersistMemory *This,LPVOID pMem,WINBOOL fClearDirty,ULONG cbSize);")
cpp_quote("      HRESULT (WINAPI *GetSizeMax)(IPersistMemory *This,ULONG *pCbSize);")
cpp_quote("      HRESULT (WINAPI *InitNew)(IPersistMemory *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPersistMemoryVtbl;")
cpp_quote("  struct IPersistMemory {")
cpp_quote("    CONST_VTBL struct IPersistMemoryVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPersistMemory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPersistMemory_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPersistMemory_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPersistMemory_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)")
cpp_quote("#define IPersistMemory_IsDirty(This) (This)->lpVtbl->IsDirty(This)")
cpp_quote("#define IPersistMemory_Load(This,pMem,cbSize) (This)->lpVtbl->Load(This,pMem,cbSize)")
cpp_quote("#define IPersistMemory_Save(This,pMem,fClearDirty,cbSize) (This)->lpVtbl->Save(This,pMem,fClearDirty,cbSize)")
cpp_quote("#define IPersistMemory_GetSizeMax(This,pCbSize) (This)->lpVtbl->GetSizeMax(This,pCbSize)")
cpp_quote("#define IPersistMemory_InitNew(This) (This)->lpVtbl->InitNew(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPersistMemory_IsDirty_Proxy(IPersistMemory *This);")
cpp_quote("  void __RPC_STUB IPersistMemory_IsDirty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistMemory_RemoteLoad_Proxy(IPersistMemory *This,BYTE *pMem,ULONG cbSize);")
cpp_quote("  void __RPC_STUB IPersistMemory_RemoteLoad_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistMemory_RemoteSave_Proxy(IPersistMemory *This,BYTE *pMem,WINBOOL fClearDirty,ULONG cbSize);")
cpp_quote("  void __RPC_STUB IPersistMemory_RemoteSave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistMemory_GetSizeMax_Proxy(IPersistMemory *This,ULONG *pCbSize);")
cpp_quote("  void __RPC_STUB IPersistMemory_GetSizeMax_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistMemory_InitNew_Proxy(IPersistMemory *This);")
cpp_quote("  void __RPC_STUB IPersistMemory_InitNew_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPersistStreamInit_INTERFACE_DEFINED__")
cpp_quote("#define __IPersistStreamInit_INTERFACE_DEFINED__")
cpp_quote("  typedef IPersistStreamInit *LPPERSISTSTREAMINIT;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPersistStreamInit;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPersistStreamInit : public IPersist {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI IsDirty(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Load(LPSTREAM pStm) = 0;")
cpp_quote("    virtual HRESULT WINAPI Save(LPSTREAM pStm,WINBOOL fClearDirty) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetSizeMax(ULARGE_INTEGER *pCbSize) = 0;")
cpp_quote("    virtual HRESULT WINAPI InitNew(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPersistStreamInitVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPersistStreamInit *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPersistStreamInit *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPersistStreamInit *This);")
cpp_quote("      HRESULT (WINAPI *GetClassID)(IPersistStreamInit *This,CLSID *pClassID);")
cpp_quote("      HRESULT (WINAPI *IsDirty)(IPersistStreamInit *This);")
cpp_quote("      HRESULT (WINAPI *Load)(IPersistStreamInit *This,LPSTREAM pStm);")
cpp_quote("      HRESULT (WINAPI *Save)(IPersistStreamInit *This,LPSTREAM pStm,WINBOOL fClearDirty);")
cpp_quote("      HRESULT (WINAPI *GetSizeMax)(IPersistStreamInit *This,ULARGE_INTEGER *pCbSize);")
cpp_quote("      HRESULT (WINAPI *InitNew)(IPersistStreamInit *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPersistStreamInitVtbl;")
cpp_quote("  struct IPersistStreamInit {")
cpp_quote("    CONST_VTBL struct IPersistStreamInitVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPersistStreamInit_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPersistStreamInit_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPersistStreamInit_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPersistStreamInit_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)")
cpp_quote("#define IPersistStreamInit_IsDirty(This) (This)->lpVtbl->IsDirty(This)")
cpp_quote("#define IPersistStreamInit_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)")
cpp_quote("#define IPersistStreamInit_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)")
cpp_quote("#define IPersistStreamInit_GetSizeMax(This,pCbSize) (This)->lpVtbl->GetSizeMax(This,pCbSize)")
cpp_quote("#define IPersistStreamInit_InitNew(This) (This)->lpVtbl->InitNew(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPersistStreamInit_IsDirty_Proxy(IPersistStreamInit *This);")
cpp_quote("  void __RPC_STUB IPersistStreamInit_IsDirty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistStreamInit_Load_Proxy(IPersistStreamInit *This,LPSTREAM pStm);")
cpp_quote("  void __RPC_STUB IPersistStreamInit_Load_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistStreamInit_Save_Proxy(IPersistStreamInit *This,LPSTREAM pStm,WINBOOL fClearDirty);")
cpp_quote("  void __RPC_STUB IPersistStreamInit_Save_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistStreamInit_GetSizeMax_Proxy(IPersistStreamInit *This,ULARGE_INTEGER *pCbSize);")
cpp_quote("  void __RPC_STUB IPersistStreamInit_GetSizeMax_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistStreamInit_InitNew_Proxy(IPersistStreamInit *This);")
cpp_quote("  void __RPC_STUB IPersistStreamInit_InitNew_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPersistPropertyBag_INTERFACE_DEFINED__")
cpp_quote("#define __IPersistPropertyBag_INTERFACE_DEFINED__")
cpp_quote("  typedef IPersistPropertyBag *LPPERSISTPROPERTYBAG;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPersistPropertyBag;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPersistPropertyBag : public IPersist {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI InitNew(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Load(IPropertyBag *pPropBag,IErrorLog *pErrorLog) = 0;")
cpp_quote("    virtual HRESULT WINAPI Save(IPropertyBag *pPropBag,WINBOOL fClearDirty,WINBOOL fSaveAllProperties) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPersistPropertyBagVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPersistPropertyBag *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPersistPropertyBag *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPersistPropertyBag *This);")
cpp_quote("      HRESULT (WINAPI *GetClassID)(IPersistPropertyBag *This,CLSID *pClassID);")
cpp_quote("      HRESULT (WINAPI *InitNew)(IPersistPropertyBag *This);")
cpp_quote("      HRESULT (WINAPI *Load)(IPersistPropertyBag *This,IPropertyBag *pPropBag,IErrorLog *pErrorLog);")
cpp_quote("      HRESULT (WINAPI *Save)(IPersistPropertyBag *This,IPropertyBag *pPropBag,WINBOOL fClearDirty,WINBOOL fSaveAllProperties);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPersistPropertyBagVtbl;")
cpp_quote("  struct IPersistPropertyBag {")
cpp_quote("    CONST_VTBL struct IPersistPropertyBagVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPersistPropertyBag_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPersistPropertyBag_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPersistPropertyBag_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPersistPropertyBag_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)")
cpp_quote("#define IPersistPropertyBag_InitNew(This) (This)->lpVtbl->InitNew(This)")
cpp_quote("#define IPersistPropertyBag_Load(This,pPropBag,pErrorLog) (This)->lpVtbl->Load(This,pPropBag,pErrorLog)")
cpp_quote("#define IPersistPropertyBag_Save(This,pPropBag,fClearDirty,fSaveAllProperties) (This)->lpVtbl->Save(This,pPropBag,fClearDirty,fSaveAllProperties)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPersistPropertyBag_InitNew_Proxy(IPersistPropertyBag *This);")
cpp_quote("  void __RPC_STUB IPersistPropertyBag_InitNew_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistPropertyBag_Load_Proxy(IPersistPropertyBag *This,IPropertyBag *pPropBag,IErrorLog *pErrorLog);")
cpp_quote("  void __RPC_STUB IPersistPropertyBag_Load_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistPropertyBag_Save_Proxy(IPersistPropertyBag *This,IPropertyBag *pPropBag,WINBOOL fClearDirty,WINBOOL fSaveAllProperties);")
cpp_quote("  void __RPC_STUB IPersistPropertyBag_Save_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISimpleFrameSite_INTERFACE_DEFINED__")
cpp_quote("#define __ISimpleFrameSite_INTERFACE_DEFINED__")
cpp_quote("  typedef ISimpleFrameSite *LPSIMPLEFRAMESITE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ISimpleFrameSite;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ISimpleFrameSite : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI PreMessageFilter(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp,LRESULT *plResult,DWORD *pdwCookie) = 0;")
cpp_quote("    virtual HRESULT WINAPI PostMessageFilter(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp,LRESULT *plResult,DWORD dwCookie) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ISimpleFrameSiteVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ISimpleFrameSite *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ISimpleFrameSite *This);")
cpp_quote("      ULONG (WINAPI *Release)(ISimpleFrameSite *This);")
cpp_quote("      HRESULT (WINAPI *PreMessageFilter)(ISimpleFrameSite *This,HWND hWnd,UINT msg,WPARAM wp,LPARAM lp,LRESULT *plResult,DWORD *pdwCookie);")
cpp_quote("      HRESULT (WINAPI *PostMessageFilter)(ISimpleFrameSite *This,HWND hWnd,UINT msg,WPARAM wp,LPARAM lp,LRESULT *plResult,DWORD dwCookie);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ISimpleFrameSiteVtbl;")
cpp_quote("  struct ISimpleFrameSite {")
cpp_quote("    CONST_VTBL struct ISimpleFrameSiteVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ISimpleFrameSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ISimpleFrameSite_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ISimpleFrameSite_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ISimpleFrameSite_PreMessageFilter(This,hWnd,msg,wp,lp,plResult,pdwCookie) (This)->lpVtbl->PreMessageFilter(This,hWnd,msg,wp,lp,plResult,pdwCookie)")
cpp_quote("#define ISimpleFrameSite_PostMessageFilter(This,hWnd,msg,wp,lp,plResult,dwCookie) (This)->lpVtbl->PostMessageFilter(This,hWnd,msg,wp,lp,plResult,dwCookie)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ISimpleFrameSite_PreMessageFilter_Proxy(ISimpleFrameSite *This,HWND hWnd,UINT msg,WPARAM wp,LPARAM lp,LRESULT *plResult,DWORD *pdwCookie);")
cpp_quote("  void __RPC_STUB ISimpleFrameSite_PreMessageFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ISimpleFrameSite_PostMessageFilter_Proxy(ISimpleFrameSite *This,HWND hWnd,UINT msg,WPARAM wp,LPARAM lp,LRESULT *plResult,DWORD dwCookie);")
cpp_quote("  void __RPC_STUB ISimpleFrameSite_PostMessageFilter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IFont_INTERFACE_DEFINED__")
cpp_quote("#define __IFont_INTERFACE_DEFINED__")
cpp_quote("  typedef IFont *LPFONT;")
cpp_quote("")
cpp_quote("#ifndef OLE2ANSI")
cpp_quote("  typedef TEXTMETRICW TEXTMETRICOLE;")
cpp_quote("#else")
cpp_quote("  typedef TEXTMETRIC TEXTMETRICOLE;")
cpp_quote("#endif")
cpp_quote("  typedef TEXTMETRICOLE *LPTEXTMETRICOLE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IFont;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IFont : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI get_Name(BSTR *pName) = 0;")
cpp_quote("    virtual HRESULT WINAPI put_Name(BSTR name) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_Size(CY *pSize) = 0;")
cpp_quote("    virtual HRESULT WINAPI put_Size(CY size) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_Bold(WINBOOL *pBold) = 0;")
cpp_quote("    virtual HRESULT WINAPI put_Bold(WINBOOL bold) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_Italic(WINBOOL *pItalic) = 0;")
cpp_quote("    virtual HRESULT WINAPI put_Italic(WINBOOL italic) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_Underline(WINBOOL *pUnderline) = 0;")
cpp_quote("    virtual HRESULT WINAPI put_Underline(WINBOOL underline) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_Strikethrough(WINBOOL *pStrikethrough) = 0;")
cpp_quote("    virtual HRESULT WINAPI put_Strikethrough(WINBOOL strikethrough) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_Weight(SHORT *pWeight) = 0;")
cpp_quote("    virtual HRESULT WINAPI put_Weight(SHORT weight) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_Charset(SHORT *pCharset) = 0;")
cpp_quote("    virtual HRESULT WINAPI put_Charset(SHORT charset) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_hFont(HFONT *phFont) = 0;")
cpp_quote("    virtual HRESULT WINAPI Clone(IFont **ppFont) = 0;")
cpp_quote("    virtual HRESULT WINAPI IsEqual(IFont *pFontOther) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetRatio(LONG cyLogical,LONG cyHimetric) = 0;")
cpp_quote("    virtual HRESULT WINAPI QueryTextMetrics(TEXTMETRICOLE *pTM) = 0;")
cpp_quote("    virtual HRESULT WINAPI AddRefHfont(HFONT hFont) = 0;")
cpp_quote("    virtual HRESULT WINAPI ReleaseHfont(HFONT hFont) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetHdc(HDC hDC) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IFontVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IFont *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IFont *This);")
cpp_quote("      ULONG (WINAPI *Release)(IFont *This);")
cpp_quote("      HRESULT (WINAPI *get_Name)(IFont *This,BSTR *pName);")
cpp_quote("      HRESULT (WINAPI *put_Name)(IFont *This,BSTR name);")
cpp_quote("      HRESULT (WINAPI *get_Size)(IFont *This,CY *pSize);")
cpp_quote("      HRESULT (WINAPI *put_Size)(IFont *This,CY size);")
cpp_quote("      HRESULT (WINAPI *get_Bold)(IFont *This,WINBOOL *pBold);")
cpp_quote("      HRESULT (WINAPI *put_Bold)(IFont *This,WINBOOL bold);")
cpp_quote("      HRESULT (WINAPI *get_Italic)(IFont *This,WINBOOL *pItalic);")
cpp_quote("      HRESULT (WINAPI *put_Italic)(IFont *This,WINBOOL italic);")
cpp_quote("      HRESULT (WINAPI *get_Underline)(IFont *This,WINBOOL *pUnderline);")
cpp_quote("      HRESULT (WINAPI *put_Underline)(IFont *This,WINBOOL underline);")
cpp_quote("      HRESULT (WINAPI *get_Strikethrough)(IFont *This,WINBOOL *pStrikethrough);")
cpp_quote("      HRESULT (WINAPI *put_Strikethrough)(IFont *This,WINBOOL strikethrough);")
cpp_quote("      HRESULT (WINAPI *get_Weight)(IFont *This,SHORT *pWeight);")
cpp_quote("      HRESULT (WINAPI *put_Weight)(IFont *This,SHORT weight);")
cpp_quote("      HRESULT (WINAPI *get_Charset)(IFont *This,SHORT *pCharset);")
cpp_quote("      HRESULT (WINAPI *put_Charset)(IFont *This,SHORT charset);")
cpp_quote("      HRESULT (WINAPI *get_hFont)(IFont *This,HFONT *phFont);")
cpp_quote("      HRESULT (WINAPI *Clone)(IFont *This,IFont **ppFont);")
cpp_quote("      HRESULT (WINAPI *IsEqual)(IFont *This,IFont *pFontOther);")
cpp_quote("      HRESULT (WINAPI *SetRatio)(IFont *This,LONG cyLogical,LONG cyHimetric);")
cpp_quote("      HRESULT (WINAPI *QueryTextMetrics)(IFont *This,TEXTMETRICOLE *pTM);")
cpp_quote("      HRESULT (WINAPI *AddRefHfont)(IFont *This,HFONT hFont);")
cpp_quote("      HRESULT (WINAPI *ReleaseHfont)(IFont *This,HFONT hFont);")
cpp_quote("      HRESULT (WINAPI *SetHdc)(IFont *This,HDC hDC);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IFontVtbl;")
cpp_quote("  struct IFont {")
cpp_quote("    CONST_VTBL struct IFontVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IFont_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IFont_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IFont_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IFont_get_Name(This,pName) (This)->lpVtbl->get_Name(This,pName)")
cpp_quote("#define IFont_put_Name(This,name) (This)->lpVtbl->put_Name(This,name)")
cpp_quote("#define IFont_get_Size(This,pSize) (This)->lpVtbl->get_Size(This,pSize)")
cpp_quote("#define IFont_put_Size(This,size) (This)->lpVtbl->put_Size(This,size)")
cpp_quote("#define IFont_get_Bold(This,pBold) (This)->lpVtbl->get_Bold(This,pBold)")
cpp_quote("#define IFont_put_Bold(This,bold) (This)->lpVtbl->put_Bold(This,bold)")
cpp_quote("#define IFont_get_Italic(This,pItalic) (This)->lpVtbl->get_Italic(This,pItalic)")
cpp_quote("#define IFont_put_Italic(This,italic) (This)->lpVtbl->put_Italic(This,italic)")
cpp_quote("#define IFont_get_Underline(This,pUnderline) (This)->lpVtbl->get_Underline(This,pUnderline)")
cpp_quote("#define IFont_put_Underline(This,underline) (This)->lpVtbl->put_Underline(This,underline)")
cpp_quote("#define IFont_get_Strikethrough(This,pStrikethrough) (This)->lpVtbl->get_Strikethrough(This,pStrikethrough)")
cpp_quote("#define IFont_put_Strikethrough(This,strikethrough) (This)->lpVtbl->put_Strikethrough(This,strikethrough)")
cpp_quote("#define IFont_get_Weight(This,pWeight) (This)->lpVtbl->get_Weight(This,pWeight)")
cpp_quote("#define IFont_put_Weight(This,weight) (This)->lpVtbl->put_Weight(This,weight)")
cpp_quote("#define IFont_get_Charset(This,pCharset) (This)->lpVtbl->get_Charset(This,pCharset)")
cpp_quote("#define IFont_put_Charset(This,charset) (This)->lpVtbl->put_Charset(This,charset)")
cpp_quote("#define IFont_get_hFont(This,phFont) (This)->lpVtbl->get_hFont(This,phFont)")
cpp_quote("#define IFont_Clone(This,ppFont) (This)->lpVtbl->Clone(This,ppFont)")
cpp_quote("#define IFont_IsEqual(This,pFontOther) (This)->lpVtbl->IsEqual(This,pFontOther)")
cpp_quote("#define IFont_SetRatio(This,cyLogical,cyHimetric) (This)->lpVtbl->SetRatio(This,cyLogical,cyHimetric)")
cpp_quote("#define IFont_QueryTextMetrics(This,pTM) (This)->lpVtbl->QueryTextMetrics(This,pTM)")
cpp_quote("#define IFont_AddRefHfont(This,hFont) (This)->lpVtbl->AddRefHfont(This,hFont)")
cpp_quote("#define IFont_ReleaseHfont(This,hFont) (This)->lpVtbl->ReleaseHfont(This,hFont)")
cpp_quote("#define IFont_SetHdc(This,hDC) (This)->lpVtbl->SetHdc(This,hDC)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IFont_get_Name_Proxy(IFont *This,BSTR *pName);")
cpp_quote("  void __RPC_STUB IFont_get_Name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_put_Name_Proxy(IFont *This,BSTR name);")
cpp_quote("  void __RPC_STUB IFont_put_Name_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_get_Size_Proxy(IFont *This,CY *pSize);")
cpp_quote("  void __RPC_STUB IFont_get_Size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_put_Size_Proxy(IFont *This,CY size);")
cpp_quote("  void __RPC_STUB IFont_put_Size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_get_Bold_Proxy(IFont *This,WINBOOL *pBold);")
cpp_quote("  void __RPC_STUB IFont_get_Bold_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_put_Bold_Proxy(IFont *This,WINBOOL bold);")
cpp_quote("  void __RPC_STUB IFont_put_Bold_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_get_Italic_Proxy(IFont *This,WINBOOL *pItalic);")
cpp_quote("  void __RPC_STUB IFont_get_Italic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_put_Italic_Proxy(IFont *This,WINBOOL italic);")
cpp_quote("  void __RPC_STUB IFont_put_Italic_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_get_Underline_Proxy(IFont *This,WINBOOL *pUnderline);")
cpp_quote("  void __RPC_STUB IFont_get_Underline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_put_Underline_Proxy(IFont *This,WINBOOL underline);")
cpp_quote("  void __RPC_STUB IFont_put_Underline_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_get_Strikethrough_Proxy(IFont *This,WINBOOL *pStrikethrough);")
cpp_quote("  void __RPC_STUB IFont_get_Strikethrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_put_Strikethrough_Proxy(IFont *This,WINBOOL strikethrough);")
cpp_quote("  void __RPC_STUB IFont_put_Strikethrough_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_get_Weight_Proxy(IFont *This,SHORT *pWeight);")
cpp_quote("  void __RPC_STUB IFont_get_Weight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_put_Weight_Proxy(IFont *This,SHORT weight);")
cpp_quote("  void __RPC_STUB IFont_put_Weight_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_get_Charset_Proxy(IFont *This,SHORT *pCharset);")
cpp_quote("  void __RPC_STUB IFont_get_Charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_put_Charset_Proxy(IFont *This,SHORT charset);")
cpp_quote("  void __RPC_STUB IFont_put_Charset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_get_hFont_Proxy(IFont *This,HFONT *phFont);")
cpp_quote("  void __RPC_STUB IFont_get_hFont_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_Clone_Proxy(IFont *This,IFont **ppFont);")
cpp_quote("  void __RPC_STUB IFont_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_IsEqual_Proxy(IFont *This,IFont *pFontOther);")
cpp_quote("  void __RPC_STUB IFont_IsEqual_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_SetRatio_Proxy(IFont *This,LONG cyLogical,LONG cyHimetric);")
cpp_quote("  void __RPC_STUB IFont_SetRatio_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_QueryTextMetrics_Proxy(IFont *This,TEXTMETRICOLE *pTM);")
cpp_quote("  void __RPC_STUB IFont_QueryTextMetrics_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_AddRefHfont_Proxy(IFont *This,HFONT hFont);")
cpp_quote("  void __RPC_STUB IFont_AddRefHfont_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_ReleaseHfont_Proxy(IFont *This,HFONT hFont);")
cpp_quote("  void __RPC_STUB IFont_ReleaseHfont_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IFont_SetHdc_Proxy(IFont *This,HDC hDC);")
cpp_quote("  void __RPC_STUB IFont_SetHdc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPicture_INTERFACE_DEFINED__")
cpp_quote("#define __IPicture_INTERFACE_DEFINED__")
cpp_quote("  typedef IPicture *LPPICTURE;")
cpp_quote("")
cpp_quote("  typedef enum tagPictureAttributes {")
cpp_quote("    PICTURE_SCALABLE = 0x1,PICTURE_TRANSPARENT = 0x2")
cpp_quote("  } PICTUREATTRIBUTES;")
cpp_quote("")
cpp_quote("  typedef UINT OLE_HANDLE;")
cpp_quote("  typedef LONG OLE_XPOS_HIMETRIC;")
cpp_quote("  typedef LONG OLE_YPOS_HIMETRIC;")
cpp_quote("  typedef LONG OLE_XSIZE_HIMETRIC;")
cpp_quote("  typedef LONG OLE_YSIZE_HIMETRIC;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPicture;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPicture : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI get_Handle(OLE_HANDLE *pHandle) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_hPal(OLE_HANDLE *phPal) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_Type(SHORT *pType) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_Width(OLE_XSIZE_HIMETRIC *pWidth) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_Height(OLE_YSIZE_HIMETRIC *pHeight) = 0;")
cpp_quote("    virtual HRESULT WINAPI Render(HDC hDC,LONG x,LONG y,LONG cx,LONG cy,OLE_XPOS_HIMETRIC xSrc,OLE_YPOS_HIMETRIC ySrc,OLE_XSIZE_HIMETRIC cxSrc,OLE_YSIZE_HIMETRIC cySrc,LPCRECT pRcWBounds) = 0;")
cpp_quote("    virtual HRESULT WINAPI set_hPal(OLE_HANDLE hPal) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_CurDC(HDC *phDC) = 0;")
cpp_quote("    virtual HRESULT WINAPI SelectPicture(HDC hDCIn,HDC *phDCOut,OLE_HANDLE *phBmpOut) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_KeepOriginalFormat(WINBOOL *pKeep) = 0;")
cpp_quote("    virtual HRESULT WINAPI put_KeepOriginalFormat(WINBOOL keep) = 0;")
cpp_quote("    virtual HRESULT WINAPI PictureChanged(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI SaveAsFile(LPSTREAM pStream,WINBOOL fSaveMemCopy,LONG *pCbSize) = 0;")
cpp_quote("    virtual HRESULT WINAPI get_Attributes(DWORD *pDwAttr) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPictureVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPicture *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPicture *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPicture *This);")
cpp_quote("      HRESULT (WINAPI *get_Handle)(IPicture *This,OLE_HANDLE *pHandle);")
cpp_quote("      HRESULT (WINAPI *get_hPal)(IPicture *This,OLE_HANDLE *phPal);")
cpp_quote("      HRESULT (WINAPI *get_Type)(IPicture *This,SHORT *pType);")
cpp_quote("      HRESULT (WINAPI *get_Width)(IPicture *This,OLE_XSIZE_HIMETRIC *pWidth);")
cpp_quote("      HRESULT (WINAPI *get_Height)(IPicture *This,OLE_YSIZE_HIMETRIC *pHeight);")
cpp_quote("      HRESULT (WINAPI *Render)(IPicture *This,HDC hDC,LONG x,LONG y,LONG cx,LONG cy,OLE_XPOS_HIMETRIC xSrc,OLE_YPOS_HIMETRIC ySrc,OLE_XSIZE_HIMETRIC cxSrc,OLE_YSIZE_HIMETRIC cySrc,LPCRECT pRcWBounds);")
cpp_quote("      HRESULT (WINAPI *set_hPal)(IPicture *This,OLE_HANDLE hPal);")
cpp_quote("      HRESULT (WINAPI *get_CurDC)(IPicture *This,HDC *phDC);")
cpp_quote("      HRESULT (WINAPI *SelectPicture)(IPicture *This,HDC hDCIn,HDC *phDCOut,OLE_HANDLE *phBmpOut);")
cpp_quote("      HRESULT (WINAPI *get_KeepOriginalFormat)(IPicture *This,WINBOOL *pKeep);")
cpp_quote("      HRESULT (WINAPI *put_KeepOriginalFormat)(IPicture *This,WINBOOL keep);")
cpp_quote("      HRESULT (WINAPI *PictureChanged)(IPicture *This);")
cpp_quote("      HRESULT (WINAPI *SaveAsFile)(IPicture *This,LPSTREAM pStream,WINBOOL fSaveMemCopy,LONG *pCbSize);")
cpp_quote("      HRESULT (WINAPI *get_Attributes)(IPicture *This,DWORD *pDwAttr);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPictureVtbl;")
cpp_quote("  struct IPicture {")
cpp_quote("    CONST_VTBL struct IPictureVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPicture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPicture_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPicture_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPicture_get_Handle(This,pHandle) (This)->lpVtbl->get_Handle(This,pHandle)")
cpp_quote("#define IPicture_get_hPal(This,phPal) (This)->lpVtbl->get_hPal(This,phPal)")
cpp_quote("#define IPicture_get_Type(This,pType) (This)->lpVtbl->get_Type(This,pType)")
cpp_quote("#define IPicture_get_Width(This,pWidth) (This)->lpVtbl->get_Width(This,pWidth)")
cpp_quote("#define IPicture_get_Height(This,pHeight) (This)->lpVtbl->get_Height(This,pHeight)")
cpp_quote("#define IPicture_Render(This,hDC,x,y,cx,cy,xSrc,ySrc,cxSrc,cySrc,pRcWBounds) (This)->lpVtbl->Render(This,hDC,x,y,cx,cy,xSrc,ySrc,cxSrc,cySrc,pRcWBounds)")
cpp_quote("#define IPicture_set_hPal(This,hPal) (This)->lpVtbl->set_hPal(This,hPal)")
cpp_quote("#define IPicture_get_CurDC(This,phDC) (This)->lpVtbl->get_CurDC(This,phDC)")
cpp_quote("#define IPicture_SelectPicture(This,hDCIn,phDCOut,phBmpOut) (This)->lpVtbl->SelectPicture(This,hDCIn,phDCOut,phBmpOut)")
cpp_quote("#define IPicture_get_KeepOriginalFormat(This,pKeep) (This)->lpVtbl->get_KeepOriginalFormat(This,pKeep)")
cpp_quote("#define IPicture_put_KeepOriginalFormat(This,keep) (This)->lpVtbl->put_KeepOriginalFormat(This,keep)")
cpp_quote("#define IPicture_PictureChanged(This) (This)->lpVtbl->PictureChanged(This)")
cpp_quote("#define IPicture_SaveAsFile(This,pStream,fSaveMemCopy,pCbSize) (This)->lpVtbl->SaveAsFile(This,pStream,fSaveMemCopy,pCbSize)")
cpp_quote("#define IPicture_get_Attributes(This,pDwAttr) (This)->lpVtbl->get_Attributes(This,pDwAttr)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPicture_get_Handle_Proxy(IPicture *This,OLE_HANDLE *pHandle);")
cpp_quote("  void __RPC_STUB IPicture_get_Handle_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_get_hPal_Proxy(IPicture *This,OLE_HANDLE *phPal);")
cpp_quote("  void __RPC_STUB IPicture_get_hPal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_get_Type_Proxy(IPicture *This,SHORT *pType);")
cpp_quote("  void __RPC_STUB IPicture_get_Type_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_get_Width_Proxy(IPicture *This,OLE_XSIZE_HIMETRIC *pWidth);")
cpp_quote("  void __RPC_STUB IPicture_get_Width_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_get_Height_Proxy(IPicture *This,OLE_YSIZE_HIMETRIC *pHeight);")
cpp_quote("  void __RPC_STUB IPicture_get_Height_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_Render_Proxy(IPicture *This,HDC hDC,LONG x,LONG y,LONG cx,LONG cy,OLE_XPOS_HIMETRIC xSrc,OLE_YPOS_HIMETRIC ySrc,OLE_XSIZE_HIMETRIC cxSrc,OLE_YSIZE_HIMETRIC cySrc,LPCRECT pRcWBounds);")
cpp_quote("  void __RPC_STUB IPicture_Render_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_set_hPal_Proxy(IPicture *This,OLE_HANDLE hPal);")
cpp_quote("  void __RPC_STUB IPicture_set_hPal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_get_CurDC_Proxy(IPicture *This,HDC *phDC);")
cpp_quote("  void __RPC_STUB IPicture_get_CurDC_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_SelectPicture_Proxy(IPicture *This,HDC hDCIn,HDC *phDCOut,OLE_HANDLE *phBmpOut);")
cpp_quote("  void __RPC_STUB IPicture_SelectPicture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_get_KeepOriginalFormat_Proxy(IPicture *This,WINBOOL *pKeep);")
cpp_quote("  void __RPC_STUB IPicture_get_KeepOriginalFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_put_KeepOriginalFormat_Proxy(IPicture *This,WINBOOL keep);")
cpp_quote("  void __RPC_STUB IPicture_put_KeepOriginalFormat_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_PictureChanged_Proxy(IPicture *This);")
cpp_quote("  void __RPC_STUB IPicture_PictureChanged_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_SaveAsFile_Proxy(IPicture *This,LPSTREAM pStream,WINBOOL fSaveMemCopy,LONG *pCbSize);")
cpp_quote("  void __RPC_STUB IPicture_SaveAsFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPicture_get_Attributes_Proxy(IPicture *This,DWORD *pDwAttr);")
cpp_quote("  void __RPC_STUB IPicture_get_Attributes_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IFontEventsDisp_INTERFACE_DEFINED__")
cpp_quote("#define __IFontEventsDisp_INTERFACE_DEFINED__")
cpp_quote("  typedef IFontEventsDisp *LPFONTEVENTS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IFontEventsDisp;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IFontEventsDisp : public IDispatch {")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IFontEventsDispVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IFontEventsDisp *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IFontEventsDisp *This);")
cpp_quote("      ULONG (WINAPI *Release)(IFontEventsDisp *This);")
cpp_quote("      HRESULT (WINAPI *GetTypeInfoCount)(IFontEventsDisp *This,UINT *pctinfo);")
cpp_quote("      HRESULT (WINAPI *GetTypeInfo)(IFontEventsDisp *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);")
cpp_quote("      HRESULT (WINAPI *GetIDsOfNames)(IFontEventsDisp *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);")
cpp_quote("      HRESULT (WINAPI *Invoke)(IFontEventsDisp *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IFontEventsDispVtbl;")
cpp_quote("  struct IFontEventsDisp {")
cpp_quote("    CONST_VTBL struct IFontEventsDispVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IFontEventsDisp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IFontEventsDisp_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IFontEventsDisp_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IFontEventsDisp_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)")
cpp_quote("#define IFontEventsDisp_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)")
cpp_quote("#define IFontEventsDisp_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)")
cpp_quote("#define IFontEventsDisp_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IFontDisp_INTERFACE_DEFINED__")
cpp_quote("#define __IFontDisp_INTERFACE_DEFINED__")
cpp_quote("  typedef IFontDisp *LPFONTDISP;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IFontDisp;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IFontDisp : public IDispatch {")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IFontDispVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IFontDisp *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IFontDisp *This);")
cpp_quote("      ULONG (WINAPI *Release)(IFontDisp *This);")
cpp_quote("      HRESULT (WINAPI *GetTypeInfoCount)(IFontDisp *This,UINT *pctinfo);")
cpp_quote("      HRESULT (WINAPI *GetTypeInfo)(IFontDisp *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);")
cpp_quote("      HRESULT (WINAPI *GetIDsOfNames)(IFontDisp *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);")
cpp_quote("      HRESULT (WINAPI *Invoke)(IFontDisp *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IFontDispVtbl;")
cpp_quote("  struct IFontDisp {")
cpp_quote("    CONST_VTBL struct IFontDispVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IFontDisp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IFontDisp_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IFontDisp_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IFontDisp_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)")
cpp_quote("#define IFontDisp_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)")
cpp_quote("#define IFontDisp_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)")
cpp_quote("#define IFontDisp_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPictureDisp_INTERFACE_DEFINED__")
cpp_quote("#define __IPictureDisp_INTERFACE_DEFINED__")
cpp_quote("  typedef IPictureDisp *LPPICTUREDISP;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPictureDisp;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPictureDisp : public IDispatch {")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPictureDispVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPictureDisp *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPictureDisp *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPictureDisp *This);")
cpp_quote("      HRESULT (WINAPI *GetTypeInfoCount)(IPictureDisp *This,UINT *pctinfo);")
cpp_quote("      HRESULT (WINAPI *GetTypeInfo)(IPictureDisp *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);")
cpp_quote("      HRESULT (WINAPI *GetIDsOfNames)(IPictureDisp *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);")
cpp_quote("      HRESULT (WINAPI *Invoke)(IPictureDisp *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPictureDispVtbl;")
cpp_quote("  struct IPictureDisp {")
cpp_quote("    CONST_VTBL struct IPictureDispVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPictureDisp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPictureDisp_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPictureDisp_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPictureDisp_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)")
cpp_quote("#define IPictureDisp_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)")
cpp_quote("#define IPictureDisp_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)")
cpp_quote("#define IPictureDisp_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceObjectWindowless_INTERFACE_DEFINED__")
cpp_quote("#define __IOleInPlaceObjectWindowless_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleInPlaceObjectWindowless *LPOLEINPLACEOBJECTWINDOWLESS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleInPlaceObjectWindowless;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleInPlaceObjectWindowless : public IOleInPlaceObject {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI OnWindowMessage(UINT msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetDropTarget(IDropTarget **ppDropTarget) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleInPlaceObjectWindowlessVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleInPlaceObjectWindowless *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleInPlaceObjectWindowless *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleInPlaceObjectWindowless *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(IOleInPlaceObjectWindowless *This,HWND *phwnd);")
cpp_quote("      HRESULT (WINAPI *ContextSensitiveHelp)(IOleInPlaceObjectWindowless *This,WINBOOL fEnterMode);")
cpp_quote("      HRESULT (WINAPI *InPlaceDeactivate)(IOleInPlaceObjectWindowless *This);")
cpp_quote("      HRESULT (WINAPI *UIDeactivate)(IOleInPlaceObjectWindowless *This);")
cpp_quote("      HRESULT (WINAPI *SetObjectRects)(IOleInPlaceObjectWindowless *This,LPCRECT lprcPosRect,LPCRECT lprcClipRect);")
cpp_quote("      HRESULT (WINAPI *ReactivateAndUndo)(IOleInPlaceObjectWindowless *This);")
cpp_quote("      HRESULT (WINAPI *OnWindowMessage)(IOleInPlaceObjectWindowless *This,UINT msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult);")
cpp_quote("      HRESULT (WINAPI *GetDropTarget)(IOleInPlaceObjectWindowless *This,IDropTarget **ppDropTarget);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleInPlaceObjectWindowlessVtbl;")
cpp_quote("  struct IOleInPlaceObjectWindowless {")
cpp_quote("    CONST_VTBL struct IOleInPlaceObjectWindowlessVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleInPlaceObjectWindowless_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleInPlaceObjectWindowless_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleInPlaceObjectWindowless_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleInPlaceObjectWindowless_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)")
cpp_quote("#define IOleInPlaceObjectWindowless_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)")
cpp_quote("#define IOleInPlaceObjectWindowless_InPlaceDeactivate(This) (This)->lpVtbl->InPlaceDeactivate(This)")
cpp_quote("#define IOleInPlaceObjectWindowless_UIDeactivate(This) (This)->lpVtbl->UIDeactivate(This)")
cpp_quote("#define IOleInPlaceObjectWindowless_SetObjectRects(This,lprcPosRect,lprcClipRect) (This)->lpVtbl->SetObjectRects(This,lprcPosRect,lprcClipRect)")
cpp_quote("#define IOleInPlaceObjectWindowless_ReactivateAndUndo(This) (This)->lpVtbl->ReactivateAndUndo(This)")
cpp_quote("#define IOleInPlaceObjectWindowless_OnWindowMessage(This,msg,wParam,lParam,plResult) (This)->lpVtbl->OnWindowMessage(This,msg,wParam,lParam,plResult)")
cpp_quote("#define IOleInPlaceObjectWindowless_GetDropTarget(This,ppDropTarget) (This)->lpVtbl->GetDropTarget(This,ppDropTarget)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleInPlaceObjectWindowless_OnWindowMessage_Proxy(IOleInPlaceObjectWindowless *This,UINT msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult);")
cpp_quote("  void __RPC_STUB IOleInPlaceObjectWindowless_OnWindowMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceObjectWindowless_GetDropTarget_Proxy(IOleInPlaceObjectWindowless *This,IDropTarget **ppDropTarget);")
cpp_quote("  void __RPC_STUB IOleInPlaceObjectWindowless_GetDropTarget_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceSiteEx_INTERFACE_DEFINED__")
cpp_quote("#define __IOleInPlaceSiteEx_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleInPlaceSiteEx *LPOLEINPLACESITEEX;")
cpp_quote("")
cpp_quote("  typedef enum tagACTIVATEFLAGS {")
cpp_quote("    ACTIVATE_WINDOWLESS = 1")
cpp_quote("  } ACTIVATEFLAGS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleInPlaceSiteEx;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleInPlaceSiteEx : public IOleInPlaceSite {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI OnInPlaceActivateEx(WINBOOL *pfNoRedraw,DWORD dwFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnInPlaceDeactivateEx(WINBOOL fNoRedraw) = 0;")
cpp_quote("    virtual HRESULT WINAPI RequestUIActivate(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleInPlaceSiteExVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleInPlaceSiteEx *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleInPlaceSiteEx *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleInPlaceSiteEx *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(IOleInPlaceSiteEx *This,HWND *phwnd);")
cpp_quote("      HRESULT (WINAPI *ContextSensitiveHelp)(IOleInPlaceSiteEx *This,WINBOOL fEnterMode);")
cpp_quote("      HRESULT (WINAPI *CanInPlaceActivate)(IOleInPlaceSiteEx *This);")
cpp_quote("      HRESULT (WINAPI *OnInPlaceActivate)(IOleInPlaceSiteEx *This);")
cpp_quote("      HRESULT (WINAPI *OnUIActivate)(IOleInPlaceSiteEx *This);")
cpp_quote("      HRESULT (WINAPI *GetWindowContext)(IOleInPlaceSiteEx *This,IOleInPlaceFrame **ppFrame,IOleInPlaceUIWindow **ppDoc,LPRECT lprcPosRect,LPRECT lprcClipRect,LPOLEINPLACEFRAMEINFO lpFrameInfo);")
cpp_quote("      HRESULT (WINAPI *Scroll)(IOleInPlaceSiteEx *This,SIZE scrollExtant);")
cpp_quote("      HRESULT (WINAPI *OnUIDeactivate)(IOleInPlaceSiteEx *This,WINBOOL fUndoable);")
cpp_quote("      HRESULT (WINAPI *OnInPlaceDeactivate)(IOleInPlaceSiteEx *This);")
cpp_quote("      HRESULT (WINAPI *DiscardUndoState)(IOleInPlaceSiteEx *This);")
cpp_quote("      HRESULT (WINAPI *DeactivateAndUndo)(IOleInPlaceSiteEx *This);")
cpp_quote("      HRESULT (WINAPI *OnPosRectChange)(IOleInPlaceSiteEx *This,LPCRECT lprcPosRect);")
cpp_quote("      HRESULT (WINAPI *OnInPlaceActivateEx)(IOleInPlaceSiteEx *This,WINBOOL *pfNoRedraw,DWORD dwFlags);")
cpp_quote("      HRESULT (WINAPI *OnInPlaceDeactivateEx)(IOleInPlaceSiteEx *This,WINBOOL fNoRedraw);")
cpp_quote("      HRESULT (WINAPI *RequestUIActivate)(IOleInPlaceSiteEx *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleInPlaceSiteExVtbl;")
cpp_quote("  struct IOleInPlaceSiteEx {")
cpp_quote("    CONST_VTBL struct IOleInPlaceSiteExVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleInPlaceSiteEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleInPlaceSiteEx_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleInPlaceSiteEx_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleInPlaceSiteEx_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)")
cpp_quote("#define IOleInPlaceSiteEx_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)")
cpp_quote("#define IOleInPlaceSiteEx_CanInPlaceActivate(This) (This)->lpVtbl->CanInPlaceActivate(This)")
cpp_quote("#define IOleInPlaceSiteEx_OnInPlaceActivate(This) (This)->lpVtbl->OnInPlaceActivate(This)")
cpp_quote("#define IOleInPlaceSiteEx_OnUIActivate(This) (This)->lpVtbl->OnUIActivate(This)")
cpp_quote("#define IOleInPlaceSiteEx_GetWindowContext(This,ppFrame,ppDoc,lprcPosRect,lprcClipRect,lpFrameInfo) (This)->lpVtbl->GetWindowContext(This,ppFrame,ppDoc,lprcPosRect,lprcClipRect,lpFrameInfo)")
cpp_quote("#define IOleInPlaceSiteEx_Scroll(This,scrollExtant) (This)->lpVtbl->Scroll(This,scrollExtant)")
cpp_quote("#define IOleInPlaceSiteEx_OnUIDeactivate(This,fUndoable) (This)->lpVtbl->OnUIDeactivate(This,fUndoable)")
cpp_quote("#define IOleInPlaceSiteEx_OnInPlaceDeactivate(This) (This)->lpVtbl->OnInPlaceDeactivate(This)")
cpp_quote("#define IOleInPlaceSiteEx_DiscardUndoState(This) (This)->lpVtbl->DiscardUndoState(This)")
cpp_quote("#define IOleInPlaceSiteEx_DeactivateAndUndo(This) (This)->lpVtbl->DeactivateAndUndo(This)")
cpp_quote("#define IOleInPlaceSiteEx_OnPosRectChange(This,lprcPosRect) (This)->lpVtbl->OnPosRectChange(This,lprcPosRect)")
cpp_quote("#define IOleInPlaceSiteEx_OnInPlaceActivateEx(This,pfNoRedraw,dwFlags) (This)->lpVtbl->OnInPlaceActivateEx(This,pfNoRedraw,dwFlags)")
cpp_quote("#define IOleInPlaceSiteEx_OnInPlaceDeactivateEx(This,fNoRedraw) (This)->lpVtbl->OnInPlaceDeactivateEx(This,fNoRedraw)")
cpp_quote("#define IOleInPlaceSiteEx_RequestUIActivate(This) (This)->lpVtbl->RequestUIActivate(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteEx_OnInPlaceActivateEx_Proxy(IOleInPlaceSiteEx *This,WINBOOL *pfNoRedraw,DWORD dwFlags);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteEx_OnInPlaceActivateEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteEx_OnInPlaceDeactivateEx_Proxy(IOleInPlaceSiteEx *This,WINBOOL fNoRedraw);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteEx_OnInPlaceDeactivateEx_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteEx_RequestUIActivate_Proxy(IOleInPlaceSiteEx *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteEx_RequestUIActivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceSiteWindowless_INTERFACE_DEFINED__")
cpp_quote("#define __IOleInPlaceSiteWindowless_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleInPlaceSiteWindowless *LPOLEINPLACESITEWINDOWLESS;")
cpp_quote("")
cpp_quote("  typedef enum tagOLEDCFLAGS {")
cpp_quote("    OLEDC_NODRAW = 0x1,OLEDC_PAINTBKGND = 0x2,OLEDC_OFFSCREEN = 0x4")
cpp_quote("  } OLEDCFLAGS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleInPlaceSiteWindowless;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleInPlaceSiteWindowless : public IOleInPlaceSiteEx {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI CanWindowlessActivate(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetCapture(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetCapture(WINBOOL fCapture) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetFocus(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetFocus(WINBOOL fFocus) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetDC(LPCRECT pRect,DWORD grfFlags,HDC *phDC) = 0;")
cpp_quote("    virtual HRESULT WINAPI ReleaseDC(HDC hDC) = 0;")
cpp_quote("    virtual HRESULT WINAPI InvalidateRect(LPCRECT pRect,WINBOOL fErase) = 0;")
cpp_quote("    virtual HRESULT WINAPI InvalidateRgn(HRGN hRGN,WINBOOL fErase) = 0;")
cpp_quote("    virtual HRESULT WINAPI ScrollRect(INT dx,INT dy,LPCRECT pRectScroll,LPCRECT pRectClip) = 0;")
cpp_quote("    virtual HRESULT WINAPI AdjustRect(LPRECT prc) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnDefWindowMessage(UINT msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleInPlaceSiteWindowlessVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleInPlaceSiteWindowless *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleInPlaceSiteWindowless *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleInPlaceSiteWindowless *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(IOleInPlaceSiteWindowless *This,HWND *phwnd);")
cpp_quote("      HRESULT (WINAPI *ContextSensitiveHelp)(IOleInPlaceSiteWindowless *This,WINBOOL fEnterMode);")
cpp_quote("      HRESULT (WINAPI *CanInPlaceActivate)(IOleInPlaceSiteWindowless *This);")
cpp_quote("      HRESULT (WINAPI *OnInPlaceActivate)(IOleInPlaceSiteWindowless *This);")
cpp_quote("      HRESULT (WINAPI *OnUIActivate)(IOleInPlaceSiteWindowless *This);")
cpp_quote("      HRESULT (WINAPI *GetWindowContext)(IOleInPlaceSiteWindowless *This,IOleInPlaceFrame **ppFrame,IOleInPlaceUIWindow **ppDoc,LPRECT lprcPosRect,LPRECT lprcClipRect,LPOLEINPLACEFRAMEINFO lpFrameInfo);")
cpp_quote("      HRESULT (WINAPI *Scroll)(IOleInPlaceSiteWindowless *This,SIZE scrollExtant);")
cpp_quote("      HRESULT (WINAPI *OnUIDeactivate)(IOleInPlaceSiteWindowless *This,WINBOOL fUndoable);")
cpp_quote("      HRESULT (WINAPI *OnInPlaceDeactivate)(IOleInPlaceSiteWindowless *This);")
cpp_quote("      HRESULT (WINAPI *DiscardUndoState)(IOleInPlaceSiteWindowless *This);")
cpp_quote("      HRESULT (WINAPI *DeactivateAndUndo)(IOleInPlaceSiteWindowless *This);")
cpp_quote("      HRESULT (WINAPI *OnPosRectChange)(IOleInPlaceSiteWindowless *This,LPCRECT lprcPosRect);")
cpp_quote("      HRESULT (WINAPI *OnInPlaceActivateEx)(IOleInPlaceSiteWindowless *This,WINBOOL *pfNoRedraw,DWORD dwFlags);")
cpp_quote("      HRESULT (WINAPI *OnInPlaceDeactivateEx)(IOleInPlaceSiteWindowless *This,WINBOOL fNoRedraw);")
cpp_quote("      HRESULT (WINAPI *RequestUIActivate)(IOleInPlaceSiteWindowless *This);")
cpp_quote("      HRESULT (WINAPI *CanWindowlessActivate)(IOleInPlaceSiteWindowless *This);")
cpp_quote("      HRESULT (WINAPI *GetCapture)(IOleInPlaceSiteWindowless *This);")
cpp_quote("      HRESULT (WINAPI *SetCapture)(IOleInPlaceSiteWindowless *This,WINBOOL fCapture);")
cpp_quote("      HRESULT (WINAPI *GetFocus)(IOleInPlaceSiteWindowless *This);")
cpp_quote("      HRESULT (WINAPI *SetFocus)(IOleInPlaceSiteWindowless *This,WINBOOL fFocus);")
cpp_quote("      HRESULT (WINAPI *GetDC)(IOleInPlaceSiteWindowless *This,LPCRECT pRect,DWORD grfFlags,HDC *phDC);")
cpp_quote("      HRESULT (WINAPI *ReleaseDC)(IOleInPlaceSiteWindowless *This,HDC hDC);")
cpp_quote("      HRESULT (WINAPI *InvalidateRect)(IOleInPlaceSiteWindowless *This,LPCRECT pRect,WINBOOL fErase);")
cpp_quote("      HRESULT (WINAPI *InvalidateRgn)(IOleInPlaceSiteWindowless *This,HRGN hRGN,WINBOOL fErase);")
cpp_quote("      HRESULT (WINAPI *ScrollRect)(IOleInPlaceSiteWindowless *This,INT dx,INT dy,LPCRECT pRectScroll,LPCRECT pRectClip);")
cpp_quote("      HRESULT (WINAPI *AdjustRect)(IOleInPlaceSiteWindowless *This,LPRECT prc);")
cpp_quote("      HRESULT (WINAPI *OnDefWindowMessage)(IOleInPlaceSiteWindowless *This,UINT msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleInPlaceSiteWindowlessVtbl;")
cpp_quote("  struct IOleInPlaceSiteWindowless {")
cpp_quote("    CONST_VTBL struct IOleInPlaceSiteWindowlessVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleInPlaceSiteWindowless_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleInPlaceSiteWindowless_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleInPlaceSiteWindowless_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleInPlaceSiteWindowless_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)")
cpp_quote("#define IOleInPlaceSiteWindowless_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)")
cpp_quote("#define IOleInPlaceSiteWindowless_CanInPlaceActivate(This) (This)->lpVtbl->CanInPlaceActivate(This)")
cpp_quote("#define IOleInPlaceSiteWindowless_OnInPlaceActivate(This) (This)->lpVtbl->OnInPlaceActivate(This)")
cpp_quote("#define IOleInPlaceSiteWindowless_OnUIActivate(This) (This)->lpVtbl->OnUIActivate(This)")
cpp_quote("#define IOleInPlaceSiteWindowless_GetWindowContext(This,ppFrame,ppDoc,lprcPosRect,lprcClipRect,lpFrameInfo) (This)->lpVtbl->GetWindowContext(This,ppFrame,ppDoc,lprcPosRect,lprcClipRect,lpFrameInfo)")
cpp_quote("#define IOleInPlaceSiteWindowless_Scroll(This,scrollExtant) (This)->lpVtbl->Scroll(This,scrollExtant)")
cpp_quote("#define IOleInPlaceSiteWindowless_OnUIDeactivate(This,fUndoable) (This)->lpVtbl->OnUIDeactivate(This,fUndoable)")
cpp_quote("#define IOleInPlaceSiteWindowless_OnInPlaceDeactivate(This) (This)->lpVtbl->OnInPlaceDeactivate(This)")
cpp_quote("#define IOleInPlaceSiteWindowless_DiscardUndoState(This) (This)->lpVtbl->DiscardUndoState(This)")
cpp_quote("#define IOleInPlaceSiteWindowless_DeactivateAndUndo(This) (This)->lpVtbl->DeactivateAndUndo(This)")
cpp_quote("#define IOleInPlaceSiteWindowless_OnPosRectChange(This,lprcPosRect) (This)->lpVtbl->OnPosRectChange(This,lprcPosRect)")
cpp_quote("#define IOleInPlaceSiteWindowless_OnInPlaceActivateEx(This,pfNoRedraw,dwFlags) (This)->lpVtbl->OnInPlaceActivateEx(This,pfNoRedraw,dwFlags)")
cpp_quote("#define IOleInPlaceSiteWindowless_OnInPlaceDeactivateEx(This,fNoRedraw) (This)->lpVtbl->OnInPlaceDeactivateEx(This,fNoRedraw)")
cpp_quote("#define IOleInPlaceSiteWindowless_RequestUIActivate(This) (This)->lpVtbl->RequestUIActivate(This)")
cpp_quote("#define IOleInPlaceSiteWindowless_CanWindowlessActivate(This) (This)->lpVtbl->CanWindowlessActivate(This)")
cpp_quote("#define IOleInPlaceSiteWindowless_GetCapture(This) (This)->lpVtbl->GetCapture(This)")
cpp_quote("#define IOleInPlaceSiteWindowless_SetCapture(This,fCapture) (This)->lpVtbl->SetCapture(This,fCapture)")
cpp_quote("#define IOleInPlaceSiteWindowless_GetFocus(This) (This)->lpVtbl->GetFocus(This)")
cpp_quote("#define IOleInPlaceSiteWindowless_SetFocus(This,fFocus) (This)->lpVtbl->SetFocus(This,fFocus)")
cpp_quote("#define IOleInPlaceSiteWindowless_GetDC(This,pRect,grfFlags,phDC) (This)->lpVtbl->GetDC(This,pRect,grfFlags,phDC)")
cpp_quote("#define IOleInPlaceSiteWindowless_ReleaseDC(This,hDC) (This)->lpVtbl->ReleaseDC(This,hDC)")
cpp_quote("#define IOleInPlaceSiteWindowless_InvalidateRect(This,pRect,fErase) (This)->lpVtbl->InvalidateRect(This,pRect,fErase)")
cpp_quote("#define IOleInPlaceSiteWindowless_InvalidateRgn(This,hRGN,fErase) (This)->lpVtbl->InvalidateRgn(This,hRGN,fErase)")
cpp_quote("#define IOleInPlaceSiteWindowless_ScrollRect(This,dx,dy,pRectScroll,pRectClip) (This)->lpVtbl->ScrollRect(This,dx,dy,pRectScroll,pRectClip)")
cpp_quote("#define IOleInPlaceSiteWindowless_AdjustRect(This,prc) (This)->lpVtbl->AdjustRect(This,prc)")
cpp_quote("#define IOleInPlaceSiteWindowless_OnDefWindowMessage(This,msg,wParam,lParam,plResult) (This)->lpVtbl->OnDefWindowMessage(This,msg,wParam,lParam,plResult)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteWindowless_CanWindowlessActivate_Proxy(IOleInPlaceSiteWindowless *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteWindowless_CanWindowlessActivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteWindowless_GetCapture_Proxy(IOleInPlaceSiteWindowless *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteWindowless_GetCapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteWindowless_SetCapture_Proxy(IOleInPlaceSiteWindowless *This,WINBOOL fCapture);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteWindowless_SetCapture_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteWindowless_GetFocus_Proxy(IOleInPlaceSiteWindowless *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteWindowless_GetFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteWindowless_SetFocus_Proxy(IOleInPlaceSiteWindowless *This,WINBOOL fFocus);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteWindowless_SetFocus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteWindowless_GetDC_Proxy(IOleInPlaceSiteWindowless *This,LPCRECT pRect,DWORD grfFlags,HDC *phDC);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteWindowless_GetDC_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteWindowless_ReleaseDC_Proxy(IOleInPlaceSiteWindowless *This,HDC hDC);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteWindowless_ReleaseDC_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteWindowless_InvalidateRect_Proxy(IOleInPlaceSiteWindowless *This,LPCRECT pRect,WINBOOL fErase);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteWindowless_InvalidateRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteWindowless_InvalidateRgn_Proxy(IOleInPlaceSiteWindowless *This,HRGN hRGN,WINBOOL fErase);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteWindowless_InvalidateRgn_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteWindowless_ScrollRect_Proxy(IOleInPlaceSiteWindowless *This,INT dx,INT dy,LPCRECT pRectScroll,LPCRECT pRectClip);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteWindowless_ScrollRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteWindowless_AdjustRect_Proxy(IOleInPlaceSiteWindowless *This,LPRECT prc);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteWindowless_AdjustRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSiteWindowless_OnDefWindowMessage_Proxy(IOleInPlaceSiteWindowless *This,UINT msg,WPARAM wParam,LPARAM lParam,LRESULT *plResult);")
cpp_quote("  void __RPC_STUB IOleInPlaceSiteWindowless_OnDefWindowMessage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IViewObjectEx_INTERFACE_DEFINED__")
cpp_quote("#define __IViewObjectEx_INTERFACE_DEFINED__")
cpp_quote("  typedef IViewObjectEx *LPVIEWOBJECTEX;")
cpp_quote("")
cpp_quote("  typedef enum tagVIEWSTATUS {")
cpp_quote("    VIEWSTATUS_OPAQUE = 1,VIEWSTATUS_SOLIDBKGND = 2,VIEWSTATUS_DVASPECTOPAQUE = 4,VIEWSTATUS_DVASPECTTRANSPARENT = 8,VIEWSTATUS_SURFACE = 16,")
cpp_quote("    VIEWSTATUS_3DSURFACE = 32")
cpp_quote("  } VIEWSTATUS;")
cpp_quote("")
cpp_quote("  typedef enum tagHITRESULT {")
cpp_quote("    HITRESULT_OUTSIDE = 0,HITRESULT_TRANSPARENT = 1,HITRESULT_CLOSE = 2,HITRESULT_HIT = 3")
cpp_quote("  } HITRESULT;")
cpp_quote("")
cpp_quote("  typedef enum tagDVASPECT2 {")
cpp_quote("    DVASPECT_OPAQUE = 16,DVASPECT_TRANSPARENT = 32")
cpp_quote("  } DVASPECT2;")
cpp_quote("")
cpp_quote("  typedef struct tagExtentInfo {")
cpp_quote("    ULONG cb;")
cpp_quote("    DWORD dwExtentMode;")
cpp_quote("    SIZEL sizelProposed;")
cpp_quote("  } DVEXTENTINFO;")
cpp_quote("")
cpp_quote("  typedef enum tagExtentMode {")
cpp_quote("    DVEXTENT_CONTENT = 0,DVEXTENT_INTEGRAL = DVEXTENT_CONTENT + 1")
cpp_quote("  } DVEXTENTMODE;")
cpp_quote("")
cpp_quote("  typedef enum tagAspectInfoFlag {")
cpp_quote("    DVASPECTINFOFLAG_CANOPTIMIZE = 1")
cpp_quote("  } DVASPECTINFOFLAG;")
cpp_quote("")
cpp_quote("  typedef struct tagAspectInfo {")
cpp_quote("    ULONG cb;")
cpp_quote("    DWORD dwFlags;")
cpp_quote("  } DVASPECTINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IViewObjectEx;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IViewObjectEx : public IViewObject2 {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetRect(DWORD dwAspect,LPRECTL pRect) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetViewStatus(DWORD *pdwStatus) = 0;")
cpp_quote("    virtual HRESULT WINAPI QueryHitPoint(DWORD dwAspect,LPCRECT pRectBounds,POINT ptlLoc,LONG lCloseHint,DWORD *pHitResult) = 0;")
cpp_quote("    virtual HRESULT WINAPI QueryHitRect(DWORD dwAspect,LPCRECT pRectBounds,LPCRECT pRectLoc,LONG lCloseHint,DWORD *pHitResult) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetNaturalExtent(DWORD dwAspect,LONG lindex,DVTARGETDEVICE *ptd,HDC hicTargetDev,DVEXTENTINFO *pExtentInfo,LPSIZEL pSizel) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IViewObjectExVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IViewObjectEx *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IViewObjectEx *This);")
cpp_quote("      ULONG (WINAPI *Release)(IViewObjectEx *This);")
cpp_quote("      HRESULT (WINAPI *Draw)(IViewObjectEx *This,DWORD dwDrawAspect,LONG lindex,void *pvAspect,DVTARGETDEVICE *ptd,HDC hdcTargetDev,HDC hdcDraw,LPCRECTL lprcBounds,LPCRECTL lprcWBounds,WINBOOL (WINAPI *pfnContinue)(ULONG_PTR dwContinue),ULONG_PTR dwContinue);")
cpp_quote("      HRESULT (WINAPI *GetColorSet)(IViewObjectEx *This,DWORD dwDrawAspect,LONG lindex,void *pvAspect,DVTARGETDEVICE *ptd,HDC hicTargetDev,LOGPALETTE **ppColorSet);")
cpp_quote("      HRESULT (WINAPI *Freeze)(IViewObjectEx *This,DWORD dwDrawAspect,LONG lindex,void *pvAspect,DWORD *pdwFreeze);")
cpp_quote("      HRESULT (WINAPI *Unfreeze)(IViewObjectEx *This,DWORD dwFreeze);")
cpp_quote("      HRESULT (WINAPI *SetAdvise)(IViewObjectEx *This,DWORD aspects,DWORD advf,IAdviseSink *pAdvSink);")
cpp_quote("      HRESULT (WINAPI *GetAdvise)(IViewObjectEx *This,DWORD *pAspects,DWORD *pAdvf,IAdviseSink **ppAdvSink);")
cpp_quote("      HRESULT (WINAPI *GetExtent)(IViewObjectEx *This,DWORD dwDrawAspect,LONG lindex,DVTARGETDEVICE *ptd,LPSIZEL lpsizel);")
cpp_quote("      HRESULT (WINAPI *GetRect)(IViewObjectEx *This,DWORD dwAspect,LPRECTL pRect);")
cpp_quote("      HRESULT (WINAPI *GetViewStatus)(IViewObjectEx *This,DWORD *pdwStatus);")
cpp_quote("      HRESULT (WINAPI *QueryHitPoint)(IViewObjectEx *This,DWORD dwAspect,LPCRECT pRectBounds,POINT ptlLoc,LONG lCloseHint,DWORD *pHitResult);")
cpp_quote("      HRESULT (WINAPI *QueryHitRect)(IViewObjectEx *This,DWORD dwAspect,LPCRECT pRectBounds,LPCRECT pRectLoc,LONG lCloseHint,DWORD *pHitResult);")
cpp_quote("      HRESULT (WINAPI *GetNaturalExtent)(IViewObjectEx *This,DWORD dwAspect,LONG lindex,DVTARGETDEVICE *ptd,HDC hicTargetDev,DVEXTENTINFO *pExtentInfo,LPSIZEL pSizel);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IViewObjectExVtbl;")
cpp_quote("  struct IViewObjectEx {")
cpp_quote("    CONST_VTBL struct IViewObjectExVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IViewObjectEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IViewObjectEx_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IViewObjectEx_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IViewObjectEx_Draw(This,dwDrawAspect,lindex,pvAspect,ptd,hdcTargetDev,hdcDraw,lprcBounds,lprcWBounds,pfnContinue,dwContinue) (This)->lpVtbl->Draw(This,dwDrawAspect,lindex,pvAspect,ptd,hdcTargetDev,hdcDraw,lprcBounds,lprcWBounds,pfnContinue,dwContinue)")
cpp_quote("#define IViewObjectEx_GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet) (This)->lpVtbl->GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet)")
cpp_quote("#define IViewObjectEx_Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze) (This)->lpVtbl->Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze)")
cpp_quote("#define IViewObjectEx_Unfreeze(This,dwFreeze) (This)->lpVtbl->Unfreeze(This,dwFreeze)")
cpp_quote("#define IViewObjectEx_SetAdvise(This,aspects,advf,pAdvSink) (This)->lpVtbl->SetAdvise(This,aspects,advf,pAdvSink)")
cpp_quote("#define IViewObjectEx_GetAdvise(This,pAspects,pAdvf,ppAdvSink) (This)->lpVtbl->GetAdvise(This,pAspects,pAdvf,ppAdvSink)")
cpp_quote("#define IViewObjectEx_GetExtent(This,dwDrawAspect,lindex,ptd,lpsizel) (This)->lpVtbl->GetExtent(This,dwDrawAspect,lindex,ptd,lpsizel)")
cpp_quote("#define IViewObjectEx_GetRect(This,dwAspect,pRect) (This)->lpVtbl->GetRect(This,dwAspect,pRect)")
cpp_quote("#define IViewObjectEx_GetViewStatus(This,pdwStatus) (This)->lpVtbl->GetViewStatus(This,pdwStatus)")
cpp_quote("#define IViewObjectEx_QueryHitPoint(This,dwAspect,pRectBounds,ptlLoc,lCloseHint,pHitResult) (This)->lpVtbl->QueryHitPoint(This,dwAspect,pRectBounds,ptlLoc,lCloseHint,pHitResult)")
cpp_quote("#define IViewObjectEx_QueryHitRect(This,dwAspect,pRectBounds,pRectLoc,lCloseHint,pHitResult) (This)->lpVtbl->QueryHitRect(This,dwAspect,pRectBounds,pRectLoc,lCloseHint,pHitResult)")
cpp_quote("#define IViewObjectEx_GetNaturalExtent(This,dwAspect,lindex,ptd,hicTargetDev,pExtentInfo,pSizel) (This)->lpVtbl->GetNaturalExtent(This,dwAspect,lindex,ptd,hicTargetDev,pExtentInfo,pSizel)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IViewObjectEx_GetRect_Proxy(IViewObjectEx *This,DWORD dwAspect,LPRECTL pRect);")
cpp_quote("  void __RPC_STUB IViewObjectEx_GetRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IViewObjectEx_GetViewStatus_Proxy(IViewObjectEx *This,DWORD *pdwStatus);")
cpp_quote("  void __RPC_STUB IViewObjectEx_GetViewStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IViewObjectEx_QueryHitPoint_Proxy(IViewObjectEx *This,DWORD dwAspect,LPCRECT pRectBounds,POINT ptlLoc,LONG lCloseHint,DWORD *pHitResult);")
cpp_quote("  void __RPC_STUB IViewObjectEx_QueryHitPoint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IViewObjectEx_QueryHitRect_Proxy(IViewObjectEx *This,DWORD dwAspect,LPCRECT pRectBounds,LPCRECT pRectLoc,LONG lCloseHint,DWORD *pHitResult);")
cpp_quote("  void __RPC_STUB IViewObjectEx_QueryHitRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IViewObjectEx_GetNaturalExtent_Proxy(IViewObjectEx *This,DWORD dwAspect,LONG lindex,DVTARGETDEVICE *ptd,HDC hicTargetDev,DVEXTENTINFO *pExtentInfo,LPSIZEL pSizel);")
cpp_quote("  void __RPC_STUB IViewObjectEx_GetNaturalExtent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleUndoUnit_INTERFACE_DEFINED__")
cpp_quote("#define __IOleUndoUnit_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleUndoUnit *LPOLEUNDOUNIT;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleUndoUnit;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleUndoUnit : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Do(IOleUndoManager *pUndoManager) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetDescription(BSTR *pBstr) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetUnitType(CLSID *pClsid,LONG *plID) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnNextAdd(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleUndoUnitVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleUndoUnit *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleUndoUnit *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleUndoUnit *This);")
cpp_quote("      HRESULT (WINAPI *Do)(IOleUndoUnit *This,IOleUndoManager *pUndoManager);")
cpp_quote("      HRESULT (WINAPI *GetDescription)(IOleUndoUnit *This,BSTR *pBstr);")
cpp_quote("      HRESULT (WINAPI *GetUnitType)(IOleUndoUnit *This,CLSID *pClsid,LONG *plID);")
cpp_quote("      HRESULT (WINAPI *OnNextAdd)(IOleUndoUnit *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleUndoUnitVtbl;")
cpp_quote("  struct IOleUndoUnit {")
cpp_quote("    CONST_VTBL struct IOleUndoUnitVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleUndoUnit_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleUndoUnit_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleUndoUnit_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleUndoUnit_Do(This,pUndoManager) (This)->lpVtbl->Do(This,pUndoManager)")
cpp_quote("#define IOleUndoUnit_GetDescription(This,pBstr) (This)->lpVtbl->GetDescription(This,pBstr)")
cpp_quote("#define IOleUndoUnit_GetUnitType(This,pClsid,plID) (This)->lpVtbl->GetUnitType(This,pClsid,plID)")
cpp_quote("#define IOleUndoUnit_OnNextAdd(This) (This)->lpVtbl->OnNextAdd(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleUndoUnit_Do_Proxy(IOleUndoUnit *This,IOleUndoManager *pUndoManager);")
cpp_quote("  void __RPC_STUB IOleUndoUnit_Do_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoUnit_GetDescription_Proxy(IOleUndoUnit *This,BSTR *pBstr);")
cpp_quote("  void __RPC_STUB IOleUndoUnit_GetDescription_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoUnit_GetUnitType_Proxy(IOleUndoUnit *This,CLSID *pClsid,LONG *plID);")
cpp_quote("  void __RPC_STUB IOleUndoUnit_GetUnitType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoUnit_OnNextAdd_Proxy(IOleUndoUnit *This);")
cpp_quote("  void __RPC_STUB IOleUndoUnit_OnNextAdd_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleParentUndoUnit_INTERFACE_DEFINED__")
cpp_quote("#define __IOleParentUndoUnit_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleParentUndoUnit *LPOLEPARENTUNDOUNIT;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleParentUndoUnit;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleParentUndoUnit : public IOleUndoUnit {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Open(IOleParentUndoUnit *pPUU) = 0;")
cpp_quote("    virtual HRESULT WINAPI Close(IOleParentUndoUnit *pPUU,WINBOOL fCommit) = 0;")
cpp_quote("    virtual HRESULT WINAPI Add(IOleUndoUnit *pUU) = 0;")
cpp_quote("    virtual HRESULT WINAPI FindUnit(IOleUndoUnit *pUU) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetParentState(DWORD *pdwState) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleParentUndoUnitVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleParentUndoUnit *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleParentUndoUnit *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleParentUndoUnit *This);")
cpp_quote("      HRESULT (WINAPI *Do)(IOleParentUndoUnit *This,IOleUndoManager *pUndoManager);")
cpp_quote("      HRESULT (WINAPI *GetDescription)(IOleParentUndoUnit *This,BSTR *pBstr);")
cpp_quote("      HRESULT (WINAPI *GetUnitType)(IOleParentUndoUnit *This,CLSID *pClsid,LONG *plID);")
cpp_quote("      HRESULT (WINAPI *OnNextAdd)(IOleParentUndoUnit *This);")
cpp_quote("      HRESULT (WINAPI *Open)(IOleParentUndoUnit *This,IOleParentUndoUnit *pPUU);")
cpp_quote("      HRESULT (WINAPI *Close)(IOleParentUndoUnit *This,IOleParentUndoUnit *pPUU,WINBOOL fCommit);")
cpp_quote("      HRESULT (WINAPI *Add)(IOleParentUndoUnit *This,IOleUndoUnit *pUU);")
cpp_quote("      HRESULT (WINAPI *FindUnit)(IOleParentUndoUnit *This,IOleUndoUnit *pUU);")
cpp_quote("      HRESULT (WINAPI *GetParentState)(IOleParentUndoUnit *This,DWORD *pdwState);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleParentUndoUnitVtbl;")
cpp_quote("  struct IOleParentUndoUnit {")
cpp_quote("    CONST_VTBL struct IOleParentUndoUnitVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleParentUndoUnit_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleParentUndoUnit_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleParentUndoUnit_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleParentUndoUnit_Do(This,pUndoManager) (This)->lpVtbl->Do(This,pUndoManager)")
cpp_quote("#define IOleParentUndoUnit_GetDescription(This,pBstr) (This)->lpVtbl->GetDescription(This,pBstr)")
cpp_quote("#define IOleParentUndoUnit_GetUnitType(This,pClsid,plID) (This)->lpVtbl->GetUnitType(This,pClsid,plID)")
cpp_quote("#define IOleParentUndoUnit_OnNextAdd(This) (This)->lpVtbl->OnNextAdd(This)")
cpp_quote("#define IOleParentUndoUnit_Open(This,pPUU) (This)->lpVtbl->Open(This,pPUU)")
cpp_quote("#define IOleParentUndoUnit_Close(This,pPUU,fCommit) (This)->lpVtbl->Close(This,pPUU,fCommit)")
cpp_quote("#define IOleParentUndoUnit_Add(This,pUU) (This)->lpVtbl->Add(This,pUU)")
cpp_quote("#define IOleParentUndoUnit_FindUnit(This,pUU) (This)->lpVtbl->FindUnit(This,pUU)")
cpp_quote("#define IOleParentUndoUnit_GetParentState(This,pdwState) (This)->lpVtbl->GetParentState(This,pdwState)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleParentUndoUnit_Open_Proxy(IOleParentUndoUnit *This,IOleParentUndoUnit *pPUU);")
cpp_quote("  void __RPC_STUB IOleParentUndoUnit_Open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleParentUndoUnit_Close_Proxy(IOleParentUndoUnit *This,IOleParentUndoUnit *pPUU,WINBOOL fCommit);")
cpp_quote("  void __RPC_STUB IOleParentUndoUnit_Close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleParentUndoUnit_Add_Proxy(IOleParentUndoUnit *This,IOleUndoUnit *pUU);")
cpp_quote("  void __RPC_STUB IOleParentUndoUnit_Add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleParentUndoUnit_FindUnit_Proxy(IOleParentUndoUnit *This,IOleUndoUnit *pUU);")
cpp_quote("  void __RPC_STUB IOleParentUndoUnit_FindUnit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleParentUndoUnit_GetParentState_Proxy(IOleParentUndoUnit *This,DWORD *pdwState);")
cpp_quote("  void __RPC_STUB IOleParentUndoUnit_GetParentState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IEnumOleUndoUnits_INTERFACE_DEFINED__")
cpp_quote("#define __IEnumOleUndoUnits_INTERFACE_DEFINED__")
cpp_quote("  typedef IEnumOleUndoUnits *LPENUMOLEUNDOUNITS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IEnumOleUndoUnits;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IEnumOleUndoUnits : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Next(ULONG cElt,IOleUndoUnit **rgElt,ULONG *pcEltFetched) = 0;")
cpp_quote("    virtual HRESULT WINAPI Skip(ULONG cElt) = 0;")
cpp_quote("    virtual HRESULT WINAPI Reset(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Clone(IEnumOleUndoUnits **ppEnum) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IEnumOleUndoUnitsVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IEnumOleUndoUnits *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IEnumOleUndoUnits *This);")
cpp_quote("      ULONG (WINAPI *Release)(IEnumOleUndoUnits *This);")
cpp_quote("      HRESULT (WINAPI *Next)(IEnumOleUndoUnits *This,ULONG cElt,IOleUndoUnit **rgElt,ULONG *pcEltFetched);")
cpp_quote("      HRESULT (WINAPI *Skip)(IEnumOleUndoUnits *This,ULONG cElt);")
cpp_quote("      HRESULT (WINAPI *Reset)(IEnumOleUndoUnits *This);")
cpp_quote("      HRESULT (WINAPI *Clone)(IEnumOleUndoUnits *This,IEnumOleUndoUnits **ppEnum);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IEnumOleUndoUnitsVtbl;")
cpp_quote("  struct IEnumOleUndoUnits {")
cpp_quote("    CONST_VTBL struct IEnumOleUndoUnitsVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IEnumOleUndoUnits_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IEnumOleUndoUnits_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IEnumOleUndoUnits_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IEnumOleUndoUnits_Next(This,cElt,rgElt,pcEltFetched) (This)->lpVtbl->Next(This,cElt,rgElt,pcEltFetched)")
cpp_quote("#define IEnumOleUndoUnits_Skip(This,cElt) (This)->lpVtbl->Skip(This,cElt)")
cpp_quote("#define IEnumOleUndoUnits_Reset(This) (This)->lpVtbl->Reset(This)")
cpp_quote("#define IEnumOleUndoUnits_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IEnumOleUndoUnits_RemoteNext_Proxy(IEnumOleUndoUnits *This,ULONG cElt,IOleUndoUnit **rgElt,ULONG *pcEltFetched);")
cpp_quote("  void __RPC_STUB IEnumOleUndoUnits_RemoteNext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumOleUndoUnits_Skip_Proxy(IEnumOleUndoUnits *This,ULONG cElt);")
cpp_quote("  void __RPC_STUB IEnumOleUndoUnits_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumOleUndoUnits_Reset_Proxy(IEnumOleUndoUnits *This);")
cpp_quote("  void __RPC_STUB IEnumOleUndoUnits_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumOleUndoUnits_Clone_Proxy(IEnumOleUndoUnits *This,IEnumOleUndoUnits **ppEnum);")
cpp_quote("  void __RPC_STUB IEnumOleUndoUnits_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleUndoManager_INTERFACE_DEFINED__")
cpp_quote("#define __IOleUndoManager_INTERFACE_DEFINED__")
cpp_quote("#define SID_SOleUndoManager IID_IOleUndoManager")
cpp_quote("  typedef IOleUndoManager *LPOLEUNDOMANAGER;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleUndoManager;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleUndoManager : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Open(IOleParentUndoUnit *pPUU) = 0;")
cpp_quote("    virtual HRESULT WINAPI Close(IOleParentUndoUnit *pPUU,WINBOOL fCommit) = 0;")
cpp_quote("    virtual HRESULT WINAPI Add(IOleUndoUnit *pUU) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetOpenParentState(DWORD *pdwState) = 0;")
cpp_quote("    virtual HRESULT WINAPI DiscardFrom(IOleUndoUnit *pUU) = 0;")
cpp_quote("    virtual HRESULT WINAPI UndoTo(IOleUndoUnit *pUU) = 0;")
cpp_quote("    virtual HRESULT WINAPI RedoTo(IOleUndoUnit *pUU) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnumUndoable(IEnumOleUndoUnits **ppEnum) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnumRedoable(IEnumOleUndoUnits **ppEnum) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetLastUndoDescription(BSTR *pBstr) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetLastRedoDescription(BSTR *pBstr) = 0;")
cpp_quote("    virtual HRESULT WINAPI Enable(WINBOOL fEnable) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleUndoManagerVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleUndoManager *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleUndoManager *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleUndoManager *This);")
cpp_quote("      HRESULT (WINAPI *Open)(IOleUndoManager *This,IOleParentUndoUnit *pPUU);")
cpp_quote("      HRESULT (WINAPI *Close)(IOleUndoManager *This,IOleParentUndoUnit *pPUU,WINBOOL fCommit);")
cpp_quote("      HRESULT (WINAPI *Add)(IOleUndoManager *This,IOleUndoUnit *pUU);")
cpp_quote("      HRESULT (WINAPI *GetOpenParentState)(IOleUndoManager *This,DWORD *pdwState);")
cpp_quote("      HRESULT (WINAPI *DiscardFrom)(IOleUndoManager *This,IOleUndoUnit *pUU);")
cpp_quote("      HRESULT (WINAPI *UndoTo)(IOleUndoManager *This,IOleUndoUnit *pUU);")
cpp_quote("      HRESULT (WINAPI *RedoTo)(IOleUndoManager *This,IOleUndoUnit *pUU);")
cpp_quote("      HRESULT (WINAPI *EnumUndoable)(IOleUndoManager *This,IEnumOleUndoUnits **ppEnum);")
cpp_quote("      HRESULT (WINAPI *EnumRedoable)(IOleUndoManager *This,IEnumOleUndoUnits **ppEnum);")
cpp_quote("      HRESULT (WINAPI *GetLastUndoDescription)(IOleUndoManager *This,BSTR *pBstr);")
cpp_quote("      HRESULT (WINAPI *GetLastRedoDescription)(IOleUndoManager *This,BSTR *pBstr);")
cpp_quote("      HRESULT (WINAPI *Enable)(IOleUndoManager *This,WINBOOL fEnable);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleUndoManagerVtbl;")
cpp_quote("  struct IOleUndoManager {")
cpp_quote("    CONST_VTBL struct IOleUndoManagerVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleUndoManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleUndoManager_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleUndoManager_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleUndoManager_Open(This,pPUU) (This)->lpVtbl->Open(This,pPUU)")
cpp_quote("#define IOleUndoManager_Close(This,pPUU,fCommit) (This)->lpVtbl->Close(This,pPUU,fCommit)")
cpp_quote("#define IOleUndoManager_Add(This,pUU) (This)->lpVtbl->Add(This,pUU)")
cpp_quote("#define IOleUndoManager_GetOpenParentState(This,pdwState) (This)->lpVtbl->GetOpenParentState(This,pdwState)")
cpp_quote("#define IOleUndoManager_DiscardFrom(This,pUU) (This)->lpVtbl->DiscardFrom(This,pUU)")
cpp_quote("#define IOleUndoManager_UndoTo(This,pUU) (This)->lpVtbl->UndoTo(This,pUU)")
cpp_quote("#define IOleUndoManager_RedoTo(This,pUU) (This)->lpVtbl->RedoTo(This,pUU)")
cpp_quote("#define IOleUndoManager_EnumUndoable(This,ppEnum) (This)->lpVtbl->EnumUndoable(This,ppEnum)")
cpp_quote("#define IOleUndoManager_EnumRedoable(This,ppEnum) (This)->lpVtbl->EnumRedoable(This,ppEnum)")
cpp_quote("#define IOleUndoManager_GetLastUndoDescription(This,pBstr) (This)->lpVtbl->GetLastUndoDescription(This,pBstr)")
cpp_quote("#define IOleUndoManager_GetLastRedoDescription(This,pBstr) (This)->lpVtbl->GetLastRedoDescription(This,pBstr)")
cpp_quote("#define IOleUndoManager_Enable(This,fEnable) (This)->lpVtbl->Enable(This,fEnable)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleUndoManager_Open_Proxy(IOleUndoManager *This,IOleParentUndoUnit *pPUU);")
cpp_quote("  void __RPC_STUB IOleUndoManager_Open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoManager_Close_Proxy(IOleUndoManager *This,IOleParentUndoUnit *pPUU,WINBOOL fCommit);")
cpp_quote("  void __RPC_STUB IOleUndoManager_Close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoManager_Add_Proxy(IOleUndoManager *This,IOleUndoUnit *pUU);")
cpp_quote("  void __RPC_STUB IOleUndoManager_Add_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoManager_GetOpenParentState_Proxy(IOleUndoManager *This,DWORD *pdwState);")
cpp_quote("  void __RPC_STUB IOleUndoManager_GetOpenParentState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoManager_DiscardFrom_Proxy(IOleUndoManager *This,IOleUndoUnit *pUU);")
cpp_quote("  void __RPC_STUB IOleUndoManager_DiscardFrom_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoManager_UndoTo_Proxy(IOleUndoManager *This,IOleUndoUnit *pUU);")
cpp_quote("  void __RPC_STUB IOleUndoManager_UndoTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoManager_RedoTo_Proxy(IOleUndoManager *This,IOleUndoUnit *pUU);")
cpp_quote("  void __RPC_STUB IOleUndoManager_RedoTo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoManager_EnumUndoable_Proxy(IOleUndoManager *This,IEnumOleUndoUnits **ppEnum);")
cpp_quote("  void __RPC_STUB IOleUndoManager_EnumUndoable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoManager_EnumRedoable_Proxy(IOleUndoManager *This,IEnumOleUndoUnits **ppEnum);")
cpp_quote("  void __RPC_STUB IOleUndoManager_EnumRedoable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoManager_GetLastUndoDescription_Proxy(IOleUndoManager *This,BSTR *pBstr);")
cpp_quote("  void __RPC_STUB IOleUndoManager_GetLastUndoDescription_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoManager_GetLastRedoDescription_Proxy(IOleUndoManager *This,BSTR *pBstr);")
cpp_quote("  void __RPC_STUB IOleUndoManager_GetLastRedoDescription_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleUndoManager_Enable_Proxy(IOleUndoManager *This,WINBOOL fEnable);")
cpp_quote("  void __RPC_STUB IOleUndoManager_Enable_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPointerInactive_INTERFACE_DEFINED__")
cpp_quote("#define __IPointerInactive_INTERFACE_DEFINED__")
cpp_quote("  typedef IPointerInactive *LPPOINTERINACTIVE;")
cpp_quote("")
cpp_quote("  typedef enum tagPOINTERINACTIVE {")
cpp_quote("    POINTERINACTIVE_ACTIVATEONENTRY = 1,POINTERINACTIVE_DEACTIVATEONLEAVE = 2,POINTERINACTIVE_ACTIVATEONDRAG = 4")
cpp_quote("  } POINTERINACTIVE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPointerInactive;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPointerInactive : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetActivationPolicy(DWORD *pdwPolicy) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnInactiveMouseMove(LPCRECT pRectBounds,LONG x,LONG y,DWORD grfKeyState) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnInactiveSetCursor(LPCRECT pRectBounds,LONG x,LONG y,DWORD dwMouseMsg,WINBOOL fSetAlways) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPointerInactiveVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPointerInactive *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPointerInactive *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPointerInactive *This);")
cpp_quote("      HRESULT (WINAPI *GetActivationPolicy)(IPointerInactive *This,DWORD *pdwPolicy);")
cpp_quote("      HRESULT (WINAPI *OnInactiveMouseMove)(IPointerInactive *This,LPCRECT pRectBounds,LONG x,LONG y,DWORD grfKeyState);")
cpp_quote("      HRESULT (WINAPI *OnInactiveSetCursor)(IPointerInactive *This,LPCRECT pRectBounds,LONG x,LONG y,DWORD dwMouseMsg,WINBOOL fSetAlways);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPointerInactiveVtbl;")
cpp_quote("  struct IPointerInactive {")
cpp_quote("    CONST_VTBL struct IPointerInactiveVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPointerInactive_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPointerInactive_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPointerInactive_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPointerInactive_GetActivationPolicy(This,pdwPolicy) (This)->lpVtbl->GetActivationPolicy(This,pdwPolicy)")
cpp_quote("#define IPointerInactive_OnInactiveMouseMove(This,pRectBounds,x,y,grfKeyState) (This)->lpVtbl->OnInactiveMouseMove(This,pRectBounds,x,y,grfKeyState)")
cpp_quote("#define IPointerInactive_OnInactiveSetCursor(This,pRectBounds,x,y,dwMouseMsg,fSetAlways) (This)->lpVtbl->OnInactiveSetCursor(This,pRectBounds,x,y,dwMouseMsg,fSetAlways)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPointerInactive_GetActivationPolicy_Proxy(IPointerInactive *This,DWORD *pdwPolicy);")
cpp_quote("  void __RPC_STUB IPointerInactive_GetActivationPolicy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPointerInactive_OnInactiveMouseMove_Proxy(IPointerInactive *This,LPCRECT pRectBounds,LONG x,LONG y,DWORD grfKeyState);")
cpp_quote("  void __RPC_STUB IPointerInactive_OnInactiveMouseMove_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPointerInactive_OnInactiveSetCursor_Proxy(IPointerInactive *This,LPCRECT pRectBounds,LONG x,LONG y,DWORD dwMouseMsg,WINBOOL fSetAlways);")
cpp_quote("  void __RPC_STUB IPointerInactive_OnInactiveSetCursor_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IObjectWithSite_INTERFACE_DEFINED__")
cpp_quote("#define __IObjectWithSite_INTERFACE_DEFINED__")
cpp_quote("  typedef IObjectWithSite *LPOBJECTWITHSITE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IObjectWithSite;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IObjectWithSite : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetSite(IUnknown *pUnkSite) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetSite(REFIID riid,void **ppvSite) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IObjectWithSiteVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IObjectWithSite *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IObjectWithSite *This);")
cpp_quote("      ULONG (WINAPI *Release)(IObjectWithSite *This);")
cpp_quote("      HRESULT (WINAPI *SetSite)(IObjectWithSite *This,IUnknown *pUnkSite);")
cpp_quote("      HRESULT (WINAPI *GetSite)(IObjectWithSite *This,REFIID riid,void **ppvSite);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IObjectWithSiteVtbl;")
cpp_quote("  struct IObjectWithSite {")
cpp_quote("    CONST_VTBL struct IObjectWithSiteVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IObjectWithSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IObjectWithSite_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IObjectWithSite_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IObjectWithSite_SetSite(This,pUnkSite) (This)->lpVtbl->SetSite(This,pUnkSite)")
cpp_quote("#define IObjectWithSite_GetSite(This,riid,ppvSite) (This)->lpVtbl->GetSite(This,riid,ppvSite)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IObjectWithSite_SetSite_Proxy(IObjectWithSite *This,IUnknown *pUnkSite);")
cpp_quote("  void __RPC_STUB IObjectWithSite_SetSite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IObjectWithSite_GetSite_Proxy(IObjectWithSite *This,REFIID riid,void **ppvSite);")
cpp_quote("  void __RPC_STUB IObjectWithSite_GetSite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPerPropertyBrowsing_INTERFACE_DEFINED__")
cpp_quote("#define __IPerPropertyBrowsing_INTERFACE_DEFINED__")
cpp_quote("  typedef IPerPropertyBrowsing *LPPERPROPERTYBROWSING;")
cpp_quote("")
cpp_quote("  typedef struct tagCALPOLESTR {")
cpp_quote("    ULONG cElems;")
cpp_quote("    LPOLESTR *pElems;")
cpp_quote("  } CALPOLESTR;")
cpp_quote("")
cpp_quote("  typedef struct tagCALPOLESTR *LPCALPOLESTR;")
cpp_quote("")
cpp_quote("  typedef struct tagCADWORD {")
cpp_quote("    ULONG cElems;")
cpp_quote("    DWORD *pElems;")
cpp_quote("  } CADWORD;")
cpp_quote("")
cpp_quote("  typedef struct tagCADWORD *LPCADWORD;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPerPropertyBrowsing;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPerPropertyBrowsing : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetDisplayString(DISPID dispID,BSTR *pBstr) = 0;")
cpp_quote("    virtual HRESULT WINAPI MapPropertyToPage(DISPID dispID,CLSID *pClsid) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetPredefinedStrings(DISPID dispID,CALPOLESTR *pCaStringsOut,CADWORD *pCaCookiesOut) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetPredefinedValue(DISPID dispID,DWORD dwCookie,VARIANT *pVarOut) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPerPropertyBrowsingVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPerPropertyBrowsing *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPerPropertyBrowsing *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPerPropertyBrowsing *This);")
cpp_quote("      HRESULT (WINAPI *GetDisplayString)(IPerPropertyBrowsing *This,DISPID dispID,BSTR *pBstr);")
cpp_quote("      HRESULT (WINAPI *MapPropertyToPage)(IPerPropertyBrowsing *This,DISPID dispID,CLSID *pClsid);")
cpp_quote("      HRESULT (WINAPI *GetPredefinedStrings)(IPerPropertyBrowsing *This,DISPID dispID,CALPOLESTR *pCaStringsOut,CADWORD *pCaCookiesOut);")
cpp_quote("      HRESULT (WINAPI *GetPredefinedValue)(IPerPropertyBrowsing *This,DISPID dispID,DWORD dwCookie,VARIANT *pVarOut);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPerPropertyBrowsingVtbl;")
cpp_quote("  struct IPerPropertyBrowsing {")
cpp_quote("    CONST_VTBL struct IPerPropertyBrowsingVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPerPropertyBrowsing_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPerPropertyBrowsing_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPerPropertyBrowsing_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPerPropertyBrowsing_GetDisplayString(This,dispID,pBstr) (This)->lpVtbl->GetDisplayString(This,dispID,pBstr)")
cpp_quote("#define IPerPropertyBrowsing_MapPropertyToPage(This,dispID,pClsid) (This)->lpVtbl->MapPropertyToPage(This,dispID,pClsid)")
cpp_quote("#define IPerPropertyBrowsing_GetPredefinedStrings(This,dispID,pCaStringsOut,pCaCookiesOut) (This)->lpVtbl->GetPredefinedStrings(This,dispID,pCaStringsOut,pCaCookiesOut)")
cpp_quote("#define IPerPropertyBrowsing_GetPredefinedValue(This,dispID,dwCookie,pVarOut) (This)->lpVtbl->GetPredefinedValue(This,dispID,dwCookie,pVarOut)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPerPropertyBrowsing_GetDisplayString_Proxy(IPerPropertyBrowsing *This,DISPID dispID,BSTR *pBstr);")
cpp_quote("  void __RPC_STUB IPerPropertyBrowsing_GetDisplayString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPerPropertyBrowsing_MapPropertyToPage_Proxy(IPerPropertyBrowsing *This,DISPID dispID,CLSID *pClsid);")
cpp_quote("  void __RPC_STUB IPerPropertyBrowsing_MapPropertyToPage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPerPropertyBrowsing_GetPredefinedStrings_Proxy(IPerPropertyBrowsing *This,DISPID dispID,CALPOLESTR *pCaStringsOut,CADWORD *pCaCookiesOut);")
cpp_quote("  void __RPC_STUB IPerPropertyBrowsing_GetPredefinedStrings_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPerPropertyBrowsing_GetPredefinedValue_Proxy(IPerPropertyBrowsing *This,DISPID dispID,DWORD dwCookie,VARIANT *pVarOut);")
cpp_quote("  void __RPC_STUB IPerPropertyBrowsing_GetPredefinedValue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")

[
    object,
    uuid(22f55882-280b-11d0-a8a9-00a0c90c2004),
    pointer_default(unique)
]
interface IPropertyBag2 : IUnknown
{
    typedef IPropertyBag2 *LPPROPERTYBAG2;

    typedef [v1_enum] enum tagPROPBAG2_TYPE {
        PROPBAG2_TYPE_UNDEFINED  = 0,
        PROPBAG2_TYPE_DATA       = 1,
        PROPBAG2_TYPE_URL        = 2,
        PROPBAG2_TYPE_OBJECT     = 3,
        PROPBAG2_TYPE_STREAM     = 4,
        PROPBAG2_TYPE_STORAGE    = 5,
        PROPBAG2_TYPE_MONIKER    = 6
    } PROPBAG2_TYPE;

    typedef struct tagPROPBAG2 {
        DWORD dwType;
        VARTYPE vt;
        CLIPFORMAT cfType;
        DWORD dwHint;
        LPOLESTR pstrName;
        CLSID clsid;
    } PROPBAG2;

    HRESULT Read(
            [in] ULONG cProperties,
            [in, size_is(cProperties)] PROPBAG2 *pPropBag,
            [in, unique] IErrorLog *pErrLog,
            [out, size_is(cProperties)] VARIANT *pvarValue,
            [in, out, unique, size_is(cProperties)] HRESULT *phrError);

    HRESULT Write(
            [in] ULONG cProperties,
            [in, size_is(cProperties)] PROPBAG2 *pPropBag,
            [in, size_is(cProperties)] VARIANT *pvarValue);

    HRESULT CountProperties([out] ULONG *pcProperties);

    HRESULT GetPropertyInfo(
            [in] ULONG iProperty,
            [in] ULONG cProperties,
            [out, size_is(cProperties)] PROPBAG2 *pPropBag,
            [out] ULONG *pcProperties);

    HRESULT LoadObject(
            [in] LPCOLESTR pstrName,
            [in] DWORD dwHint,
            [in] IUnknown *pUnkObject,
            [in, unique] IErrorLog *pErrLog);
}

cpp_quote("#ifndef __IPersistPropertyBag2_INTERFACE_DEFINED__")
cpp_quote("#define __IPersistPropertyBag2_INTERFACE_DEFINED__")
cpp_quote("  typedef IPersistPropertyBag2 *LPPERSISTPROPERTYBAG2;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPersistPropertyBag2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPersistPropertyBag2 : public IPersist {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI InitNew(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Load(IPropertyBag2 *pPropBag,IErrorLog *pErrLog) = 0;")
cpp_quote("    virtual HRESULT WINAPI Save(IPropertyBag2 *pPropBag,WINBOOL fClearDirty,WINBOOL fSaveAllProperties) = 0;")
cpp_quote("    virtual HRESULT WINAPI IsDirty(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPersistPropertyBag2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPersistPropertyBag2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPersistPropertyBag2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPersistPropertyBag2 *This);")
cpp_quote("      HRESULT (WINAPI *GetClassID)(IPersistPropertyBag2 *This,CLSID *pClassID);")
cpp_quote("      HRESULT (WINAPI *InitNew)(IPersistPropertyBag2 *This);")
cpp_quote("      HRESULT (WINAPI *Load)(IPersistPropertyBag2 *This,IPropertyBag2 *pPropBag,IErrorLog *pErrLog);")
cpp_quote("      HRESULT (WINAPI *Save)(IPersistPropertyBag2 *This,IPropertyBag2 *pPropBag,WINBOOL fClearDirty,WINBOOL fSaveAllProperties);")
cpp_quote("      HRESULT (WINAPI *IsDirty)(IPersistPropertyBag2 *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPersistPropertyBag2Vtbl;")
cpp_quote("  struct IPersistPropertyBag2 {")
cpp_quote("    CONST_VTBL struct IPersistPropertyBag2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPersistPropertyBag2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPersistPropertyBag2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPersistPropertyBag2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPersistPropertyBag2_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)")
cpp_quote("#define IPersistPropertyBag2_InitNew(This) (This)->lpVtbl->InitNew(This)")
cpp_quote("#define IPersistPropertyBag2_Load(This,pPropBag,pErrLog) (This)->lpVtbl->Load(This,pPropBag,pErrLog)")
cpp_quote("#define IPersistPropertyBag2_Save(This,pPropBag,fClearDirty,fSaveAllProperties) (This)->lpVtbl->Save(This,pPropBag,fClearDirty,fSaveAllProperties)")
cpp_quote("#define IPersistPropertyBag2_IsDirty(This) (This)->lpVtbl->IsDirty(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPersistPropertyBag2_InitNew_Proxy(IPersistPropertyBag2 *This);")
cpp_quote("  void __RPC_STUB IPersistPropertyBag2_InitNew_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistPropertyBag2_Load_Proxy(IPersistPropertyBag2 *This,IPropertyBag2 *pPropBag,IErrorLog *pErrLog);")
cpp_quote("  void __RPC_STUB IPersistPropertyBag2_Load_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistPropertyBag2_Save_Proxy(IPersistPropertyBag2 *This,IPropertyBag2 *pPropBag,WINBOOL fClearDirty,WINBOOL fSaveAllProperties);")
cpp_quote("  void __RPC_STUB IPersistPropertyBag2_Save_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPersistPropertyBag2_IsDirty_Proxy(IPersistPropertyBag2 *This);")
cpp_quote("  void __RPC_STUB IPersistPropertyBag2_IsDirty_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IAdviseSinkEx_INTERFACE_DEFINED__")
cpp_quote("#define __IAdviseSinkEx_INTERFACE_DEFINED__")
cpp_quote("  typedef IAdviseSinkEx *LPADVISESINKEX;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IAdviseSinkEx;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IAdviseSinkEx : public IAdviseSink {")
cpp_quote("  public:")
cpp_quote("    virtual void WINAPI OnViewStatusChange(DWORD dwViewStatus) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IAdviseSinkExVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IAdviseSinkEx *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IAdviseSinkEx *This);")
cpp_quote("      ULONG (WINAPI *Release)(IAdviseSinkEx *This);")
cpp_quote("      void (WINAPI *OnDataChange)(IAdviseSinkEx *This,FORMATETC *pFormatetc,STGMEDIUM *pStgmed);")
cpp_quote("      void (WINAPI *OnViewChange)(IAdviseSinkEx *This,DWORD dwAspect,LONG lindex);")
cpp_quote("      void (WINAPI *OnRename)(IAdviseSinkEx *This,IMoniker *pmk);")
cpp_quote("      void (WINAPI *OnSave)(IAdviseSinkEx *This);")
cpp_quote("      void (WINAPI *OnClose)(IAdviseSinkEx *This);")
cpp_quote("      void (WINAPI *OnViewStatusChange)(IAdviseSinkEx *This,DWORD dwViewStatus);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IAdviseSinkExVtbl;")
cpp_quote("  struct IAdviseSinkEx {")
cpp_quote("    CONST_VTBL struct IAdviseSinkExVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IAdviseSinkEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IAdviseSinkEx_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IAdviseSinkEx_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IAdviseSinkEx_OnDataChange(This,pFormatetc,pStgmed) (This)->lpVtbl->OnDataChange(This,pFormatetc,pStgmed)")
cpp_quote("#define IAdviseSinkEx_OnViewChange(This,dwAspect,lindex) (This)->lpVtbl->OnViewChange(This,dwAspect,lindex)")
cpp_quote("#define IAdviseSinkEx_OnRename(This,pmk) (This)->lpVtbl->OnRename(This,pmk)")
cpp_quote("#define IAdviseSinkEx_OnSave(This) (This)->lpVtbl->OnSave(This)")
cpp_quote("#define IAdviseSinkEx_OnClose(This) (This)->lpVtbl->OnClose(This)")
cpp_quote("#define IAdviseSinkEx_OnViewStatusChange(This,dwViewStatus) (This)->lpVtbl->OnViewStatusChange(This,dwViewStatus)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IAdviseSinkEx_RemoteOnViewStatusChange_Proxy(IAdviseSinkEx *This,DWORD dwViewStatus);")
cpp_quote("  void __RPC_STUB IAdviseSinkEx_RemoteOnViewStatusChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IQuickActivate_INTERFACE_DEFINED__")
cpp_quote("#define __IQuickActivate_INTERFACE_DEFINED__")
cpp_quote("  typedef IQuickActivate *LPQUICKACTIVATE;")
cpp_quote("")
cpp_quote("  typedef enum tagQACONTAINERFLAGS {")
cpp_quote("    QACONTAINER_SHOWHATCHING = 0x1,QACONTAINER_SHOWGRABHANDLES = 0x2,QACONTAINER_USERMODE = 0x4,QACONTAINER_DISPLAYASDEFAULT = 0x8,")
cpp_quote("    QACONTAINER_UIDEAD = 0x10,QACONTAINER_AUTOCLIP = 0x20,QACONTAINER_MESSAGEREFLECT = 0x40,QACONTAINER_SUPPORTSMNEMONICS = 0x80")
cpp_quote("  } QACONTAINERFLAGS;")
cpp_quote("")
cpp_quote("  typedef DWORD OLE_COLOR;")
cpp_quote("")
cpp_quote("  typedef struct tagQACONTAINER {")
cpp_quote("    ULONG cbSize;")
cpp_quote("    IOleClientSite *pClientSite;")
cpp_quote("    IAdviseSinkEx *pAdviseSink;")
cpp_quote("    IPropertyNotifySink *pPropertyNotifySink;")
cpp_quote("    IUnknown *pUnkEventSink;")
cpp_quote("    DWORD dwAmbientFlags;")
cpp_quote("    OLE_COLOR colorFore;")
cpp_quote("    OLE_COLOR colorBack;")
cpp_quote("    IFont *pFont;")
cpp_quote("    IOleUndoManager *pUndoMgr;")
cpp_quote("    DWORD dwAppearance;")
cpp_quote("    LONG lcid;")
cpp_quote("    HPALETTE hpal;")
cpp_quote("    IBindHost *pBindHost;")
cpp_quote("    IOleControlSite *pOleControlSite;")
cpp_quote("    IServiceProvider *pServiceProvider;")
cpp_quote("  } QACONTAINER;")
cpp_quote("")
cpp_quote("  typedef struct tagQACONTROL {")
cpp_quote("    ULONG cbSize;")
cpp_quote("    DWORD dwMiscStatus;")
cpp_quote("    DWORD dwViewStatus;")
cpp_quote("    DWORD dwEventCookie;")
cpp_quote("    DWORD dwPropNotifyCookie;")
cpp_quote("    DWORD dwPointerActivationPolicy;")
cpp_quote("  } QACONTROL;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IQuickActivate;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IQuickActivate : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI QuickActivate(QACONTAINER *pQaContainer,QACONTROL *pQaControl) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetContentExtent(LPSIZEL pSizel) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetContentExtent(LPSIZEL pSizel) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IQuickActivateVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IQuickActivate *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IQuickActivate *This);")
cpp_quote("      ULONG (WINAPI *Release)(IQuickActivate *This);")
cpp_quote("      HRESULT (WINAPI *QuickActivate)(IQuickActivate *This,QACONTAINER *pQaContainer,QACONTROL *pQaControl);")
cpp_quote("      HRESULT (WINAPI *SetContentExtent)(IQuickActivate *This,LPSIZEL pSizel);")
cpp_quote("      HRESULT (WINAPI *GetContentExtent)(IQuickActivate *This,LPSIZEL pSizel);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IQuickActivateVtbl;")
cpp_quote("  struct IQuickActivate {")
cpp_quote("    CONST_VTBL struct IQuickActivateVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IQuickActivate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IQuickActivate_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IQuickActivate_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IQuickActivate_QuickActivate(This,pQaContainer,pQaControl) (This)->lpVtbl->QuickActivate(This,pQaContainer,pQaControl)")
cpp_quote("#define IQuickActivate_SetContentExtent(This,pSizel) (This)->lpVtbl->SetContentExtent(This,pSizel)")
cpp_quote("#define IQuickActivate_GetContentExtent(This,pSizel) (This)->lpVtbl->GetContentExtent(This,pSizel)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IQuickActivate_RemoteQuickActivate_Proxy(IQuickActivate *This,QACONTAINER *pQaContainer,QACONTROL *pQaControl);")
cpp_quote("  void __RPC_STUB IQuickActivate_RemoteQuickActivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IQuickActivate_SetContentExtent_Proxy(IQuickActivate *This,LPSIZEL pSizel);")
cpp_quote("  void __RPC_STUB IQuickActivate_SetContentExtent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IQuickActivate_GetContentExtent_Proxy(IQuickActivate *This,LPSIZEL pSizel);")
cpp_quote("  void __RPC_STUB IQuickActivate_GetContentExtent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  unsigned long __RPC_API BSTR_UserSize(unsigned long *,unsigned long,BSTR *);")
cpp_quote("  unsigned char *__RPC_API BSTR_UserMarshal(unsigned long *,unsigned char *,BSTR *);")
cpp_quote("  unsigned char *__RPC_API BSTR_UserUnmarshal(unsigned long *,unsigned char *,BSTR *);")
cpp_quote("  void __RPC_API BSTR_UserFree(unsigned long *,BSTR *);")
cpp_quote("  unsigned long __RPC_API HACCEL_UserSize(unsigned long *,unsigned long,HACCEL *);")
cpp_quote("  unsigned char *__RPC_API HACCEL_UserMarshal(unsigned long *,unsigned char *,HACCEL *);")
cpp_quote("  unsigned char *__RPC_API HACCEL_UserUnmarshal(unsigned long *,unsigned char *,HACCEL *);")
cpp_quote("  void __RPC_API HACCEL_UserFree(unsigned long *,HACCEL *);")
cpp_quote("  unsigned long __RPC_API HDC_UserSize(unsigned long *,unsigned long,HDC *);")
cpp_quote("  unsigned char *__RPC_API HDC_UserMarshal(unsigned long *,unsigned char *,HDC *);")
cpp_quote("  unsigned char *__RPC_API HDC_UserUnmarshal(unsigned long *,unsigned char *,HDC *);")
cpp_quote("  void __RPC_API HDC_UserFree(unsigned long *,HDC *);")
cpp_quote("  unsigned long __RPC_API HFONT_UserSize(unsigned long *,unsigned long,HFONT *);")
cpp_quote("  unsigned char *__RPC_API HFONT_UserMarshal(unsigned long *,unsigned char *,HFONT *);")
cpp_quote("  unsigned char *__RPC_API HFONT_UserUnmarshal(unsigned long *,unsigned char *,HFONT *);")
cpp_quote("  void __RPC_API HFONT_UserFree(unsigned long *,HFONT *);")
cpp_quote("  unsigned long __RPC_API HPALETTE_UserSize(unsigned long *,unsigned long,HPALETTE *);")
cpp_quote("  unsigned char *__RPC_API HPALETTE_UserMarshal(unsigned long *,unsigned char *,HPALETTE *);")
cpp_quote("  unsigned char *__RPC_API HPALETTE_UserUnmarshal(unsigned long *,unsigned char *,HPALETTE *);")
cpp_quote("  void __RPC_API HPALETTE_UserFree(unsigned long *,HPALETTE *);")
cpp_quote("  unsigned long __RPC_API HWND_UserSize(unsigned long *,unsigned long,HWND *);")
cpp_quote("  unsigned char *__RPC_API HWND_UserMarshal(unsigned long *,unsigned char *,HWND *);")
cpp_quote("  unsigned char *__RPC_API HWND_UserUnmarshal(unsigned long *,unsigned char *,HWND *);")
cpp_quote("  void __RPC_API HWND_UserFree(unsigned long *,HWND *);")
cpp_quote("")
cpp_quote("  HRESULT WINAPI IEnumConnections_Next_Proxy(IEnumConnections *This,ULONG cConnections,LPCONNECTDATA rgcd,ULONG *pcFetched);")
cpp_quote("  HRESULT WINAPI IEnumConnections_Next_Stub(IEnumConnections *This,ULONG cConnections,LPCONNECTDATA rgcd,ULONG *pcFetched);")
cpp_quote("  HRESULT WINAPI IEnumConnectionPoints_Next_Proxy(IEnumConnectionPoints *This,ULONG cConnections,LPCONNECTIONPOINT *ppCP,ULONG *pcFetched);")
cpp_quote("  HRESULT WINAPI IEnumConnectionPoints_Next_Stub(IEnumConnectionPoints *This,ULONG cConnections,LPCONNECTIONPOINT *ppCP,ULONG *pcFetched);")
cpp_quote("  HRESULT WINAPI IClassFactory2_CreateInstanceLic_Proxy(IClassFactory2 *This,IUnknown *pUnkOuter,IUnknown *pUnkReserved,REFIID riid,BSTR bstrKey,PVOID *ppvObj);")
cpp_quote("  HRESULT WINAPI IClassFactory2_CreateInstanceLic_Stub(IClassFactory2 *This,REFIID riid,BSTR bstrKey,IUnknown **ppvObj);")
cpp_quote("  HRESULT WINAPI IPersistMemory_Load_Proxy(IPersistMemory *This,LPVOID pMem,ULONG cbSize);")
cpp_quote("  HRESULT WINAPI IPersistMemory_Load_Stub(IPersistMemory *This,BYTE *pMem,ULONG cbSize);")
cpp_quote("  HRESULT WINAPI IPersistMemory_Save_Proxy(IPersistMemory *This,LPVOID pMem,WINBOOL fClearDirty,ULONG cbSize);")
cpp_quote("  HRESULT WINAPI IPersistMemory_Save_Stub(IPersistMemory *This,BYTE *pMem,WINBOOL fClearDirty,ULONG cbSize);")
cpp_quote("  HRESULT WINAPI IEnumOleUndoUnits_Next_Proxy(IEnumOleUndoUnits *This,ULONG cElt,IOleUndoUnit **rgElt,ULONG *pcEltFetched);")
cpp_quote("  HRESULT WINAPI IEnumOleUndoUnits_Next_Stub(IEnumOleUndoUnits *This,ULONG cElt,IOleUndoUnit **rgElt,ULONG *pcEltFetched);")
cpp_quote("  void WINAPI IAdviseSinkEx_OnViewStatusChange_Proxy(IAdviseSinkEx *This,DWORD dwViewStatus);")
cpp_quote("  HRESULT WINAPI IAdviseSinkEx_OnViewStatusChange_Stub(IAdviseSinkEx *This,DWORD dwViewStatus);")
cpp_quote("  HRESULT WINAPI IQuickActivate_QuickActivate_Proxy(IQuickActivate *This,QACONTAINER *pQaContainer,QACONTROL *pQaControl);")
cpp_quote("  HRESULT WINAPI IQuickActivate_QuickActivate_Stub(IQuickActivate *This,QACONTAINER *pQaContainer,QACONTROL *pQaControl);")
