/**
 * 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 "ocidl.idl";
import "objidl.idl";
import "oleidl.idl";
import "oaidl.idl";
//import "servprov.idl";

cpp_quote("#ifndef __IOleDocument_FWD_DEFINED__")
cpp_quote("#define __IOleDocument_FWD_DEFINED__")
cpp_quote("typedef struct IOleDocument IOleDocument;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleDocumentSite_FWD_DEFINED__")
cpp_quote("#define __IOleDocumentSite_FWD_DEFINED__")
cpp_quote("typedef struct IOleDocumentSite IOleDocumentSite;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleDocumentView_FWD_DEFINED__")
cpp_quote("#define __IOleDocumentView_FWD_DEFINED__")
cpp_quote("typedef struct IOleDocumentView IOleDocumentView;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IEnumOleDocumentViews_FWD_DEFINED__")
cpp_quote("#define __IEnumOleDocumentViews_FWD_DEFINED__")
cpp_quote("typedef struct IEnumOleDocumentViews IEnumOleDocumentViews;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IContinueCallback_FWD_DEFINED__")
cpp_quote("#define __IContinueCallback_FWD_DEFINED__")
cpp_quote("typedef struct IContinueCallback IContinueCallback;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPrint_FWD_DEFINED__")
cpp_quote("#define __IPrint_FWD_DEFINED__")
cpp_quote("typedef struct IPrint IPrint;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPOLEDOCUMENT_DEFINED")
cpp_quote("#define _LPOLEDOCUMENT_DEFINED")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0000_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0000_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("#ifndef __IOleDocument_INTERFACE_DEFINED__")
cpp_quote("#define __IOleDocument_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleDocument *LPOLEDOCUMENT;")
cpp_quote("  typedef enum __MIDL_IOleDocument_0001 {")
cpp_quote("    DOCMISC_CANCREATEMULTIPLEVIEWS = 1,DOCMISC_SUPPORTCOMPLEXRECTANGLES = 2,DOCMISC_CANTOPENEDIT = 4,DOCMISC_NOFILESUPPORT = 8")
cpp_quote("  } DOCMISC;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleDocument;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleDocument : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI CreateView(IOleInPlaceSite *pIPSite,IStream *pstm,DWORD dwReserved,IOleDocumentView **ppView) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetDocMiscStatus(DWORD *pdwStatus) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnumViews(IEnumOleDocumentViews **ppEnum,IOleDocumentView **ppView) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleDocumentVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleDocument *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleDocument *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleDocument *This);")
cpp_quote("      HRESULT (WINAPI *CreateView)(IOleDocument *This,IOleInPlaceSite *pIPSite,IStream *pstm,DWORD dwReserved,IOleDocumentView **ppView);")
cpp_quote("      HRESULT (WINAPI *GetDocMiscStatus)(IOleDocument *This,DWORD *pdwStatus);")
cpp_quote("      HRESULT (WINAPI *EnumViews)(IOleDocument *This,IEnumOleDocumentViews **ppEnum,IOleDocumentView **ppView);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleDocumentVtbl;")
cpp_quote("  struct IOleDocument {")
cpp_quote("    CONST_VTBL struct IOleDocumentVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleDocument_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleDocument_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleDocument_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleDocument_CreateView(This,pIPSite,pstm,dwReserved,ppView) (This)->lpVtbl->CreateView(This,pIPSite,pstm,dwReserved,ppView)")
cpp_quote("#define IOleDocument_GetDocMiscStatus(This,pdwStatus) (This)->lpVtbl->GetDocMiscStatus(This,pdwStatus)")
cpp_quote("#define IOleDocument_EnumViews(This,ppEnum,ppView) (This)->lpVtbl->EnumViews(This,ppEnum,ppView)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleDocument_CreateView_Proxy(IOleDocument *This,IOleInPlaceSite *pIPSite,IStream *pstm,DWORD dwReserved,IOleDocumentView **ppView);")
cpp_quote("  void __RPC_STUB IOleDocument_CreateView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocument_GetDocMiscStatus_Proxy(IOleDocument *This,DWORD *pdwStatus);")
cpp_quote("  void __RPC_STUB IOleDocument_GetDocMiscStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocument_EnumViews_Proxy(IOleDocument *This,IEnumOleDocumentViews **ppEnum,IOleDocumentView **ppView);")
cpp_quote("  void __RPC_STUB IOleDocument_EnumViews_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPOLEDOCUMENTSITE_DEFINED")
cpp_quote("#define _LPOLEDOCUMENTSITE_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0265_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0265_v0_0_s_ifspec;")
cpp_quote("#ifndef __IOleDocumentSite_INTERFACE_DEFINED__")
cpp_quote("#define __IOleDocumentSite_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleDocumentSite *LPOLEDOCUMENTSITE;")
cpp_quote("  EXTERN_C const IID IID_IOleDocumentSite;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleDocumentSite : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI ActivateMe(IOleDocumentView *pViewToActivate) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleDocumentSiteVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleDocumentSite *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleDocumentSite *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleDocumentSite *This);")
cpp_quote("      HRESULT (WINAPI *ActivateMe)(IOleDocumentSite *This,IOleDocumentView *pViewToActivate);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleDocumentSiteVtbl;")
cpp_quote("  struct IOleDocumentSite {")
cpp_quote("    CONST_VTBL struct IOleDocumentSiteVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleDocumentSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleDocumentSite_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleDocumentSite_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleDocumentSite_ActivateMe(This,pViewToActivate) (This)->lpVtbl->ActivateMe(This,pViewToActivate)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleDocumentSite_ActivateMe_Proxy(IOleDocumentSite *This,IOleDocumentView *pViewToActivate);")
cpp_quote("  void __RPC_STUB IOleDocumentSite_ActivateMe_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPOLEDOCUMENTVIEW_DEFINED")
cpp_quote("#define _LPOLEDOCUMENTVIEW_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0266_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0266_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("#ifndef __IOleDocumentView_INTERFACE_DEFINED__")
cpp_quote("#define __IOleDocumentView_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleDocumentView *LPOLEDOCUMENTVIEW;")
cpp_quote("  EXTERN_C const IID IID_IOleDocumentView;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleDocumentView : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetInPlaceSite(IOleInPlaceSite *pIPSite) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetInPlaceSite(IOleInPlaceSite **ppIPSite) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetDocument(IUnknown **ppunk) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetRect(LPRECT prcView) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetRect(LPRECT prcView) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetRectComplex(LPRECT prcView,LPRECT prcHScroll,LPRECT prcVScroll,LPRECT prcSizeBox) = 0;")
cpp_quote("    virtual HRESULT WINAPI Show(WINBOOL fShow) = 0;")
cpp_quote("    virtual HRESULT WINAPI UIActivate(WINBOOL fUIActivate) = 0;")
cpp_quote("    virtual HRESULT WINAPI Open(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI CloseView(DWORD dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI SaveViewState(LPSTREAM pstm) = 0;")
cpp_quote("    virtual HRESULT WINAPI ApplyViewState(LPSTREAM pstm) = 0;")
cpp_quote("    virtual HRESULT WINAPI Clone(IOleInPlaceSite *pIPSiteNew,IOleDocumentView **ppViewNew) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleDocumentViewVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleDocumentView *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleDocumentView *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleDocumentView *This);")
cpp_quote("      HRESULT (WINAPI *SetInPlaceSite)(IOleDocumentView *This,IOleInPlaceSite *pIPSite);")
cpp_quote("      HRESULT (WINAPI *GetInPlaceSite)(IOleDocumentView *This,IOleInPlaceSite **ppIPSite);")
cpp_quote("      HRESULT (WINAPI *GetDocument)(IOleDocumentView *This,IUnknown **ppunk);")
cpp_quote("      HRESULT (WINAPI *SetRect)(IOleDocumentView *This,LPRECT prcView);")
cpp_quote("      HRESULT (WINAPI *GetRect)(IOleDocumentView *This,LPRECT prcView);")
cpp_quote("      HRESULT (WINAPI *SetRectComplex)(IOleDocumentView *This,LPRECT prcView,LPRECT prcHScroll,LPRECT prcVScroll,LPRECT prcSizeBox);")
cpp_quote("      HRESULT (WINAPI *Show)(IOleDocumentView *This,WINBOOL fShow);")
cpp_quote("      HRESULT (WINAPI *UIActivate)(IOleDocumentView *This,WINBOOL fUIActivate);")
cpp_quote("      HRESULT (WINAPI *Open)(IOleDocumentView *This);")
cpp_quote("      HRESULT (WINAPI *CloseView)(IOleDocumentView *This,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *SaveViewState)(IOleDocumentView *This,LPSTREAM pstm);")
cpp_quote("      HRESULT (WINAPI *ApplyViewState)(IOleDocumentView *This,LPSTREAM pstm);")
cpp_quote("      HRESULT (WINAPI *Clone)(IOleDocumentView *This,IOleInPlaceSite *pIPSiteNew,IOleDocumentView **ppViewNew);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleDocumentViewVtbl;")
cpp_quote("  struct IOleDocumentView {")
cpp_quote("    CONST_VTBL struct IOleDocumentViewVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleDocumentView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleDocumentView_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleDocumentView_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleDocumentView_SetInPlaceSite(This,pIPSite) (This)->lpVtbl->SetInPlaceSite(This,pIPSite)")
cpp_quote("#define IOleDocumentView_GetInPlaceSite(This,ppIPSite) (This)->lpVtbl->GetInPlaceSite(This,ppIPSite)")
cpp_quote("#define IOleDocumentView_GetDocument(This,ppunk) (This)->lpVtbl->GetDocument(This,ppunk)")
cpp_quote("#define IOleDocumentView_SetRect(This,prcView) (This)->lpVtbl->SetRect(This,prcView)")
cpp_quote("#define IOleDocumentView_GetRect(This,prcView) (This)->lpVtbl->GetRect(This,prcView)")
cpp_quote("#define IOleDocumentView_SetRectComplex(This,prcView,prcHScroll,prcVScroll,prcSizeBox) (This)->lpVtbl->SetRectComplex(This,prcView,prcHScroll,prcVScroll,prcSizeBox)")
cpp_quote("#define IOleDocumentView_Show(This,fShow) (This)->lpVtbl->Show(This,fShow)")
cpp_quote("#define IOleDocumentView_UIActivate(This,fUIActivate) (This)->lpVtbl->UIActivate(This,fUIActivate)")
cpp_quote("#define IOleDocumentView_Open(This) (This)->lpVtbl->Open(This)")
cpp_quote("#define IOleDocumentView_CloseView(This,dwReserved) (This)->lpVtbl->CloseView(This,dwReserved)")
cpp_quote("#define IOleDocumentView_SaveViewState(This,pstm) (This)->lpVtbl->SaveViewState(This,pstm)")
cpp_quote("#define IOleDocumentView_ApplyViewState(This,pstm) (This)->lpVtbl->ApplyViewState(This,pstm)")
cpp_quote("#define IOleDocumentView_Clone(This,pIPSiteNew,ppViewNew) (This)->lpVtbl->Clone(This,pIPSiteNew,ppViewNew)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleDocumentView_SetInPlaceSite_Proxy(IOleDocumentView *This,IOleInPlaceSite *pIPSite);")
cpp_quote("  void __RPC_STUB IOleDocumentView_SetInPlaceSite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocumentView_GetInPlaceSite_Proxy(IOleDocumentView *This,IOleInPlaceSite **ppIPSite);")
cpp_quote("  void __RPC_STUB IOleDocumentView_GetInPlaceSite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocumentView_GetDocument_Proxy(IOleDocumentView *This,IUnknown **ppunk);")
cpp_quote("  void __RPC_STUB IOleDocumentView_GetDocument_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocumentView_SetRect_Proxy(IOleDocumentView *This,LPRECT prcView);")
cpp_quote("  void __RPC_STUB IOleDocumentView_SetRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocumentView_GetRect_Proxy(IOleDocumentView *This,LPRECT prcView);")
cpp_quote("  void __RPC_STUB IOleDocumentView_GetRect_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocumentView_SetRectComplex_Proxy(IOleDocumentView *This,LPRECT prcView,LPRECT prcHScroll,LPRECT prcVScroll,LPRECT prcSizeBox);")
cpp_quote("  void __RPC_STUB IOleDocumentView_SetRectComplex_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocumentView_Show_Proxy(IOleDocumentView *This,WINBOOL fShow);")
cpp_quote("  void __RPC_STUB IOleDocumentView_Show_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocumentView_UIActivate_Proxy(IOleDocumentView *This,WINBOOL fUIActivate);")
cpp_quote("  void __RPC_STUB IOleDocumentView_UIActivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocumentView_Open_Proxy(IOleDocumentView *This);")
cpp_quote("  void __RPC_STUB IOleDocumentView_Open_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocumentView_CloseView_Proxy(IOleDocumentView *This,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IOleDocumentView_CloseView_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocumentView_SaveViewState_Proxy(IOleDocumentView *This,LPSTREAM pstm);")
cpp_quote("  void __RPC_STUB IOleDocumentView_SaveViewState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocumentView_ApplyViewState_Proxy(IOleDocumentView *This,LPSTREAM pstm);")
cpp_quote("  void __RPC_STUB IOleDocumentView_ApplyViewState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleDocumentView_Clone_Proxy(IOleDocumentView *This,IOleInPlaceSite *pIPSiteNew,IOleDocumentView **ppViewNew);")
cpp_quote("  void __RPC_STUB IOleDocumentView_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPENUMOLEDOCUMENTVIEWS_DEFINED")
cpp_quote("#define _LPENUMOLEDOCUMENTVIEWS_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0267_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0267_v0_0_s_ifspec;")
cpp_quote("#ifndef __IEnumOleDocumentViews_INTERFACE_DEFINED__")
cpp_quote("#define __IEnumOleDocumentViews_INTERFACE_DEFINED__")
cpp_quote("  typedef IEnumOleDocumentViews *LPENUMOLEDOCUMENTVIEWS;")
cpp_quote("  EXTERN_C const IID IID_IEnumOleDocumentViews;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IEnumOleDocumentViews : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Next(ULONG cViews,IOleDocumentView **rgpView,ULONG *pcFetched) = 0;")
cpp_quote("    virtual HRESULT WINAPI Skip(ULONG cViews) = 0;")
cpp_quote("    virtual HRESULT WINAPI Reset(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Clone(IEnumOleDocumentViews **ppEnum) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IEnumOleDocumentViewsVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IEnumOleDocumentViews *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IEnumOleDocumentViews *This);")
cpp_quote("      ULONG (WINAPI *Release)(IEnumOleDocumentViews *This);")
cpp_quote("      HRESULT (WINAPI *Next)(IEnumOleDocumentViews *This,ULONG cViews,IOleDocumentView **rgpView,ULONG *pcFetched);")
cpp_quote("      HRESULT (WINAPI *Skip)(IEnumOleDocumentViews *This,ULONG cViews);")
cpp_quote("      HRESULT (WINAPI *Reset)(IEnumOleDocumentViews *This);")
cpp_quote("      HRESULT (WINAPI *Clone)(IEnumOleDocumentViews *This,IEnumOleDocumentViews **ppEnum);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IEnumOleDocumentViewsVtbl;")
cpp_quote("  struct IEnumOleDocumentViews {")
cpp_quote("    CONST_VTBL struct IEnumOleDocumentViewsVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IEnumOleDocumentViews_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IEnumOleDocumentViews_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IEnumOleDocumentViews_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IEnumOleDocumentViews_Next(This,cViews,rgpView,pcFetched) (This)->lpVtbl->Next(This,cViews,rgpView,pcFetched)")
cpp_quote("#define IEnumOleDocumentViews_Skip(This,cViews) (This)->lpVtbl->Skip(This,cViews)")
cpp_quote("#define IEnumOleDocumentViews_Reset(This) (This)->lpVtbl->Reset(This)")
cpp_quote("#define IEnumOleDocumentViews_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IEnumOleDocumentViews_RemoteNext_Proxy(IEnumOleDocumentViews *This,ULONG cViews,IOleDocumentView **rgpView,ULONG *pcFetched);")
cpp_quote("  void __RPC_STUB IEnumOleDocumentViews_RemoteNext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumOleDocumentViews_Skip_Proxy(IEnumOleDocumentViews *This,ULONG cViews);")
cpp_quote("  void __RPC_STUB IEnumOleDocumentViews_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumOleDocumentViews_Reset_Proxy(IEnumOleDocumentViews *This);")
cpp_quote("  void __RPC_STUB IEnumOleDocumentViews_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumOleDocumentViews_Clone_Proxy(IEnumOleDocumentViews *This,IEnumOleDocumentViews **ppEnum);")
cpp_quote("  void __RPC_STUB IEnumOleDocumentViews_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPCONTINUECALLBACK_DEFINED")
cpp_quote("#define _LPCONTINUECALLBACK_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0268_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0268_v0_0_s_ifspec;")
cpp_quote("#ifndef __IContinueCallback_INTERFACE_DEFINED__")
cpp_quote("#define __IContinueCallback_INTERFACE_DEFINED__")
cpp_quote("  typedef IContinueCallback *LPCONTINUECALLBACK;")
cpp_quote("  EXTERN_C const IID IID_IContinueCallback;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IContinueCallback : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI FContinue(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI FContinuePrinting(LONG nCntPrinted,LONG nCurPage,wchar_t *pwszPrintStatus) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IContinueCallbackVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IContinueCallback *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IContinueCallback *This);")
cpp_quote("      ULONG (WINAPI *Release)(IContinueCallback *This);")
cpp_quote("      HRESULT (WINAPI *FContinue)(IContinueCallback *This);")
cpp_quote("      HRESULT (WINAPI *FContinuePrinting)(IContinueCallback *This,LONG nCntPrinted,LONG nCurPage,wchar_t *pwszPrintStatus);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IContinueCallbackVtbl;")
cpp_quote("  struct IContinueCallback {")
cpp_quote("    CONST_VTBL struct IContinueCallbackVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IContinueCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IContinueCallback_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IContinueCallback_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IContinueCallback_FContinue(This) (This)->lpVtbl->FContinue(This)")
cpp_quote("#define IContinueCallback_FContinuePrinting(This,nCntPrinted,nCurPage,pwszPrintStatus) (This)->lpVtbl->FContinuePrinting(This,nCntPrinted,nCurPage,pwszPrintStatus)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IContinueCallback_FContinue_Proxy(IContinueCallback *This);")
cpp_quote("  void __RPC_STUB IContinueCallback_FContinue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IContinueCallback_FContinuePrinting_Proxy(IContinueCallback *This,LONG nCntPrinted,LONG nCurPage,wchar_t *pwszPrintStatus);")
cpp_quote("  void __RPC_STUB IContinueCallback_FContinuePrinting_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef _LPPRINT_DEFINED")
cpp_quote("#define _LPPRINT_DEFINED")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0269_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0269_v0_0_s_ifspec;")
cpp_quote("#ifndef __IPrint_INTERFACE_DEFINED__")
cpp_quote("#define __IPrint_INTERFACE_DEFINED__")
cpp_quote("  typedef IPrint *LPPRINT;")
cpp_quote("  typedef enum __MIDL_IPrint_0001 {")
cpp_quote("    PRINTFLAG_MAYBOTHERUSER = 1,PRINTFLAG_PROMPTUSER = 2,PRINTFLAG_USERMAYCHANGEPRINTER = 4,PRINTFLAG_RECOMPOSETODEVICE = 8,")
cpp_quote("    PRINTFLAG_DONTACTUALLYPRINT = 16,PRINTFLAG_FORCEPROPERTIES = 32,PRINTFLAG_PRINTTOFILE = 64")
cpp_quote("  } PRINTFLAG;")
cpp_quote("  typedef struct tagPAGERANGE {")
cpp_quote("    LONG nFromPage;")
cpp_quote("    LONG nToPage;")
cpp_quote("  } PAGERANGE;")
cpp_quote("")
cpp_quote("  typedef struct tagPAGESET {")
cpp_quote("    ULONG cbStruct;")
cpp_quote("    WINBOOL fOddPages;")
cpp_quote("    WINBOOL fEvenPages;")
cpp_quote("    ULONG cPageRange;")
cpp_quote("    PAGERANGE rgPages[1 ];")
cpp_quote("  } PAGESET;")
cpp_quote("#define PAGESET_TOLASTPAGE ((WORD)(-1L))")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPrint;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPrint : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetInitialPageNum(LONG nFirstPage) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetPageInfo(LONG *pnFirstPage,LONG *pcPages) = 0;")
cpp_quote("    virtual HRESULT WINAPI Print(DWORD grfFlags,DVTARGETDEVICE **pptd,PAGESET **ppPageSet,STGMEDIUM *pstgmOptions,IContinueCallback *pcallback,LONG nFirstPage,LONG *pcPagesPrinted,LONG *pnLastPage) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPrintVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPrint *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPrint *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPrint *This);")
cpp_quote("      HRESULT (WINAPI *SetInitialPageNum)(IPrint *This,LONG nFirstPage);")
cpp_quote("      HRESULT (WINAPI *GetPageInfo)(IPrint *This,LONG *pnFirstPage,LONG *pcPages);")
cpp_quote("      HRESULT (WINAPI *Print)(IPrint *This,DWORD grfFlags,DVTARGETDEVICE **pptd,PAGESET **ppPageSet,STGMEDIUM *pstgmOptions,IContinueCallback *pcallback,LONG nFirstPage,LONG *pcPagesPrinted,LONG *pnLastPage);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPrintVtbl;")
cpp_quote("  struct IPrint {")
cpp_quote("    CONST_VTBL struct IPrintVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPrint_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPrint_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPrint_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPrint_SetInitialPageNum(This,nFirstPage) (This)->lpVtbl->SetInitialPageNum(This,nFirstPage)")
cpp_quote("#define IPrint_GetPageInfo(This,pnFirstPage,pcPages) (This)->lpVtbl->GetPageInfo(This,pnFirstPage,pcPages)")
cpp_quote("#define IPrint_Print(This,grfFlags,pptd,ppPageSet,pstgmOptions,pcallback,nFirstPage,pcPagesPrinted,pnLastPage) (This)->lpVtbl->Print(This,grfFlags,pptd,ppPageSet,pstgmOptions,pcallback,nFirstPage,pcPagesPrinted,pnLastPage)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPrint_SetInitialPageNum_Proxy(IPrint *This,LONG nFirstPage);")
cpp_quote("  void __RPC_STUB IPrint_SetInitialPageNum_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPrint_GetPageInfo_Proxy(IPrint *This,LONG *pnFirstPage,LONG *pcPages);")
cpp_quote("  void __RPC_STUB IPrint_GetPageInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPrint_RemotePrint_Proxy(IPrint *This,DWORD grfFlags,DVTARGETDEVICE **pptd,PAGESET **pppageset,RemSTGMEDIUM *pstgmOptions,IContinueCallback *pcallback,LONG nFirstPage,LONG *pcPagesPrinted,LONG *pnLastPage);")
cpp_quote("  void __RPC_STUB IPrint_RemotePrint_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("#endif")

cpp_quote("#ifndef _LPOLECOMMANDTARGET_DEFINED")
cpp_quote("#define _LPOLECOMMANDTARGET_DEFINED")

[
    object,
    uuid(b722bccb-4e68-101b-a2bc-00aa00404770),
    pointer_default(unique)
]
interface IOleCommandTarget : IUnknown {
    typedef [unique] IOleCommandTarget *LPOLECOMMANDTARGET;

    typedef enum OLECMDF {
        OLECMDF_SUPPORTED  = 0x0001,
        OLECMDF_ENABLED    = 0x0002,
        OLECMDF_LATCHED    = 0x0004,
        OLECMDF_NINCHED    = 0x0008,
        OLECMDF_INVISIBLE  = 0x0010,
        OLECMDF_DEFHIDEONCTXTMENU = 0x0020
    } OLECMDF;

    typedef struct _tagOLECMD {
        ULONG cmdID;
        DWORD cmdf;
    } OLECMD;

    typedef struct _tagOLECMDTEXT{
        DWORD cmdtextf;
        ULONG cwActual;
        ULONG cwBuf;
        [size_is(cwBuf)] wchar_t rgwz[];
    } OLECMDTEXT;

    typedef enum OLECMDTEXTF {
        OLECMDTEXTF_NONE = 0,
        OLECMDTEXTF_NAME = 1,
        OLECMDTEXTF_STATUS = 2
    } OLECMDTEXTF;

    typedef enum OLECMDEXECOPT {
        OLECMDEXECOPT_DODEFAULT      = 0,
        OLECMDEXECOPT_PROMPTUSER     = 1,
        OLECMDEXECOPT_DONTPROMPTUSER = 2,
        OLECMDEXECOPT_SHOWHELP       = 3
    } OLECMDEXECOPT;

    typedef enum OLECMDID {
        OLECMDID_OPEN                   = 1,
        OLECMDID_NEW                    = 2,
        OLECMDID_SAVE                   = 3,
        OLECMDID_SAVEAS                 = 4,
        OLECMDID_SAVECOPYAS             = 5,
        OLECMDID_PRINT                  = 6,
        OLECMDID_PRINTPREVIEW           = 7,
        OLECMDID_PAGESETUP              = 8,
        OLECMDID_SPELL                  = 9,
        OLECMDID_PROPERTIES             = 10,
        OLECMDID_CUT                    = 11,
        OLECMDID_COPY                   = 12,
        OLECMDID_PASTE                  = 13,
        OLECMDID_PASTESPECIAL           = 14,
        OLECMDID_UNDO                   = 15,
        OLECMDID_REDO                   = 16,
        OLECMDID_SELECTALL              = 17,
        OLECMDID_CLEARSELECTION         = 18,
        OLECMDID_ZOOM                   = 19,
        OLECMDID_GETZOOMRANGE           = 20,
        OLECMDID_UPDATECOMMANDS         = 21,
        OLECMDID_REFRESH                = 22,
        OLECMDID_STOP                   = 23,
        OLECMDID_HIDETOOLBARS           = 24,
        OLECMDID_SETPROGRESSMAX         = 25,
        OLECMDID_SETPROGRESSPOS         = 26,
        OLECMDID_SETPROGRESSTEXT        = 27,
        OLECMDID_SETTITLE               = 28,
        OLECMDID_SETDOWNLOADSTATE       = 29,
        OLECMDID_STOPDOWNLOAD           = 30,
        OLECMDID_ONTOOLBARACTIVATED     = 31,
        OLECMDID_FIND                   = 32,
        OLECMDID_DELETE                 = 33,
        OLECMDID_HTTPEQUIV              = 34,
        OLECMDID_HTTPEQUIV_DONE         = 35,
        OLECMDID_ENABLE_INTERACTION     = 36,
        OLECMDID_ONUNLOAD               = 37,
        OLECMDID_PROPERTYBAG2           = 38,
        OLECMDID_PREREFRESH             = 39,
        OLECMDID_SHOWSCRIPTERROR        = 40,
        OLECMDID_SHOWMESSAGE            = 41,
        OLECMDID_SHOWFIND               = 42,
        OLECMDID_SHOWPAGESETUP          = 43,
        OLECMDID_SHOWPRINT              = 44,
        OLECMDID_CLOSE                  = 45,
        OLECMDID_ALLOWUILESSSAVEAS      = 46,
        OLECMDID_DONTDOWNLOADCSS        = 47,
        OLECMDID_UPDATEPAGESTATUS       = 48,
        OLECMDID_PRINT2                 = 49,
        OLECMDID_PRINTPREVIEW2          = 50,
        OLECMDID_SETPRINTTEMPLATE       = 51,
        OLECMDID_GETPRINTTEMPLATE       = 52,
        OLECMDID_PAGEACTIONBLOCKED      = 55,
        OLECMDID_PAGEACTIONUIQUERY      = 56,
        OLECMDID_FOCUSVIEWCONTROLS      = 57,
        OLECMDID_FOCUSVIEWCONTROLSQUERY = 58,
        OLECMDID_SHOWPAGEACTIONMENU     = 59,
        OLECMDID_ADDTRAVELENTRY         = 60,
        OLECMDID_UPDATETRAVELENTRY      = 61,
        OLECMDID_UPDATEBACKFORWARDSTATE = 62,
        OLECMDID_OPTICAL_ZOOM           = 63,
        OLECMDID_OPTICAL_GETZOOMRANGE   = 64,
        OLECMDID_WINDOWSTATECHANGED     = 65,
        OLECMDID_ACTIVEXINSTALLSCOPE    = 66,
        OLECMDID_UPDATETRAVELENTRY_DATARECOVERY = 67
    } OLECMDID;

    cpp_quote("#define OLECMDERR_E_FIRST (OLE_E_LAST+1)")
    cpp_quote("#define OLECMDERR_E_NOTSUPPORTED (OLECMDERR_E_FIRST)")
    cpp_quote("#define OLECMDERR_E_DISABLED (OLECMDERR_E_FIRST+1)")
    cpp_quote("#define OLECMDERR_E_NOHELP (OLECMDERR_E_FIRST+2)")
    cpp_quote("#define OLECMDERR_E_CANCELED (OLECMDERR_E_FIRST+3)")
    cpp_quote("#define OLECMDERR_E_UNKNOWNGROUP (OLECMDERR_E_FIRST+4)")

    cpp_quote("#define MSOCMDERR_E_FIRST OLECMDERR_E_FIRST")
    cpp_quote("#define MSOCMDERR_E_NOTSUPPORTED OLECMDERR_E_NOTSUPPORTED")
    cpp_quote("#define MSOCMDERR_E_DISABLED OLECMDERR_E_DISABLED")
    cpp_quote("#define MSOCMDERR_E_NOHELP OLECMDERR_E_NOHELP")
    cpp_quote("#define MSOCMDERR_E_CANCELED OLECMDERR_E_CANCELED")
    cpp_quote("#define MSOCMDERR_E_UNKNOWNGROUP OLECMDERR_E_UNKNOWNGROUP")

    cpp_quote("#define OLECMDARGINDEX_SHOWPAGEACTIONMENU_HWND 0")
    cpp_quote("#define OLECMDARGINDEX_SHOWPAGEACTIONMENU_X 1")
    cpp_quote("#define OLECMDARGINDEX_SHOWPAGEACTIONMENU_Y 2")
    cpp_quote("#define OLECMDARGINDEX_ACTIVEXINSTALL_PUBLISHER 0")
    cpp_quote("#define OLECMDARGINDEX_ACTIVEXINSTALL_DISPLAYNAME 1")

    typedef enum IGNOREMIME {
        IGNOREMIME_PROMPT = 1,
        IGNOREMIME_TEXT = 2
    } IGNOREMIME;

    typedef enum WPCSETTING {
        WPCSETTING_LOGGING_ENABLED = 1,
        WPCSETTING_FILEDOWNLOAD_BLOCKED = 2
    } WPCSETTING;

    /* [input_sync] */
    HRESULT QueryStatus(
            [in, unique] const GUID *pguidCmdGroup,
            [in] ULONG cCmds,
            [in, out,size_is(cCmds)] OLECMD prgCmds[],
            [in, out, unique] OLECMDTEXT *pCmdText);


    HRESULT Exec(
            [in, unique] const GUID *pguidCmdGroup,
            [in] DWORD nCmdID,
            [in] DWORD nCmdexecopt,
            [in, unique] VARIANT *pvaIn,
            [in, out, unique] VARIANT *pvaOut);
}

cpp_quote("#endif")

cpp_quote("  typedef enum {")
cpp_quote("    OLECMDIDF_REFRESH_NORMAL = 0,OLECMDIDF_REFRESH_IFEXPIRED = 1,OLECMDIDF_REFRESH_CONTINUE = 2,OLECMDIDF_REFRESH_COMPLETELY = 3,")
cpp_quote("    OLECMDIDF_REFRESH_NO_CACHE = 4,OLECMDIDF_REFRESH_RELOAD = 5,OLECMDIDF_REFRESH_LEVELMASK = 0x00FF,OLECMDIDF_REFRESH_CLEARUSERINPUT = 0x1000,")
cpp_quote("    OLECMDIDF_REFRESH_PROMPTIFOFFLINE = 0x2000,OLECMDIDF_REFRESH_THROUGHSCRIPT = 0x4000,OLECMDIDF_REFRESH_PAGEACTION_ACTIVEXINSTALL = 0x00010000,")
cpp_quote("    OLECMDIDF_REFRESH_PAGEACTION_FILEDOWNLOAD = 0x00020000,OLECMDIDF_REFRESH_PAGEACTION_LOCALMACHINE = 0x00040000,")
cpp_quote("    OLECMDIDF_REFRESH_PAGEACTION_POPUPWINDOW = 0x00080000,OLECMDIDF_REFRESH_PAGEACTION_PROTLOCKDOWNLOCALMACHINE = 0x00100000,")
cpp_quote("    OLECMDIDF_REFRESH_PAGEACTION_PROTLOCKDOWNTRUSTED = 0x00200000,OLECMDIDF_REFRESH_PAGEACTION_PROTLOCKDOWNINTRANET = 0x00400000,")
cpp_quote("    OLECMDIDF_REFRESH_PAGEACTION_PROTLOCKDOWNINTERNET = 0x00800000,OLECMDIDF_REFRESH_PAGEACTION_PROTLOCKDOWNRESTRICTED = 0x01000000")
cpp_quote("  } OLECMDID_REFRESHFLAG;")
cpp_quote("")
cpp_quote("  typedef enum {")
cpp_quote("    OLECMDIDF_PAGEACTION_FILEDOWNLOAD = 0x00000001,OLECMDIDF_PAGEACTION_ACTIVEXINSTALL = 0x00000002,")
cpp_quote("    OLECMDIDF_PAGEACTION_ACTIVEXTRUSTFAIL = 0x00000004,OLECMDIDF_PAGEACTION_ACTIVEXUSERDISABLE = 0x00000008,")
cpp_quote("    OLECMDIDF_PAGEACTION_ACTIVEXDISALLOW = 0x00000010,OLECMDIDF_PAGEACTION_ACTIVEXUNSAFE = 0x00000020,OLECMDIDF_PAGEACTION_POPUPWINDOW = 0x00000040,")
cpp_quote("    OLECMDIDF_PAGEACTION_LOCALMACHINE = 0x00000080,OLECMDIDF_PAGEACTION_MIMETEXTPLAIN = 0x00000100,OLECMDIDF_PAGEACTION_SCRIPTNAVIGATE = 0x00000200,")
cpp_quote("    OLECMDIDF_PAGEACTION_PROTLOCKDOWNLOCALMACHINE = 0x00000400,OLECMDIDF_PAGEACTION_PROTLOCKDOWNTRUSTED = 0x00000800,")
cpp_quote("    OLECMDIDF_PAGEACTION_PROTLOCKDOWNINTRANET = 0x00001000,OLECMDIDF_PAGEACTION_PROTLOCKDOWNINTERNET = 0x00002000,")
cpp_quote("    OLECMDIDF_PAGEACTION_PROTLOCKDOWNRESTRICTED = 0x00004000,OLECMDIDF_PAGEACTION_PROTLOCKDOWNDENY = 0x00008000,")
cpp_quote("    OLECMDIDF_PAGEACTION_POPUPALLOWED = 0x00010000,OLECMDIDF_PAGEACTION_RESET = 0x80000000")
cpp_quote("  } OLECMDID_PAGEACTIONFLAG;")
cpp_quote("")
cpp_quote("  typedef enum {")
cpp_quote("    PAGEACTION_UI_DEFAULT = 0,PAGEACTION_UI_MODAL = 1,PAGEACTION_UI_MODELESS = 2,PAGEACTION_UI_SILENT = 3")
cpp_quote("  } PAGEACTION_UI;")
cpp_quote("")
cpp_quote("#define IMsoDocument IOleDocument")
cpp_quote("#define IMsoDocumentSite IOleDocumentSite")
cpp_quote("#define IMsoView IOleDocumentView")
cpp_quote("#define IEnumMsoView IEnumOleDocumentViews")
cpp_quote("#define IMsoCommandTarget IOleCommandTarget")
cpp_quote("#define LPMSODOCUMENT LPOLEDOCUMENT")
cpp_quote("#define LPMSODOCUMENTSITE LPOLEDOCUMENTSITE")
cpp_quote("#define LPMSOVIEW LPOLEDOCUMENTVIEW")
cpp_quote("#define LPENUMMSOVIEW LPENUMOLEDOCUMENTVIEWS")
cpp_quote("#define LPMSOCOMMANDTARGET LPOLECOMMANDTARGET")
cpp_quote("#define MSOCMD OLECMD")
cpp_quote("#define MSOCMDTEXT OLECMDTEXT")
cpp_quote("#define IID_IMsoDocument IID_IOleDocument")
cpp_quote("#define IID_IMsoDocumentSite IID_IOleDocumentSite")
cpp_quote("#define IID_IMsoView IID_IOleDocumentView")
cpp_quote("#define IID_IEnumMsoView IID_IEnumOleDocumentViews")
cpp_quote("#define IID_IMsoCommandTarget IID_IOleCommandTarget")
cpp_quote("#define MSOCMDF_SUPPORTED OLECMDF_SUPPORTED")
cpp_quote("#define MSOCMDF_ENABLED OLECMDF_ENABLED")
cpp_quote("#define MSOCMDF_LATCHED OLECMDF_LATCHED")
cpp_quote("#define MSOCMDF_NINCHED OLECMDF_NINCHED")
cpp_quote("#define MSOCMDTEXTF_NONE OLECMDTEXTF_NONE")
cpp_quote("#define MSOCMDTEXTF_NAME OLECMDTEXTF_NAME")
cpp_quote("#define MSOCMDTEXTF_STATUS OLECMDTEXTF_STATUS")
cpp_quote("#define MSOCMDEXECOPT_DODEFAULT OLECMDEXECOPT_DODEFAULT")
cpp_quote("#define MSOCMDEXECOPT_PROMPTUSER OLECMDEXECOPT_PROMPTUSER")
cpp_quote("#define MSOCMDEXECOPT_DONTPROMPTUSER OLECMDEXECOPT_DONTPROMPTUSER")
cpp_quote("#define MSOCMDEXECOPT_SHOWHELP OLECMDEXECOPT_SHOWHELP")
cpp_quote("#define MSOCMDID_OPEN OLECMDID_OPEN")
cpp_quote("#define MSOCMDID_NEW OLECMDID_NEW")
cpp_quote("#define MSOCMDID_SAVE OLECMDID_SAVE")
cpp_quote("#define MSOCMDID_SAVEAS OLECMDID_SAVEAS")
cpp_quote("#define MSOCMDID_SAVECOPYAS OLECMDID_SAVECOPYAS")
cpp_quote("#define MSOCMDID_PRINT OLECMDID_PRINT")
cpp_quote("#define MSOCMDID_PRINTPREVIEW OLECMDID_PRINTPREVIEW")
cpp_quote("#define MSOCMDID_PAGESETUP OLECMDID_PAGESETUP")
cpp_quote("#define MSOCMDID_SPELL OLECMDID_SPELL")
cpp_quote("#define MSOCMDID_PROPERTIES OLECMDID_PROPERTIES")
cpp_quote("#define MSOCMDID_CUT OLECMDID_CUT")
cpp_quote("#define MSOCMDID_COPY OLECMDID_COPY")
cpp_quote("#define MSOCMDID_PASTE OLECMDID_PASTE")
cpp_quote("#define MSOCMDID_PASTESPECIAL OLECMDID_PASTESPECIAL")
cpp_quote("#define MSOCMDID_UNDO OLECMDID_UNDO")
cpp_quote("#define MSOCMDID_REDO OLECMDID_REDO")
cpp_quote("#define MSOCMDID_SELECTALL OLECMDID_SELECTALL")
cpp_quote("#define MSOCMDID_CLEARSELECTION OLECMDID_CLEARSELECTION")
cpp_quote("#define MSOCMDID_ZOOM OLECMDID_ZOOM")
cpp_quote("#define MSOCMDID_GETZOOMRANGE OLECMDID_GETZOOMRANGE")
cpp_quote("  EXTERN_C const GUID SID_SContainerDispatch;")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0271_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_docobj_0271_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("  HRESULT WINAPI IEnumOleDocumentViews_Next_Proxy(IEnumOleDocumentViews *This,ULONG cViews,IOleDocumentView **rgpView,ULONG *pcFetched);")
cpp_quote("  HRESULT WINAPI IEnumOleDocumentViews_Next_Stub(IEnumOleDocumentViews *This,ULONG cViews,IOleDocumentView **rgpView,ULONG *pcFetched);")
cpp_quote("  HRESULT WINAPI IPrint_Print_Proxy(IPrint *This,DWORD grfFlags,DVTARGETDEVICE **pptd,PAGESET **ppPageSet,STGMEDIUM *pstgmOptions,IContinueCallback *pcallback,LONG nFirstPage,LONG *pcPagesPrinted,LONG *pnLastPage);")
cpp_quote("  HRESULT WINAPI IPrint_Print_Stub(IPrint *This,DWORD grfFlags,DVTARGETDEVICE **pptd,PAGESET **pppageset,RemSTGMEDIUM *pstgmOptions,IContinueCallback *pcallback,LONG nFirstPage,LONG *pcPagesPrinted,LONG *pnLastPage);")
